来自 九年吃菜粥 的发帖。
文中的操作是在 x86 docker 的 Ubuntu 容器中进行操作,因为子系统编译时好像 CPU 吃不满。
文中命令全部用 root 用户执行。
1、首先下载树莓派的内核
GitHub 地址:https://github.com/raspberrypi/linux
可以直接使用 git clone –depth=1 –branch rpi-5.9.y https://github.com/raspberrypi/linux 来下载 5.9 版本的内核
个人建议从 github 直接下载 zip 包
2、然后下载交叉编译工具(x86_64 编译 arm64)
下载链接:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
gcc-7.5.0-2019.12-x86_64_aarch64
截至2020年10月13日,该交叉编译工具为最新版本。
3、安装依赖项
apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
4、解压操作
unzip linux-rpi-5.9.y.zip ~/linux-rpi-5.9 tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz mv ./gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu ~/gcc-linaro
5、把交叉编译工具添加到环境变量
首先 nvim ~/.bashrc
在 .bashrc 后面加上: export PATH=$PATH:~/gcc-linaro/bin
然后执行 source ~/.bashrc 刷新环境变量
6、进行编译前的处理
首先进入内核目录
如果你要用默认配置进行编译,执行 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
如果你要自定义某些配置,执行 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711 后,再执行 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig ,会弹出内核配置窗口进行配置
7、启动编译过程
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
整个编译时间可能会比较长,根据编译机器的硬件处理器数量来制定同时使用多少线程编译(-j{n},这里同时使用8个线程)。
8、生成编译后的文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=../ modules_install
这会在路径下生成一个lib文件夹,将该文件夹拷贝到树莓派上
9、在树莓派上执行内核替换
首先切换目录:lib/modules/5.9.0-v8/source/arch/arm64/boot
执行以下命令:
cp Image /boot/kernel8.img cp dts/broadcom/*.dtb /boot/ cp dts/overlays/*.dtb* /boot/overlays/ cp dts/overlays/README /boot/overlays/
10、生成内核模块
在执行这一步之前你可能需要安装kmod依赖项
执行: make ARCH=arm64 modules_install
如果你是在交叉编译的机上直接进行安装,则要执行: make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=rootDirect modules_install
修改配置文件(可选)
树莓派默认是用32位内核启动,需要修改 boot 分区下的 config.txt 文件
arm_64bit=1 kernel=kernel8.img
11、重启
reboot
12、确认