前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编译树莓派Linux内核[通俗易懂]

编译树莓派Linux内核[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-15 10:47:22
7.1K0
发布2022-09-15 10:47:22
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

  Raspberry Pi 内核Linux代码存储在 GitHub 中,可以在github.com/raspberrypi/linux上查看。

一、下载linux内核源码

代码语言:javascript
复制
git clone --depth=1 https://github.com/raspberrypi/linux

  上面的命令将下载当前的活动分支。省略–depth=1将下载整个存储库,包括所有分支的完整历史记录,但占用更多的存储空间。要下载不同的分支,可以使用以下–branch选项:

代码语言:javascript
复制
git clone --depth=1 --branch <branch> https://github.com/raspberrypi/linux

二、在本地编译linux内核

  在本地编译就是在树莓派上编译linux内核

2.1、安装 Git 和构建依赖项

代码语言:javascript
复制
sudo apt install git bc bison flex libssl-dev make

2.2、配置内核

  对于 Raspberry Pi 1、Pi Zero、Pi Zero W 默认构建配置

代码语言:javascript
复制
cd linux
KERNEL=kernel
make bcmrpi_defconfig

  对于 Raspberry Pi 2、Pi 3和 Pi 3+

代码语言:javascript
复制
cd linux
KERNEL=kernel7
make bcm2709_defconfig

  对于 Raspberry Pi 4 默认构建配置(32 位)

代码语言:javascript
复制
cd linux
KERNEL=kernel7l
make bcm2711_defconfig

  对于 Raspberry Pi 4 默认构建配置(64 位)

代码语言:javascript
复制
cd linux
KERNEL=kernel8
make bcm2711_defconfig

2.3、编译、安装linux内核

  构建并安装内核、模块和设备树。 对于 32 位内核:

代码语言:javascript
复制
make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/ sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/ sudo cp arch/arm/boot/zImage /boot/$KERNEL.img 

  对于 64 位内核:

代码语言:javascript
复制
make -j4 Image modules dtbs
sudo make modules_install
sudo cp arch/arm64/boot/dts/*.dtb /boot/ sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/ sudo cp arch/arm64/boot/dts/overlays/README /boot/overlays/ sudo cp arch/arm64/boot/zImage /boot/$KERNEL.img 

三、交叉编译linux内核

3.1安装依赖项和工具链

  安装所需的依赖项

代码语言:javascript
复制
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev

  为 32 位内核安装 工具链

代码语言:javascript
复制
sudo apt install crossbuild-essential-armhf

  为 64位内核安装 工具链

代码语言:javascript
复制
sudo apt install crossbuild-essential-arm64

3.2、配置内核

3.2.1、配置32位

  对于 Pi 1、Pi Zero、Pi Zero W

代码语言:javascript
复制
cd linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig

  对于 Pi 2、Pi 3、Pi 3+

代码语言:javascript
复制
cd linux
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

  对于树莓派 4:

代码语言:javascript
复制
cd linux
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
3.2.2、配置64位

  对于 Pi 3、Pi 3+

代码语言:javascript
复制
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig

  对于树莓派 4:

代码语言:javascript
复制
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

3.3、编译linux内核

  对于所有 32 位版本

代码语言:javascript
复制
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

  对于所有 64 位版本

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

3.4、安装linux内核到SD卡

  在插入SD卡之后通过命令lsblk来识别SD卡,并收到以下相应

代码语言:javascript
复制
sdb
   sdb1
   sdb2

  其中sdb1是FAT(boot)分区,sdb2是ext4文件系统(root)分区。   首先挂载这两个分区,并调整分区号:

代码语言:javascript
复制
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/sdb1 mnt/fat32
sudo mount /dev/sdb2 mnt/ext4
3.4.1、将linux内核模块安装到 SD 卡上

  对于32位:

代码语言:javascript
复制
sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install

  对于64位:

代码语言:javascript
复制
udo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
3.4.2、将设备树安装到 SD 卡上

  对于32位:

代码语言:javascript
复制
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
sudo umount mnt/fat32
sudo umount mnt/ext4

  对于64位:

代码语言:javascript
复制
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image mnt/fat32/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/
sudo umount mnt/fat32
sudo umount mnt/ext4

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163621.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、下载linux内核源码
  • 二、在本地编译linux内核
    • 2.1、安装 Git 和构建依赖项
      • 2.2、配置内核
        • 2.3、编译、安装linux内核
        • 三、交叉编译linux内核
          • 3.1安装依赖项和工具链
            • 3.2、配置内核
              • 3.2.1、配置32位
              • 3.2.2、配置64位
            • 3.3、编译linux内核
              • 3.4、安装linux内核到SD卡
                • 3.4.1、将linux内核模块安装到 SD 卡上
                • 3.4.2、将设备树安装到 SD 卡上
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档