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

树莓派超全系列教程文档--(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)树莓派内核简介及更新
下一篇 –

相关文章:

  • 如何实现一个可视化的文字编辑器(C语言版)?
  • 优考试V4.20机构版【附百度网盘链接】
  • RabbitMQ应用(基于腾讯云)
  • 基于定制开发开源AI智能名片S2B2C商城小程序的会员存量池构建策略研究
  • 区块链基石解码:分布式账本的运行奥秘与技术架构
  • 助力产业升级 | BMC安全启动方案上新了!
  • Mysql从入门到精通day6————时间和日期函数精讲
  • 【PINN】DeepXDE学习训练营(6)——function-mf_func.py
  • Redis远程链接应用案例
  • 打造企业级AI文案助手:GPT-J+Flask全栈开发实战
  • CSDN编辑文章时如何自动生成目录
  • 【软件工程】 白盒测试简介
  • Java高频常用工具包汇总
  • pyspark将hive数据写入Excel文件中
  • 淘宝商品主图标题api接口
  • Word处理控件Spire.Doc系列教程:C# 通过模板创建 Word 文档
  • leetcode0175. 组合两个表-easy
  • AXPM60631: 用于AMOLED显示屏的200mA双路DC-DC电源管理芯片
  • body Param Query 三个 不同的入参 分别是什么意思 在前端 要怎么传 这三种不同的参数
  • git回退commit
  • 美加征“对等关税”后,调研显示近半外贸企业将减少对美业务
  • “五一”假期全国口岸日均出入境人员将达215万人次
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”
  • 合肥一季度GDP为3003.88亿元,同比增长6.6%
  • 商务部:将打造一批国际消费集聚区和入境消费友好商圈
  • 加拿大温哥华一车辆冲撞人群,造成多人伤亡