千家信息网

如何为树莓派编译官方版本Linux内核

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,这篇文章将为大家详细讲解有关如何为树莓派编译官方版本Linux内核,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为树莓派编译Linux内核的文章在网上
千家信息网最后更新 2024年12月12日如何为树莓派编译官方版本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内核就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0