这部分内容,参见 附录-建立树莓派交叉编译环境
git仓库位于 https://github.com/raspberrypi/linux 把源码克隆到 ~/project/git/rpi_linux 目录:
$ cd ~/project/git
$ git clone https://github.com/raspberrypi/linux rpi_linux
接下来,对内核源码进行清理(清除遗留的配置文件和编译结果):
$ cd ~/project/git/rpi_linux
$ make mrprope
.config文件是编译一个linux镜像文件的蓝图脚本,负责保存对于特定系统的内容配置,它放在了linux文件树下的顶层文件中。
实际上,我们已经提供了一套完整的配置和编译结果,但这里只须用到 config 配置文件:
git仓库位于 https://github.com/openRPi/linux_generate,克隆到 ~/project/git/openRPi/linux_gererate 目录:
$ cd ~/project/git/openRPi
$ git clone https://github.com/openRPi/linux_generate linux_generate
配置好的config文件位于 ~/project/git/openRPi/linux_gererate 目录顶层。我们把它复制并到 rpi_linux 源码目录下,重命名为 .config
$ cp ~/project/git/openRPi/linux_generate/config ~/project/git/rpi_linux
$ mv ~/project/git/rpi_linux/config ~/project/git/rpi_linux/.config
此时,交叉编译已经全部准备好了
$ make oldconfig ARCH=arm CROSS_COMPILE=arm-bcm2708-linux-gnueabi-
这一步可能会弹出一些询问选项。这是因为内核源码经过了更新,多出了一些 .config 中没有涉及到的配置,这时候 make 指令便询问用户是否启用新配置。我们全部选择默认值,也就是不停地回车,直到 make 命令结束。
$ make ARCH=arm CROSS_COMPILE=arm-bcm2708-linux-gnueabi- -j3
-j3参数加快编译速度,一般数值为CPU核心数加1。这一步可能需要30分钟到1个小时。
make 执行结束后,内核映像和驱动模块都编译好了,但它们分散在源代码的各个目录下,我们需要将它们分别取出。
内核映像名为 zImage ,位于目录 ~/project/git/rpi_linux/arch/arm/boot 下。我们将它复制到目录 ~/project/git/openRPi/linux_generate 。
$ cp ~/project/git/rpi_linux/arch/arm/boot/zImage ~/project/git/openRPi/linux_generate
此时,zImage映像还不能直接使用,需要处理成树莓派适用的格式 kernel.img。官方给出了处理工具,路径位于 ~/project/git/rpi_tools/mkimage/imagetool-uncompressed.py。这是一个 Python 脚本。不太方便的地方是,这个工具只能处理同目录下的zImage,因此我们应该先把zImage复制到同目录下,处理生成 kernel.img。
$ cp ~/project/git/openRPi/linux_generate/zImage ~/project/git/rpi_tools/mkimage
$ cd ~/project/git/rpi_tools/mkimage
$ python imagetool-uncompressed.py zImage
此时,同目录下出现 kernel.img 文件。我们把它复制回去。
$ cp ~/project/git/rpi_tools/mkimage/kernel.img ~/project/git/openRPi/linux_generate
$ make modules_install ARCH=arm CROSS_COMPILE=arm-bcm2708-linux-gnueabi- INSTALL_MOD_PATH=~/project/git/openRPi/linux_generate
命令执行后,所有的 frameware 固件和驱动模块都出现在了 ~/project/git/openRPi/linux_generate 目录下。
好了,到这里,我们已经生成了全新的内核映像、固件和驱动模块,~/project/git/openRPi/linux_generate 目录看起来就像这样:
$ tree -L 4
.
├── config
├── kernel.img
├── modules
│ └── lib
│ ├── firmware
│ │ ├── cpia2
│ │ ├── edgeport
│ │ ├── emi26
│ │ ├── emi62
│ │ ├── kaweth
│ │ ├── keyspan_pda
│ │ ├── mts_cdma.fw
│ │ ├── mts_edge.fw
│ │ ├── mts_gsm.fw
│ │ ├── ti_3410.fw
│ │ ├── ti_5052.fw
│ │ ├── whiteheat.fw
│ │ ├── whiteheat_loader.fw
│ │ └── yam
│ └── modules
│ └── 3.12.24+
├── README.md
└── zImage
覆盖树莓派对应的文件(夹)即可