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

原创
02/15 19:09
阅读数 811

为树莓派编译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.xz
xz -d gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar.xz
tar xvf gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar

然后配置交叉编译环境:

sudo apt-get install libncurses-dev build-essential
export 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.xz
xz -d linux-4.19.104.tar.xz
tar xvf linux-4.19.104.tar

然后进入源码目录开始配置内核:

cd linux-4.19.104/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2835_defconfig
make 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/mkknlimg
chmod +x mkknlimg
./mkknlimg zImage kernel.img

开始执行安装过程:

cd ../../../
mkdir install
make 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.1
cp /home/test/RPI/linux-4.19.104/arch/arm/boot/kernel.img /media/test/boot/kernel7.img
cp /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上面进行,对于本方法在其他硬件版本上面是否可行,可能还需要进一步的测试。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部