当前位置: 首页 > backend >正文

树莓派超全系列教程文档--(44)如何在树莓派上编译树莓派内核

如何在树莓派上编译树莓派内核

    • 构建内核
      • 下载内核源代码
      • 本地构建内核
        • 构建配置
        • 使用 `LOCALVERSION` 自定义内核版本
        • 构建
        • 安装内核

文章来源: http://raspberry.dns8844.cn/documentation

原文网址

构建内核

操作系统预装的默认编译器和链接器被配置为构建在该操作系统上运行的可执行文件。 原生编译 使用这些默认编译器和链接器。交叉编译 是为运行编译过程的目标之外的目标编译代码的过程。

Raspberry Pi 内核的交叉编译允许你从 32 位操作系统构建 64 位内核,反之亦然。或者,你也可以从 Raspberry Pi 以外的设备交叉编译 32 位或 64 位 Raspberry Pi 内核。

下面的说明分为本地编译和交叉编译。选择适合你的情况的部分;虽然这两个过程有许多相同的步骤,但也有一些重要的区别。

下载内核源代码

在为任何目标构建之前,你都需要内核源代码。要获取内核源代码,你需要 Git。如果尚未安装 Git,请先在设备上安装:

$ sudo apt install git

接下来,下载最新 Raspberry Pi 内核的源代码:

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

这可能需要几分钟时间。

上面的 git clone 命令下载的是当前活动分支,我们从该分支构建 Raspberry Pi 操作系统映像,不包含任何历史记录。省略 --depth=1可以下载整个版本库,包括所有分支的完整历史。这需要更长的时间,占用的存储空间也更大。

要下载不带历史记录的其他分支,请在上述命令中添加 --branch 选项,并将 <branch> 替换为要下载的分支名称:

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

有关可用分支的完整列表,请查看 树莓派内核库。

现在你有了内核源代码,请通过 本机 或 交叉编译 构建一个新内核。

本地构建内核

本指南假设你的 Raspberry Pi 运行的是最新版本的 Raspberry Pi OS。

首先,安装构建依赖项:

$ sudo apt install bc bison flex libssl-dev make
构建配置

本节介绍如何在构建内核时应用默认配置。您还可以通过以下方式配置内核:

  • 启用和禁用内核功能
  • 从另一个源头添加补丁

要准备默认配置,请根据您的 Raspberry Pi 型号运行下表中的相应命令。

在这里插入图片描述

4 系列设备上的 32 位 Raspberry Pi OS 发行版使用 32 位用户态域,但使用 64 位内核。要构建 32 位内核,请设置 ARCH=arm。要启动 32 位内核,请在 config.txt 中设置 arm_64bit=0

使用 LOCALVERSION 自定义内核版本

为防止内核覆盖 /lib/modules 中的现有模块,并在 uname 输出中说明运行的是自己的内核,请修改 LOCALVERSION

要修改 LOCALVERSION,请修改 .config 中此行:

CONFIG_LOCALVERSION="-v7l-MY_CUSTOM_KERNEL"

TIP: 你也可以在 General setup > Local version - append to kernel release 中使用 menuconfig 以图形方式更改此设置。有关 menuconfig 的更多信息,请参阅 内核配置说明。

构建

接下来,构建内核。这一步可能需要很长时间,取决于你的 Raspberry Pi 型号。

  • 运行以下命令构建 64 位内核:
$ make -j6 Image.gz modules dtbs
  • 运行以下命令构建 32 位内核:
$ make -j6 zImage modules dtbs

提示:在多核 Raspberry Pi 型号上, make -j<n> 选项可在不同内核之间分配工作。这会大大加快编译速度。运行 nproc 查看你有多少个处理器;我们建议使用处理器乘以 1.5。

安装内核

接下来,将内核模块安装到启动介质上:

$ sudo make -j6 modules_install

然后,将内核和设备树 blobs 安装到启动分区,备份原始内核。

TIP: 如果不想在运行此命令的 Raspberry Pi 上安装刚编译好的内核,可将编译好的内核复制到另一个启动介质的启动分区,而不是 /boot/firmware/

安装 64 位内核:

  • 运行以下命令创建当前内核的备份镜像,安装新的内核镜像、overlays、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/

最后,复制 overlays 和 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

或者,用不同的文件名复制内核(如 kernel-myconfig.img),而不是覆盖 kernel.img 文件。然后,编辑启动分区中的 config.txt 以选择内核:

kernel=kernel-myconfig.img

将此方法与自定义的LOCALVERSION 相结合,可将自定义内核与系统管理的原版内核映像分开。有了这种安排,当你的内核无法启动时,你就可以迅速恢复到原版内核。

上一篇 – 树莓派超全系列教程文档–(43)树莓派内核简介及更新
下一篇 –

http://www.xdnf.cn/news/2384.html

相关文章:

  • 详解 Unreal Engine(虚幻引擎)
  • 如何配置osg编译使支持png图标加载显示
  • Arduino 入门学习笔记(六):外部中断实验
  • vscode本地化显示远程图形化界面
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day21
  • 使用 LLM助手进行 Python 数据可视化
  • 为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?
  • 强化学习机器人路径规划——Sparrow复现
  • 【项目篇之消息序列化】仿照RabbitMQ模拟实现消息队列
  • 毕业设计-基于深度学习的入侵检测系统
  • SpringCloud组件——OpenFeign
  • Windows怎样使用curl下载文件
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十四章 集合框架:告别手写链表的苦役
  • 构建AI大模型应用的LangChain之核心功能
  • C++:STL—容器
  • C++指针(三)
  • 《数据库系统工程师》-B站-视频截图整理-2021-23
  • 2025.04.26-淘天春招笔试题-第三题
  • 机器人学入门 (刚体空间 - 正/逆运动学 - 轨迹规划) 笔记 0.1 (台大机器人学-林沛群)
  • File,IO流,字符集
  • 2025.04.26-饿了么春招笔试题-第一题
  • 基于javaweb的SSM投票管理系统设计与实现(源码+文档+部署讲解)
  • qobject与event事件应用
  • 碰撞检测的艺术:Pygame中的Rect与像素级检测
  • 第三方测试机构如何保障软件质量并节省企业成本?
  • Unity text 表情和超链接解决方案。
  • 贝叶斯算法学习
  • 微服务架构下 MySQL 大表分库分表方案
  • 记录前端vue3封装一个modal弹框
  • 【思维】GCD