树莓派内核开发编译
原文地址:http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html
一、交叉编译
在之前一篇学习博文中已经介绍了如何交叉编译在这里就直接跳过了
二、配置config
linux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig
树莓派2、3的工程是bcm2709_defconfig
编译内核就必须配置:
配置的最终目标会生成.config文件。该文件指导Makefile去把有用东西组织成内核
第一种方式:
cp 厂家.config .config
第二种方式:
make menuconfig 一项项配置通常是基于厂家的config来配置
第三种方式:
完全自己来配置
三、内核配置
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
//获取bcm2709_defconfig的配置到 .config里
四、编译过程所需库
sudo apt-get install bc
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
五、编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
//因为编译过程可能会有一点久自己尝试就好了
//如果编译成功我们在该目录下可以看见一个vmlinux 文件,失败则无该文件
//成功后目标zlmage镜像在arch/arm/boot下面
打包zlmage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage./kernel_new.img
//在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件
数据拷贝
在进行数据拷贝时我们先建两个空文件夹
mkdir data1
mkdir data2
挂载U盘
sudo mount /dev/sdb1 data1
//fat 分区是boot相关内容kernel的img
sudo mount /dev/sdb2 data2
//ext4 分区也就是系统的根目录分区
fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;ext4分区,也就是系统的根目录分区
后面配置的时候根据自己的路径写就好了我这里是在/home/yhy 下的data1、data2 中
1、安装modules
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/yhy/data2 modules_install
2、更新 kernel.img 文件
前面已经用 mkknlimg 工具打包了kernel_new.img文件了,把它复制到boot分区并配置使用即可:
cp kernel_new.img /home/yhy/data1/kernel7.img
编辑 [fat]/config.txt 文件,在最后加入一行:
kernel=kernel_new.img
3、复制其他相关文件
cp arch/arm/boot/dts/.*dtb* /home/yhy/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/yhy/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/yhy/data1/overlays/
更新完成后插回树莓派即可开机,开机后可以用 uname -a 命令查看kernel信息已经改变