本篇博客讲了怎么样成功编译内核,编译的内核不一定能用.不讲怎么修改内核
交叉编译工具链环境的搭建__1
安装工具
sudo apt-get install libncurses5-dev
sudo apt-get install u-boot-tools
源码位置
具体选择哪个源码,选择稳定版本的吧.
如果不是第一次编译内核文件,首先要
make mrproper
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
可以通过修改Makefile 来表面避免在shell 下输入这条命令,不过一般不建议修改Makefile
arm芯片对应的配置文件在arch/arm/configs/目录下
根据你芯片的型号选择一个配置文件,就是和你芯片名称最相似的文件,并拷贝到顶层目录为.config
这个是粗略的确定下编译内核前的配置
会在顶层目录 生成 一个 .config 文件,这个就是配置的主要结果.
这些 arch/arm/configs/ 下的 xxx_defconfig 对应的是一个开发板,可以说是一个母版.
怎么确定找哪个 xxx_defconfig,
硬件说板子是抄的 A板子,A板子抄的是 B 板子,刚好,B板子在内核中对应一个 xxx_defconfig
那么 你就用 B板子对应的 xxx_defconfig,即 make xxx_defconfig
例如
make vexpress_ca9x4_defconfig
这个操作会改变 顶层目录 下 的 .config
最终生成的.config 应该匹配你的板子
操作效果
读入当前目录下的.config
会生成一个界面,让你选择一些东西,去选择一些东西.
当退出的时候,保存,就会写入.config
这个过程是最复杂的,你的99.9%的时间都应该花在这上面,这里面涉及一些改源码(主要是驱动源码)之类的.
make uImage//现在 arm 的板子也可以用 Image 了,具体待研究.
该步骤会在arch/arm/boot/文件夹下生成一个uImage文件,该文件就是内核镜像
//如果有编译机器是8核的话,可以用 make uImage -j8
uIamge是由zImage 经工具mkimage制作而来的,制作的过程就是压缩
uboot目前只能支持uImage启动,不支持zImage启动
bootm加载linux镜像,加载的是uIamge,bootm需要先对uIamge解压,解压地址为内核入口地址。当解压完成时uIamge和zIamge几乎是相同的,差别是uImage比zImage多64字节
//多出的64字节
2705 1956 fad0 6c19 58d0 99f5 0030 c588
8000 8000 8000 8000 c959 2892 0502 0200
4c69 6e75 782d 332e 302e 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000