最近入手了树莓派,鉴于目前从事的工作,不摆弄一下它的内核是说不过去的。
官方资源
编译
按照官方文档,我的部分编译步骤如下。
cd linux
KERNEL=kernel7
make bcm2709_defconfig
make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
sudo reboot
Troubleshooting
我遇到编译错误是,arch/arm/boot/dts/
和arch/arm/boot/dts/overlays/
下面的文件都找不到include/dt-bindings/
下面的一些头文件,实际上是找不到dt-bindings目录。单独执行make dtbs
就可以很清楚地看到错误。
解决错误的方法就是像下面这样,在编译时把include
的据对路径加到DTC_INCLUDE
里面。
make DTC_INCLUDE+="/home/pi/linux/include" dtbs
验证
为了验证内核是否成功替换,我们不妨改一下代码,编译和替换内核之后,再看一下打印。
我加在了我熟悉的文件里面,在fs/fat/namei_vfat.c
的init_vfat_fs
函数里面加一些打印,修改结果如下。
static int __init init_vfat_fs(void)
{
printk("************\n");
printk("hello world!\n");
printk("************\n");
return register_filesystem(&vfat_fs_type);
}
输出
重启之后,键入dmesg
就可以看到内核的开机打印,其中就可以找到如下打印。
[ 0.170461] ************
[ 0.170466] hello world!
[ 0.170470] ************