实验环境
VMware Workstation Player
Ubuntu16.04
kernel-3.2.tar.bz2
Linux内核编译
在ubuntu上编译嵌入式Linux内核,需要大家提前安装好交叉编译工具链,在此就不再赘述。编写Linux内核需要内核源码和内核编译配置文件kernel_config,如下图:
具体编译步骤如下:
1.解压内核源码
tar -jxvf kernel-3.2.tar.bz2
2.替换编译内核配置文件,选择需要编译的内核模块
cp -a kernel_config ./kernel-3.2/.config
3.备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config
make -C ./kernel-3.2 oldconfig
4.编译生成内核镜像文件
make -C ./kernel-3.2 -j4 uImage
-j4表示4线程编译内核
编译完成后最终在arch/arm/boot/目录下生成 uImage 内核镜像文件
编译完成结果如下图:
至此,整个Linux的内核编译过程已经完成。
扩展:make Image uImage与zImage的区别?
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。
那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。
zImage 是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明 这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区 别。另外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。