模板: Raspberry Kernel Compilation
来自Waveshare Wiki
树莓派上编译内核
- 更新
sudo apt update sudo apt upgrade
- 安装驱动
cd sudo apt install git git clone --depth=1 https://github.com/raspberrypi/linux sudo apt install bc bison flex libssl-dev make cd linux KERNEL=kernel_2712 make bcm2712_defconfig
- 选择需要添加的驱动
make menuconfig
- 运行以下命令来构建 64 位内核:
make -j6 Image.gz modules dtbs
- 运行以下命令来构建32位内核:
make -j6 zImage modules dtbs
- 将内核模块安装到启动媒体上:
sudo make -j6 modules_install
- 要安装 64 位内核:
- 运行以下命令创建当前内核的备份映像,安装全新的内核映像、覆盖、README,并卸载分区:
sudo cp /boot/firmware/$KERNEL.img /boot/firmware/$KERNEL-backup.img sudo cp arch/arm64/boot/Image.gz /boot/firmware/$KERNEL.img sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware/ sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/ sudo cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/
- 要安装 32 位内核:
- 创建当前内核的备份并安装新的内核映像:
sudo cp /boot/firmware/$KERNEL.img /boot/firmware/$KERNEL-backup.img sudo cp arch/arm/boot/zImage /boot/firmware/$KERNEL.img
- 根据您的内核版本,运行以下命令:
- 对于最高版本 6.4 的内核:
sudo cp arch/arm/boot/dts/*.dtb /boot/firmware/
- 对于内核版本 6.5 及以上:
sudo cp arch/arm/boot/dts/broadcom/*.dtb /boot/firmware/
- 最后,复制覆盖内容和 README:
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/firmware/overlays/ sudo cp arch/arm/boot/dts/overlays/README /boot/firmware/overlays/
- 最后,运行以下命令重新启动你的 Raspberry Pi 并运行你刚编译的内核:
sudo reboot
交叉编译内核
可以参考:点这里
编译内核需要一个Ubuntu系统
以下测试使用:Ubuntu-20.04.2.0-desktop-amd64 :
编译环境前先确认你需要的具体树莓派系统版本
https://github.com/raspberrypi/linux
在Ubuntu上操作:
#安装依赖 sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev #安装编译工具 sudo apt install neovim #创建文件夹 mkdir cm4 cd cm4 mkdir gcc-linaro #下载GCC编译器 wget 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 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 #修改环境变量 nvim ~/.bashrc #在 .bashrc 后面加上:export PATH=$PATH:~/cm4/gcc-linaro/bin #刷新环境变量 source ~/.bashrc #克隆 linux repo(或克隆一个 fork 或不同的分支): git clone --depth=1 https://github.com/raspberrypi/linux/... #此命令为无效命令,后面的github链接需要改成你具体需要的内核版本https://github.com/raspberrypi/linux #或者自行下载,然后复制进去 #解压unzip linux-rpi-6.6.y.zip (不同内核版本使用的命令不一样) #运行以下命令来制作 .config 文件:. cd linux make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig #生成 .config 文件: make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig #配置.config 文件,这里添加你想要添加的内核驱动 #编译内核。需要等待比较长时间 make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
在树莓派上操作:
sudo su passwd #设置密码 sudo nano /etc/ssh/sshd_config #将 PermitRootLogin prohibit-password 改为 PermitRootLogin yes sudo reboot
在Ubuntu上操作:
sudo sshfs root@192.168.x.x:/ /mnt/pi-ext4 sudo sshfs root@192.168.x.x:/boot /mnt/pi-fat32 #192.168.x.x是树莓派的IP sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/pi-ext4 modules_install sudo cp arch/arm64/boot/Image /mnt/pi-fat32/kernel8.img sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/pi-fat32/ sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/pi-fat32/overlays/ sudo cp arch/arm64/boot/dts/overlays/README /mnt/pi-fat32/overlays/
如果多次链接一个IP然后系统更换了,出现read: Connection reset by peer 错误:
删除ssh公钥认证即可
ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.x.x #192.168.x.x是树莓派的IP
上面编译内核使用的都是“ARCH=arm64”64位的
在树莓派的 /boot/config.txt中添加 arm_64bit=1 kernel=kernel8.img #重启 sudo reboot
