Mainline Linux 和 U-Boot编译

By Toradex胡珊逢

Toradex 自从 Linux BSP v6 开始在使用 32位处理器的 Arm 模块如 iMX6、iMX6ULL、iMX7 上提供 mainline/upstream kernel ,部分 64位处理器模块如 Verdin iMX8M Mini/Plus 也提供实验性支持。文章将以季度发布版本 Linux BSP V6.3.0 为例介绍如何下载和编译 mainline/upstream Linux kernel 和 U-Boot。

Linux

下载 kernel 源码

内核源码可以从官网 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git 下载。但考虑到国内网络情况,推荐从国内的镜像站点下载,如 https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git。默认下载时会获取最新的 upstream 内核版本。可根据模块上运行 Linux 的版本 checkout 到对应版本源码。在模块上的 Linux 中运行 uname 命令,可以看到当前版本是 6.1.37。后面的 6.3.0 是 Toradex Linux BSP 季度发布版本。季度发布版本是经过充分的自动化和人工测试后发布的,可用于对应模块的生产环境。

----------------------------------

root@apalis-imx6:~# uname -a

Linux apalis-imx6 6.1.37-6.3.0+git.0f4ac6b4c5f0 #1 SMP Sat Jul  1 11:16:27 UTC 2023 armv7l armv7l armv7l GNU/Linux

----------------------------------

在电脑上使用下面命令并 checkout 到 v6.1.37。

----------------------------------

$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git

$ git checkout v6.1.37

----------------------------------

下载和应用补丁

mainline/upstream kernel 通常还需要一些补丁。它们可以从 meta-toradex-bsp-common 中下载,后续其版本也需要对应到一样的季度版本。首先打开网址 https://git.toradex.com/cgit/toradex-manifest.git/tree/bsp/pinned-tdx.xml?h=6.3.0。结尾的 6.3.0 为对应的季度发布版本号。在页面中可以看到如下内容:

----------------------------------

<project name="meta-toradex-bsp-common.git" path="layers/meta-toradex-bsp-common" remote="tdx" revision="f7ff10a3b560dcf4e258115da679d1f864e09837" upstream="kirkstone-6.x.y"/>

----------------------------------

可以看到 meta-toradex-bsp-common.git 在季度发布版本 6.3.0 对应的 hash 是 f7ff10a3b560dcf4e258115da679d1f864e09837。通常建议使用最新发布的季度版本,获得问题修复和功能完善。因此,下载时请修改季度发布版本号和 hash 值。

进入上面下载的 Linux 源码目录后创建 patch 文件夹,并在其中下载 meta-toradex-bsp-common,checkout 对应用版本。

----------------------------------

$ cd linux-stable/

$ mkdir patch

$ cd patch

$ git clone https://git.toradex.com/cgit/meta-toradex-bsp-common.git

$ cd meta-toradex-bsp-common

$ git checkout f7ff10a3b560dcf4e258115da679d1f864e09837

----------------------------------

将 meta-toradex-bsp-common/recipes-kernel/linux/linux-toradex-mainline-git 的所有 patch 文件复制到 patch 目录下。

----------------------------------

