前一阵子访问https://kernel.org发现Linux内核的稳定版本已更新到4.6,但树莓派的默认内核仍然为4.4。这可不好,于是我决定自己编译安装新版本内核。
经过一阵搜索,我发现树莓派使用的是定制版本的内核。内核托管在https://github.com/raspberrypi/linux,打开一看Branch目录,居然连Linux 4.7的RC版本都有了,只是Linux 4.4为默认。那么这样就好办了,有了定制内核可以很简单地安装了。下面记录安装过程。
操作环境:
Ubuntu 16.04 LTS x64 (PC,用于交叉编译,树莓派的CPU性能不足所以使用PC交叉编译)
Ubuntu 16.04 LTS (树莓派上运行,其他Linux发行版亦可,没什么要求)
一、PC端
PC端的作用是代替树莓派进行编译,可以节省很多时间。注意树莓派2/3和其他版本的树莓派指令不同,但由于树莓派2/3为现在的主要版本,因此不介绍其他版本的树莓派编译方法。本文中记述的编译过程在其他Linux发行版中亦可进行,只是可能有微小差异。但既然已经能使用Linux,这不是问题了。
1、准备安装
1
2sudo su
apt install git #安装Git,用于下载源码
PC端无需过多配置,可以运行git即可
2、配置交叉编译环境
1
2
3git clone https://github.com/raspberrypi/tools
#Clone需要很长时间,耐心等待
vi ~/.bashrc
在打开的文件末尾加入
1
2
3
4#若PC系统为x86
export PATH=$PATH:刚才Clone到的目录/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
#若PC系统为x64
export PATH=$PATH:刚才Clone到的目录/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
保存后继续执行
1
2source .bashrc
arm-linux-gnueabihf-gcc -v
若未提示错误,则交叉编译环境已完成配置。
3、下载并编译内核
切换回主目录,执行
1
2
3
4
5
6
7
8git clone --depth=1 -b rpi-4.7.y https://github.com/raspberrypi/linux
#可更换为其他内核版本,具体请查阅https://github.com/raspberrypi/linux
#Clone需要很长时间,耐心等待
cd linux
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
#开始编译,可能需要几个小时,耐心等待
注:如果有多个处理器,可以给make指令加上参数-j n,其中n是处理器数量*1.5。这样可以加快编译速度。
编译完成后,将整个linux目录传输到树莓派供树莓派使用。至此PC端工作完成
二、树莓派端
在PC端编译得到的linux目录传输到树莓派后,就可以在树莓派上安装了。
1
2
3
4
5
6
7
8
9sudo su #对内核的操作需要root权限
cd linux #切换到完成编译的目录
make modules_install
cp arch/arm/boot/dts/*.dtb /boot/
cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
cp arch/arm/boot/dts/overlays/README /boot/overlays/
scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img
cp arch/arm/boot/Image /boot/kernel7.img
reboot
建议在执行这些操作前,对原有文件进行备份以防不测。
重启后,树莓派就使用了新版本的内核。
The End~~