如何为树莓派编译官方版本Linux内核
这篇文章将为大家详细讲解有关如何为树莓派编译官方版本Linux内核,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
为树莓派编译Linux内核的文章在网上面有很多,但是大部分文章中记录的是直接从GitHub上面拉取官方的repository,然后用官方的一整套工具链编译生成Linux内核,没有人尝试过直接从Linux Kernel官网下载源码然后编译生成Linux内核的。自己花了点时间编译了kernel官网上的Linux内核源码,并且也成功了,特此来记录一下研究的过程。
下面所有的操作全部在/home/test/RPI/目录下,所用的树莓派硬件版本为3B。
首先,从这里下载交叉编译工具链,然后解压:
wget -c http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar.xzxz -d gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar.xztar xvf gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar
然后配置交叉编译环境:
sudo apt-get install libncurses-dev build-essentialexport PATH=$PATH:/home/test/RPI/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf/bin/
其中,ncurses是终端下的界面库,是编译menuconfig阶段的依赖项;build-essential主要用来提供编译时的make命令。
然后,下载内核源码并解压:
wget -c https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.104.tar.xzxz -d linux-4.19.104.tar.xztar xvf linux-4.19.104.tar
然后进入源码目录开始配置内核:
cd linux-4.19.104/make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2835_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
这里主要使用了内核源码中自带的bcm2835_defconfig配置,这个是编译官方内核源码的关键。
在编译menuconfig阶段,会弹出内核配置窗口,在这里可以对内核进行相关的配置:
这里为了演示,直接采用默认配置,选择"Exit"后按回车保存并退出。
接下来就可以开始编译内核了:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs
为了加快内核编译的速度,这里加上了-j参数,具体编译时间取决于电脑配置。
待内核编译完成之后,就可以对zImage文件进行处理,最终生成树莓派可直接引导的文件:
cd arch/arm/boot/wget -c https://raw.githubusercontent.com/raspberrypi/linux/rpi-4.19.y/scripts/mkknlimgchmod +x mkknlimg./mkknlimg zImage kernel.img
开始执行安装过程:
cd ../../../mkdir installmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/home/test/RPI/linux-4.19.104/install/
这一步主要用来创建lib目录,方便后面直接将里面的modules目录拷贝到内存卡系统目录。
拔下树莓派上的内存卡,插上电脑,开始复制文件:
mv /media/test/boot/kernel7.img /media/test/boot/kernel7.img.1cp /home/test/RPI/linux-4.19.104/arch/arm/boot/kernel.img /media/test/boot/kernel7.imgcp /home/test/RPI/linux-4.19.104/arch/arm/boot/dts/*.dtb /media/test/boot/sudo cp -r /home/test/RPI/linux-4.19.104/install/lib/ /media/test/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/
复制完成后,拔下内存卡,再插到树莓派上面,然后开机启动,ssh连上树莓派,使用如下命令查看内核版本信息:
uname -a
这是之前系统的内核版本信息:
这是使用新的内核后的版本信息:
可以明显看到,内核被替换成了新编译的内核,内核替换成功。
经实际测试,树莓派在替换新内核后也能够正常的启动,至于具体哪些板载功能收到了影响,具体也没有测试过。另外,这次的测试仅在3B上面进行,对于本方法在其他硬件版本上面是否可行,可能还需要进一步的测试。
关于如何为树莓派编译官方版本Linux内核就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。