模板: 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
AX210-1.png


在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