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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jenkinsfile docker_dockerfile制作镜像

    jenkinsfile docker_dockerfile制作镜像前言之前我们用docker手动安装了jenkins环境,在jenkins中又安装了python3环境和各种安装包,如果我们想要在其他3台机器上安装,又是重复操作,重复劳动,那会显得很low,这里可以

    2022年8月6日
    18
  • 视觉SLAM技术简述,一文了解视觉SLAM「建议收藏」

    视觉SLAM技术简述,一文了解视觉SLAM「建议收藏」如今科技发展日新月异,随着机器人、AR/VR等人工智能领域的不断发展,视觉SLAM也取得了惊人的发展。本文就视觉SLAM的定义、研究分类、模块、工作原理及应用方向等方面做一个视觉SLAM的技术简述。视觉SLAM是什么?SLAM的英文全称是SimultaneousLocalizationandMapping,中文称作「即时定位与地图创建」,而视觉SLAM就是用摄像头来完成环境的感知工作。当一个自主移动的机器人处在一个未知的环境,它要通过摄像头获取的信息数据对自身以及周围环境进行一个预估.

    2022年10月1日
    3
  • 精确度 召回率 f1_score多大了

    精确度 召回率 f1_score多大了目录混淆矩阵准确率精确率召回率分类是机器学习中比较常见的任务,对于分类任务常见的评价指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1score、ROC曲线(ReceiverOperatingCharacteristicCurve)等。这篇文章将结合sklearn对准确率、精确率、召回率、F1score进行讲解,ROC曲线可以参考我的这篇文章…

    2022年10月15日
    2
  • 计算机原码反码补码怎么算_-35的原码反码补码

    计算机原码反码补码怎么算_-35的原码反码补码最近花了点时间对计算机的原码,反码和补码进行了研究,对为什么要有反码和补码以及他们这么设计的原因有了一定的理解机器数一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。例如正数7,在计算机中用一个8位的二进制数来表示,是00000111,而负数-7,则用10000111表示,这里的00000111和1…

    2022年4月19日
    199
  • JSON字符串转List集合操作「建议收藏」

    JSON字符串转List集合操作「建议收藏」场景:JSON字符串转List集合与List集合转JSON字符串使用的jar包是fastjson-1.2.41.jar1.JSON字符串转List集合操作publicstatic<T>List<T>parseArray(Stringtext,Class<T>clazz){try{re…

    2022年5月14日
    39
  • ipv4地址分类_d类ipv4地址以什么开始

    ipv4地址分类_d类ipv4地址以什么开始ipv4地址:表示一个网络节点的网络地址总共可以产生40多亿ip地址,32位二进制数–表示用点分十进制IPv4地址由四段组成,每个字段是一个字节,8位,最大值是255,,IPv4地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机,两者是主从关系。IPv4地址的四大类型标识的是网络中的某台主机。IPv4地址长度为32位,共4…

    2025年8月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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