本想给树莓派装Gentoo系统,发现树莓派编译实在是太慢了,最后心急放弃了。但是装Gentoo的过程中我学会了自己编译内核,并成功让raspbian系统使用上最新的64位内核。效果如下:

[email protected]:~# uname -a

Linux raspberrypi 4.19.8-Jerry-v8+ #2 SMP PREEMPT Fri Dec 14 23:31:09 CST 2018 aarch64 GNU/Linux

那么编译64位内核有什么好处呢?当然是为了提高性能,优化用户体验啊!可以参考这篇文章上面做的测评:

本文参考了:

准备工作

  • 安装好raspbian系统的树莓派(安装过程见“玩转树莓派”)
  • 装有Linux系统的电脑,这里以Gentoo为例
  • 读卡器
  • 树莓派

电脑上的工作

安装交叉编译环境

本部分全部使用root用户

emerge -av sys-devel/crossdev
crossdev -t aarch64-unknown-linux-gnu

gcc-config -l #显示aarch64-unknown-linux-gun-x.x.x则安装成功

下载内核源代码并选择版本

cd
mkdir raspberrypi
cd raspberrypi
git clone https://github.com/raspberrypi/linux
cd linux
git branch -a #查看所有版本
git checkout rpi-4.19.y
#选择想要的版本,现在(2018.12.14)听说4.20还不够稳定,等以后再尝试吧,自行替换黑体字

编译内核

首先生产默认内核配置,并再次基础上自己进行更改:

ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- make bcmrpi3_defconfig
ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- make menuconfig

这里menuconfig的过程,相信自己编译过Gentoo内核的朋友不会陌生。感到陌生的朋友可以跳过这一步,没关系的。这里给两个建议变动的选项:

CPU Power Management ---> 
CPU Frequency scaling --->
Default CPUFreq governor (powersave) #改为performance
General setup  --->
(-v8) Local version - append to kernel release #改为Jerry-v8

修改local version仅仅是在uname -r时显示自己的名字,有种成就感 : ) ,没有性能上的优化。设置完成后我们开始编译:

ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- make -jX
#X换成你的核心数+1

感觉编译这个内核时间挺长的,是不是内核有点冗余?我看Device Driver里面默认的网卡勾选了好多,有空再看看怎么精简一下吧。

树莓派储存卡上的工作

安装内核

把树莓派的储存卡插到读卡器上连接电脑,并挂载分区:

mkdir /mnt/raspbian
mount /dev/sdc3 /mnt/raspbian
mount /dev/sdc1 /mnt/raspbian/boot

把编译好的内核复制到树莓派启动分区:

cp /root/raspberrypi/linux/arch/arm64/boot/Image /mnt/gentoo/boot/kernel8.img

安装内核模块:

cd /root/raspberrypi/linux
ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- make modules_install INSTALL_MOD_PATH=/mnt/raspbian

取消挂载:

uomunt /mnt/raspbian /mnt/raspbian/boot

把sd卡按到树莓派上,通电开机,uname -a看看效果吧。

Leave a Reply

Your email address will not be published. Required fields are marked *