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

编译树莓派Linux内核[通俗易懂]  RaspberryPi内核Linux代码存储在GitHub中,可以在github.com/raspberrypi/linux上查看。一、下载linux内核源码gitclone–depth=1https://github.com/raspberrypi/linux  上面的命令将下载当前的活动分支。省略–depth=1将下载整个存储库,包括所有分支的完整历史记录,但占用更多的存储空间。要下载不同的分支,可以使用以下–branch选项:gitclone–depth=1–b

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

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

一、下载linux内核源码

git clone --depth=1 https://github.com/raspberrypi/linux

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

git clone --depth=1 --branch <branch> https://github.com/raspberrypi/linux

二、在本地编译linux内核

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

2.1、安装 Git 和构建依赖项

sudo apt install git bc bison flex libssl-dev make

2.2、配置内核

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

cd linux
KERNEL=kernel
make bcmrpi_defconfig

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

cd linux
KERNEL=kernel7
make bcm2709_defconfig

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

cd linux
KERNEL=kernel7l
make bcm2711_defconfig

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

cd linux
KERNEL=kernel8
make bcm2711_defconfig

2.3、编译、安装linux内核

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

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 位内核:

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安装依赖项和工具链

  安装所需的依赖项

sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev

  为 32 位内核安装 工具链

sudo apt install crossbuild-essential-armhf

  为 64位内核安装 工具链

sudo apt install crossbuild-essential-arm64

3.2、配置内核

3.2.1、配置32位

  对于 Pi 1、Pi Zero、Pi Zero W

cd linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig

  对于 Pi 2、Pi 3、Pi 3+

cd linux
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

  对于树莓派 4:

cd linux
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

3.2.2、配置64位

  对于 Pi 3、Pi 3+

cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig

  对于树莓派 4:

cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

3.3、编译linux内核

  对于所有 32 位版本

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

  对于所有 64 位版本

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

3.4、安装linux内核到SD卡

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

sdb
   sdb1
   sdb2

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

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位:

sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install

  对于64位:

udo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install

3.4.2、将设备树安装到 SD 卡上

  对于32位:

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位:

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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 史上最全Java学习视频下载地址分享

    史上最全Java学习视频下载地址分享1.Java基础视频 《张孝祥JAVA视频教程》完整版[RMVB](东西网)历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客)张孝祥2010年贺岁视频:Java高新技术(传智播客)Java多线程与并发库高级应用(传智播客)尚学堂JAVA视频下载大全(持续更新中…请关注!)(尚学堂)《动力节点,王勇JAVA系列视频教程》(东西网)

  • 点乘、叉乘、混合积[通俗易懂]

    点乘、叉乘、混合积[通俗易懂]平行六面体的一个顶点三条边的向量为:a,b,c那么体积为:V=|(axb)*c|同理也可得出:|(axb)*c|=|(axc)*b|=|(bxc)*a|混合积定义:设a,b,c是空间中

  • COLA 4.0:应用架构的最佳实践

    COLA 4.0:应用架构的最佳实践前几天和几个饿了么的同学聊天,一听说他们还在使用COLA1.0,我二话没说,90度鞠躬,赔礼道歉,虚心聆听他们的吐槽。COLA的初衷旨在控制复杂度,救码农于水火,惭愧的是,早期的思想不成熟,设计也多有缺陷,不仅没帮到他们,反而坑了他们,实在抱歉。实际上,我在COLA3.0迭代的时候,已经举起奥卡姆剃刀,砍掉了很多东西。然而还不够,主要体现在对架构的思考还不够透彻。因此,经过仔细反思,有了这一版最新的COLA4.0,期望回归初心,让COLA真正成为应用架构的最佳实践,帮助广大的业务技术同学,脱离酱缸

  • java实习生面试题_java实习生面试题(含答案)

    java实习生面试题_java实习生面试题(含答案)1.Java容器框架有哪些?Java容器框架中有两个名称分别为Collection和Set的接口2.list,map,set,array,它们有什么区别(推荐学习:java实习生面试题)List接口主要有三个实现类:LinkedList,ArrayList,Vector.LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还…

  • DDPG 算法

    DDPG 算法DDPG算法1离散动作vs.连续动作离散动作与连续动作是相对的概念,一个是可数的,一个是不可数的。在CartPole环境中,可以有向左推小车、向右推小车两个动作。在FrozenLake环境中,小乌龟可以有上下左右四个动作。在Atari的Pong游戏中,游戏有6个按键的动作可以输出。但在实际情况中,经常会遇到连续动作空间的情况,也就是输出的动作是不可数的。比如说推小车力的大小、选择下一时刻方向盘的转动角度或者四轴飞行器的四个螺旋桨给的电压的大小等等。对于这些连续

  • goland 激活3月最新在线激活

    goland 激活3月最新在线激活,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号