Linux 内核移植
移植目标
1.获取 Linux 内核源码;2 修改内核,使内核启动能正确挂载根文件系统 rootfs(即选择内核支持的文件系统格式);3 修改驱动,裁剪内核;4 编译生成 uImage,下载体验。
设置环境变量
配置或编译内核之前,首先要确定目标 CPU 架构,以及编译时采用什么工具链。方法一:通过修改根目录下的 Makefile 中 ARCH 和 CROSS_COMPILE 值。方法二:修改环境变量。修改/etc/profile 文件,对所有用户生效,执行 source /etc/profile 后立刻生效;或修改~/.bashrc,对当前用户有效(推荐此方法),修改过后执行 source ~/.bashrc 立刻生效。例如:vim ~/.bashrc,在文件最后添加,export ARCH=armexport CROSS_COMPILE=/usr/local/arm-linux-gcc/bin/arm-linux-执行指令:source ~/.bashrc 查看环境变量:echo $ARCH
![](https://static001.geekbang.org/infoq/18/189e73e8f35376eeef40abd331cb88a6.png)
下载解压内核
Linux 官网为 https://www.kernel.org,一般芯片厂商会从官网下载某个版本 Linux 内核移植到自己的 CPU 上。所以也可以从厂商提供的 Linux 内核移植到自己的产品中,比如 Atmel 的 AT91 系列 kernel 可以在https://github.com/linux4sam地址下载。下载解压,ubuntu 下的 zip 软件有问题,编译时可能会弹出:File name too long 错误。可以执行“sudo apt-get install p7zip-full”和“7za x xxxx.zip”进行解压。
配置并编译内核
1.内核配置,配置支持文件系统的格式。将内核文件/arch/arm/configs 目录下的 sama5_defconfig 配置文件拷贝到内核文件第一级目录下。打开命令行终端,输入“make sama5_defconfig”命令对其进行编译。
![](https://static001.geekbang.org/infoq/9b/9b68600722d3c5fc8d90f4d3bde92ccb.png)
2.执行 make menuconfig 指令进入配置界面,我们使用文件系统为 ramdisk 格式,需要修改内核支持该文件系统。进入“General setup”目录下,选中“Initial RAM filesystem and RAM disk (initramfs/initrd) support”选项(按空格键选中),如下所示:
![](https://static001.geekbang.org/infoq/78/78c2c73315064e2e33a5a8f906070d9e.png)
3.修改 kernel 的版本信息。进入“General setup”目录下,选中“Local version –append tp kernel release”选项,输入版本信息。
![](https://static001.geekbang.org/infoq/13/136296e69f577696f909a94cff56d485.png)
4 设置 ramdisks 编译格式为 bzip2:选中“General setup”->” Support initial ramdisks compressed using bzip2”。
5 设置 ramdisk 的数量为 1 和大小为 128M。
![](https://static001.geekbang.org/infoq/45/45581b51941a53b818bdf56ab3ad0583.png)
6 根目录下执行 make uImage(生成 uboot 专用的镜像文件,现在新的 uboot 已经支持 zImage 了);在 arch/arm/boot 目录下生成 uImage 文件,即为 kernel 镜像文件。
![](https://static001.geekbang.org/infoq/36/36bfaef849997e37e32050c2070302a5.png)
编译下载过后,可以看到 uboot 已正确启动 kernel
![](https://static001.geekbang.org/infoq/6a/6a886fbff7be7e9a1c7f18485491c18d.png)
![](https://static001.geekbang.org/infoq/4c/4cff3c78371f9cbf224ce56051849ebb.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
评论