$ cp meta-toradex-bsp-common/recipes-kernel/linux/linux-toradex-mainline-git/*.patch ./

----------------------------------

在 patch 目录下使用 git am 命令给 kernel 打补丁。注意必须要以固定的顺序打补丁。补丁顺序可以参看 meta-toradex-bsp-common/recipes-kernel/linux/linux-toradex-mainline_git.bb 文件。

----------------------------------

SRC_URI:append = " \

    file://0001-thermal-imx-Update-critical-temp-threshold.patch \

    file://0001-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch \

    file://0001-arm-dts-colibri-imx6-usb-dual-role-switching.patch \

    file://0002-arm-dts-colibri-imx6-move-vbus-supply-to-module-leve.patch \

    file://0003-arm-dts-colibri-imx6-specify-usbh_pen-gpio-being-act.patch \

    file://0001-arm-dts-colibri-imx6ull-keep-peripherals-disabled.patch \

    file://0002-arm-dts-colibri-imx6ull-enable-default-peripherals.patch \

    file://0001-ARM-dts-colibri-imx6ull-Enable-dual-role-switching.patch \

    file://0002-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch \

    file://0001-ARM-dts-apalis-imx6-Disable-usb-over-current.patch \

    file://0002-ARM-dts-colibri-imx6-Disable-usb-over-current.patch \

    file://0003-ARM-dts-colibri-imx6ull-Disable-usb-over-current.patch \

    file://0004-ARM-dts-colibri-imx7-Disable-usb-over-current.patch \

    file://0001-arm64-dts-imx8mm-verdin-Add-yavia-carrier-board.patch \

    file://0002-arm64-dts-imx8mp-verdin-Add-yavia-carrier-board.patch \

    file://0001-media-v4l2-async-fix-binding-async-subdevs-with-mult.patch \

    file://0002-media-i2c-ov5640-Implement-get_mbus_config.patch \

    file://0001-Revert-media-v4l2-async-Use-endpoints-in-__v4l2_asyn.patch \

"

----------------------------------

在 patch 文件夹里执行面命令,期间不应该出现任何错误和冲突。

----------------------------------

$ cd patch

$ git am 0001-thermal-imx-Update-critical-temp-threshold.patch \

0001-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch \

0001-arm-dts-colibri-imx6-usb-dual-role-switching.patch \

0002-arm-dts-colibri-imx6-move-vbus-supply-to-module-leve.patch \

0003-arm-dts-colibri-imx6-specify-usbh_pen-gpio-being-act.patch \

0001-arm-dts-colibri-imx6ull-keep-peripherals-disabled.patch \

0002-arm-dts-colibri-imx6ull-enable-default-peripherals.patch \

0001-ARM-dts-colibri-imx6ull-Enable-dual-role-switching.patch \

0002-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch \

0001-ARM-dts-apalis-imx6-Disable-usb-over-current.patch \

0002-ARM-dts-colibri-imx6-Disable-usb-over-current.patch \

0003-ARM-dts-colibri-imx6ull-Disable-usb-over-current.patch \

0004-ARM-dts-colibri-imx7-Disable-usb-over-current.patch \

0001-arm64-dts-imx8mm-verdin-Add-yavia-carrier-board.patch \

0002-arm64-dts-imx8mp-verdin-Add-yavia-carrier-board.patch \

0001-media-v4l2-async-fix-binding-async-subdevs-with-mult.patch \

0002-media-i2c-ov5640-Implement-get_mbus_config.patch \

0001-Revert-media-v4l2-async-Use-endpoints-in-__v4l2_asyn.patch

----------------------------------

kernel 配置

内核配置文件 .config  也可以从 Toradex Artifactory 下载,并使用对应的季度发布版本的编译文件。打开 Toradex Artifactory 网页,在左边的 Artifact Repository Browser 中点开 oe-release,选择 Linux BSP v6 对应的 kirkstone-6.x.y。依次打开 kirkstone-6.x.y/release/7/apalis-imx6/tdx-xwayland-upstream/tdx-reference-multimedia-image/oedeploy/。release 下面一般可以选择最大序列的,这对应最新的发布版本。右击 kernel-config 下载即可。

MainlineLinux和u-boot编译_web5621.png

MainlineLinux和u-boot编译_web5623.png

将 kernel-config 复制到刚才下载的内核源码目录,命名为 .config ,用其作为 Linux 的默认配置。如果需要修改,后面还可以使用 make menuconfig 命令。

----------------------------------

$ cd linux-stable/

$ mv kernel-config .config

$ make olddefconfig

----------------------------------

准备好源码、补丁和内核配置文件,接下来就可以编译了,具体方法参考这里。

U-Boot

下载 U-Boot 源码

首先从 https://source.denx.de/u-boot/u-boot.git 下载源码,并 checkout 到 v2022.07 版本,也是 Linux BSP v6 所使用的 U-Boot 版本。

----------------------------------

$ git clone https://source.denx.de/u-boot/u-boot.git

$ cd u-boot

$ git checkout v2022.07

----------------------------------

下载和应用补丁

Upstream/mainline U-Boot 同样也需要相关补丁,和上面一样由 meta-toradex-bsp-common 提供。按照前面的方法在 u-boot 目录中建立 patch 文件夹后,在其中下载和 checkout。U-Boot 补丁位于 meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex 目录下。将里面的 patch 文件复制到 u-boot/patch 目录下。

----------------------------------

$ cd u-boot

$ mkdir patch

$ cd patch

$ git clone https://git.toradex.com/cgit/meta-toradex-bsp-common.git

$ cd meta-toradex-bsp-common

$ git checkout f7ff10a3b560dcf4e258115da679d1f864e09837

$ cp meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex/*.patch ./

----------------------------------

注意必须要以固定的顺序打补丁。补丁顺序可以参看 U-Boot meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_2022.07.bb 文件。

----------------------------------

TDX_PATCHES = " \

    file://0001-toradex-tdx-cfg-block-use-only-snprintf.patch \

    file://0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch \

    file://0003-toradex-tdx-cfg-block-extend-assembly-version.patch \

    file://0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch \

    file://0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch \

    file://0006-toradex-common-Remove-stale-comments-about-modules-a.patch \

    file://0007-toradex-common-Use-ARRAY_SIZE-macro.patch \

    file://0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch \

    file://0009-toradex-common-Remove-stale-function-declaration.patch \

    file://0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch \

    file://0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch \

    file://0012-toradex-common-Improve-product-serial-print-during-b.patch \

    file://0013-configs-colibri-imx7-Enable-bootd-command.patch \

    file://0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch \

    file://0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch \

    file://0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch \

    file://0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch \

"

----------------------------------

在 patch 文件夹里执行面 git am 命令,期间不应该出现任何错误和冲突。

----------------------------------

$ git am 0001-toradex-tdx-cfg-block-use-only-snprintf.patch \

0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch \

0003-toradex-tdx-cfg-block-extend-assembly-version.patch \

0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch \

0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch \

0006-toradex-common-Remove-stale-comments-about-modules-a.patch \

0007-toradex-common-Use-ARRAY_SIZE-macro.patch \

0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch \

0009-toradex-common-Remove-stale-function-declaration.patch \

0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch \

0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch \

0012-toradex-common-Improve-product-serial-print-during-b.patch \

0013-configs-colibri-imx7-Enable-bootd-command.patch \

0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch \

0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch \

0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch \

0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch

----------------------------------

U-Boot  配置

对于 32位处理器的模块,默认配置如下:

l colibri_imx6_defconfig

l colibri-imx6ull_defconfig

l colibri-imx6ull-emmc_defconfig

l colibri_imx7_defconfig

l colibri_imx7_emmc_defconfig

l apalis_imx6_defconfig

以  Apalis iMX6 为例。

----------------------------------

$ make mrproper

$ make apalis_imx6_defconfig

----------------------------------

最后编译 U-Boot。

----------------------------------

$ make -j$(nproc)

----------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/105925.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM(实验二)

uart4.h #ifndef __H__ #define __H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC/GPIO/UART4章节初始化 void hal_uart4_init();//发送一个字符函数 void hal_put_char(const char str);//发…

IT运维软件的费用是多少?

正常一套IT运维软件费用一般在5千-50万之间不等&#xff0c;而且分为一次性付费或年付费模式&#xff0c;付费方式导致的价格也不同。 正常情况下IT运维软件的具体价格&#xff0c;是需要根据企业的实际需求来进行综合评估&#xff0c;一般来说&#xff0c;影响具体价格费用有以…

MongoDB Long 类型 shell 查询

场景 1、某数据ID为Long类型&#xff0c;JAVA 定义实体类 Id Long id 2、查询数据库&#xff0c;此数据存在 3、使用 shell 查询&#xff0c;查不到数据 4、JAVA代码查询Query.query 不受任何影响 分析 尝试解决&#xff08;一&#xff09; long 在 mongo中为 int64 类型…

命令全局安装 ts

1.全局安装 typeScript编译 npm install -g typescript2.查看版本 tsc-v安装成功的画面

电脑显示“Operating System not found”该怎么办?

“Operating System not found”是一种常见的电脑错误提示&#xff0c;这类错误会导致你无法成功启动Windows。那么电脑显示“Operating System not found”该怎么办呢&#xff1f; 方法1. 检查硬盘 首先&#xff0c;您可以测试硬盘是否存在问题。为此&#xff0c;您可以采取以…

什么是住宅ip,静态和动态怎么选?

上文我们介绍了数据中心代理&#xff0c;这次我们来介绍下住宅代理ip&#xff0c;住宅代理ip分类两种类型&#xff1a;静态住宅代理和动态住宅代理&#xff0c;他们有什么区别又能用在什么场景呢&#xff1f;我们先从他们是如何运作开始。 一、什么是住宅代理ip isp住宅代理i…

Dev-C++ 下载和安装

TOC 1. 下载 Dev-C 访问 sourceforge 网站&#xff0c;然后单击 Download&#xff0c; 2. 安装 Dev-C 双击下载的安装文件进行安装。 3. 在线环境 https://cpp.sh/ 完结&#xff01;

构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程

文章目录 架构要点优势与应用案例研究&#xff1a;基于云原生大数据平台的智能营销分析未来展望&#xff1a;大数据与人工智能的融合结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏…

GE 8920-PS-DC安全模块

安全控制&#xff1a; 这个安全模块通常用于实现工业自动化系统中的安全控制功能。它可以监测各种安全参数&#xff0c;如机器运动、温度、压力等&#xff0c;以确保系统在安全范围内运行。 PLC兼容性&#xff1a; 通常&#xff0c;这种安全模块可以与可编程逻辑控制器&#x…

【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-入门实战

ElasticSearch 一、ElasticSearch概述 1.ElasticSearch介绍 ES 是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储&#xff0c;检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;…

Mybatis的动态SQL及关键属性和标识的区别(对SQL更灵活的使用)

&#xff08; 虽然文章中有大多文本内容&#xff0c;想了解更深需要耐心看完&#xff0c;必定大有受益 &#xff09; 目录 一、动态SQL ( 1 ) 是什么 ( 2 ) 作用 ( 3 ) 优点 ( 4 ) 特殊标签 ( 5 ) 演示 二、#和$的区别 2.1 #使用 ( 1 ) #占位符语法 ( 2 ) #优点 2.…

【芯片设计封装与测试】芯片测试目的、方法、分类及案例

目录 1.芯片测试概述&#xff08;目的、方法&#xff09; 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关…

如何使用HTML5新增的标签来优化SEO?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用HTML5新增的标签来优化SEO&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对…

深层次分析字符数组和字符串的区别是什么?

前言 &#xff08;1&#xff09;休闲时刻刷B站&#xff0c;看到一个卖课的&#xff0c;发视频问&#xff0c;char arr1[]{‘H’,‘E’,‘L’,‘L’,‘O’};和char arr2[]“HELLO”;区别是什么。 &#xff08;2&#xff09;看那个卖课博主一顿分析&#xff0c;最后成功得出&…

2023年高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

C语言基础之——数组

前言&#xff1a;本篇文章&#xff0c;我们将对一维数组&#xff0c;和二维数组进行展开式的讲解&#xff0c;并进行实际应用。 目录 一.一维数组 1.一维数组的创建和初始化 &#xff08;1&#xff09;数组的创建 &#xff08;2&#xff09;数组的初始化 2.一维数组的使用…

什么是负载均衡

前提概述 关于负载均衡&#xff0c;我会从四个方面去说 1. 负载均衡产生的背景 2. 负载均衡的实现技术 3. 负载均衡的作用范围 4. 负载均衡的常用算法 负载均衡的诞生背景 在互联网发展早期&#xff0c;由于用户量较少、业务需求也比较简单。对于软件应用&#xff0c;我们只需要…

Django(3)-创建第一个数据模型-ORM映射

数据库配置 根目录下settings.py 。这是个包含了 Django 项目设置的 Python 模块。 通常&#xff0c;这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库&#xff0c;或者只是想尝试下 Django&#xff0c;这是最简单的选择。Python 内置 SQLite&#xff0c;所以你无…

JavaScript函数调用其他函数

在JavaScript中&#xff0c;函数可以调用其他函数。这通常被称为函数组合&#xff0c;它允许你通过将较简单的函数组合在一起来创建更复杂的功能。 例如&#xff1a;还是以之前的水果加工举例&#xff0c;但是现在我们需要输出&#xff0c;这个苹果有几块&#xff0c;橘子有几块…

【Qt学习】02:信号和槽机制

信号和槽机制 OVERVIEW 信号和槽机制一、系统自带信号与槽二、自定义信号与槽1.基本使用student.cppteacher.cppwidget.cppmain.cpp 2.信号与槽重载student.cppteacher.cppwidget.cppmain.cpp 3.信号连接信号4.Lambda表达式5.信号与槽总结 信号槽机制是 Qt 框架引以为豪的机制之…