RK356x 修改uboot和kernel,让固件支持多个设备树DTB选择

2023-10-29

1、开发环境

1.1 实验环境

虚拟机版本:ubuntu18.04
芯片:RK356X
linux版本:4.19

1.2 目标

将一个烧写固件img变成可以兼容多个不同显示(HDMI,MIPI,LVDS)或者不同功能的固件。并通过uboot启动时进入cmdline模式时菜单栏选择支持的选项。

2、 Uboot修改

2.1 uboot默认配置文件.config

由于瑞芯微默认把uboot的环境变量设置成了CONFIG_ENV_IS_NOWHERE ,意思是环境变量将不会存储在任何地方,因此无法使用和修改环境变量。如何需要维持上一次上电前选择的配置的话,我们需要改成CONFIG_ENV_IS_IN_MMC。

#
# Environment
#
- # CONFIG_ENV_IS_NOWHERE is not set
# CONFIG_ENV_IS_IN_EEPROM is not set
# CONFIG_ENV_IS_IN_FAT is not set
# CONFIG_ENV_IS_IN_FLASH is not set
+ CONFIG_ENV_IS_IN_MMC=y
# CONFIG_ENV_IS_IN_NAND is not set
# CONFIG_ENV_IS_IN_NVRAM is not set
# CONFIG_ENV_IS_IN_ONENAND is not set
# CONFIG_ENV_IS_IN_REMOTE is not set
# CONFIG_ENV_IS_IN_SPI_FLASH is not set
# CONFIG_ENV_IS_IN_UBI is not set
# CONFIG_ENV_IS_IN_BLK_DEV is not set
# CONFIG_ENV_AES is not set```

2.2 uboot从resource.img获取DTB和kernel顺序过程

sdk/u-boot/common/board_r.c

static init_fnc_t init_sequence_r[] = {
   
	......省略
	#ifdef CONFIG_USING_KERNEL_DTB
	initr_env_nowhere,
#endif
#if defined(CONFIG_BOARD_EARLY_INIT_R)
	board_early_init_r,
#endif
	


#if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV)
	//设备配置
	board_init,	/* Setup chipselects */
#endif
#if defined(CONFIG_USING_KERNEL_DTB) && !defined(CONFIG_ENV_IS_NOWHERE)
	
#endif
	initr_env_switch,
		......省略
}

sdk/u-boot/arch/arm/mach-rockchip/board.c

int board_init(void)
{
   
	
	board_debug_init();
	
#ifdef DEBUG
	soc_clk_dump();
#endif
#ifdef CONFIG_USING_KERNEL_DTB
#ifdef CONFIG_MTD_BLK
	board_mtd_blk_map_partitions();
#endif
	
	init_kernel_dtb();
+	env_set("reboot_mode","");
#endif

	early_download();
	
	/*
	 * pmucru isn't referenced on some platforms, so pmucru driver can't
	 * probe that the "assigned-clocks" is unused.
	 */
	
	clks_probe();
#ifdef CONFIG_DM_REGULATOR
	if (regulators_enable_boot_on(is_hotkey(HK_REGULATOR)))
		debug("%s: Can't enable boot on regulator
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RK356x 修改uboot和kernel,让固件支持多个设备树DTB选择 的相关文章

  • Mono 和 WebRequest 速度 - 测试

    在 mono 4 6 2 linux 中 我注意到 wget 下载文件的速度与webclient DownloadString 所以我做了一个小测试来调查 为什么 wget 明显比 C 快 根据我自己的实验 使用 wget 下载 手动读取文
  • 从 Linux 命令行发送 SNMP 陷阱消息

    Folks 我需要从 Linux 命令行使用此命令 snmptrap 将自定义消息发送到陷阱侦听器 我需要根据用户设置在 v1 和 v2c 中发送相同的消息 这是我发现的 For v1 snmptrap v 1 c Tas hostname
  • jpackage linux 创建的桌面文件不足

    我刚刚开始使用 jpackage 它是一个非常棒的工具 只要迈出一步 我的肩上的工作就减轻了很多 我对看起来硬编码且无法定制的东西越感到惊讶 JPackage 自动生成启动器 lib
  • 无法为 Python 3.4 创建工作虚拟环境

    I 安装Python 3 4 2 https docs python org 3 using unix html building python和我的 Linux Mint 17 1 中的 Virtualenv 12 0 5 然后我尝试创建
  • 对 sf:: 的未定义引用

    我想用 C 制作 GUI 应用程序 发现 SFML 是一个不错的选择 幸运的是 我使用的是 Linux 所以 SFML 2 4 已经安装在我的系统上 所以我开始搜索一些教程并找到了一个制作简单窗口的教程 但是当我运行代码时 出现错误 提示未
  • xdotool 类型需要很长时间并导致整个桌面冻结

    我一直在使用xdotool type过去只能在快捷方式上输入耸肩xdotool type 这可行 但总是需要相当长的时间 并导致整个桌面冻结 完全冻结 而不仅仅是输入 几秒钟 不过并没有太打扰我 现在我需要一种方法来从文件中读取内容 对其进
  • 如何使用 bash 脚本关闭所有终端,在每个终端中有效地按 Ctrl+Shift+Q

    我经常打开许多终端 其中一些正在运行重要的进程 例如服务器 而另一些则没有运行任何东西并且可以关闭 如果您按 重要 则会弹出确认提示Cntrl Shift Q在其中 如下所示 我想要一个 bash 脚本 它可以关闭所有终端 但将 重要 终端
  • 静态链接共享对象?或者损坏的文件?

    我有一个从专有来源获得的库 我正在尝试链接它 但出现以下错误 libxxx so 文件无法识别 文件格式无法识别 Collect2 ld 返回 1 退出状态 确实 ldd libxxx so statically linked 这究竟意味着
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • 如何在 Linux 中使用单行命令获取 Java 版本

    我想通过单个命令获取 Linux 中的 Java 版本 我是 awk 的新手 所以我正在尝试类似的事情 java version awk print 3 但这不会返回版本 我将如何获取1 6 0 21从下面的Java版本输出 java ve
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • 是否有可能在linux中找到包含特定文本的文件?

    考虑这种情况 我在文件夹 Example 下有很多文件 如果我需要找到一个包含特定短语 如 Class Example 的文件 我该如何使用 Linux shell 来做到这一点 linux中有类似 定位 的函数可以做到这一点吗 Thank
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • R 未获取用户库

    我有一个带 R 3 6 0 的 Fedora 30 系统 用户库设置在Renviron就像这个 R LIBS USER R LIBS USER R x86 64 redhat linux gnu library 3 6 事实上 它出现在交互
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • 如何从类似于 eclipse 的命令行创建可运行的 jar 文件

    我知道 eclipse 会生成一个可运行的 jar 文件 其中提取并包含在该 jar 文件中的所有库 jar 文件 从命令提示符手动创建 jar 文件时如何执行类似的操作 我需要将所有 lib jar 解压到类文件夹中吗 目前我正在使用 j
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上

随机推荐

  • JetBrains全家桶安装配置:基于macOS M1

    一 JetBrains全家桶 官网下载地址 JetBrains官网 安装步骤 第一步 第二步 插件市场 第三步 第四步 IDE Eval Reset 插件安装 第五步 Auto reset before per restart 二 支持产品
  • QLlistwidget 自定义item 并获取 item上的内容

    如上面这个界面 添加一个自定义 item 第一行 1 自定义item 在item中添加一个lable 和 按钮 QWidget widget1 new QWidget ui gt listWidget QHBoxLayout layout
  • conda安装fbprophet注意事项

    注意 截止目前 2022年06月19日 fbprophet支持python 3 8及已下版本 安装 步骤1 conda install pystan 步骤2 conda install c conda forge fbprophet 步骤3
  • 基于TensorFlow的模型和训练的自定义方法(附源码)

    文章目录 自定义模型和训练 1 Define the Model 2 Define Optimizer and Loss 3 Evaluate Untrained Model 4 Define Metrics 5 Apply Gradien
  • 万代南梦宫假面骑士时尚品牌HENSHIN by KAMEN RIDER首登中国;安宏资本宣布与资生堂达成协议

    美国啤酒花供应商在比利时建立新的欧洲营运中心 总部位于华盛顿雅基玛的种植商拥有的最大啤酒花供应商Yakima Chief Hops YCH 已完成在比利时最先进的存储仓库建设 以更好地服务于全球酿造社区 向欧洲的扩张将大大改善YCH的客户体
  • Redis系列 - Redis缓存更新:先更新数据库还是先更新缓存?

    Redis系列 Redis缓存更新 先更新数据库还是先更新缓存 在更新缓存时 对于更新完数据库 是更新缓存呢 还是删除缓存 又或者是先删除缓存 再更新数据库 其实都会存在一定的问题 Cache Aside Pattern 旁路缓存模式 这是
  • TCP协议(全面)

    TCP协议 TCP的全称是Transmission Control Protocol 即传输控制协议 TCP工作在传输层上 其职责是 实现主机间进程到进程的通信 其次还需要保证可靠性 不是安全性 换言之不能保证安全性 什么是可靠性 重点在前
  • VSCode配置python开发环境无法找到自己设置的python编译器

    VSCode配置python开发环境无法找到自己设置的python编译器 前言 一 分别安装VScode和python 二 vscode配置python环境 1 在vscode里安装官方python插件 2 修改配置文件 前言 听说开发py
  • LCT维护子树信息(子树信息LCT) LCT维护边权(边权LCT) 知识点讲解

    扯淡 前言 众所周知LCT可以支持关于点权的链修改 换根 LINK CUT和查询链信息操作 但是总有那么些神犇 毒瘤 出题人会让你在支持链修改 换根 LINK和CUT操作的情况下去支持子树查询 或者维护关于边权的链修改 换根 LINK CU
  • Hadoop安装完全分布式搭建

    1 安装Hadoop 上传Hadoop的指定路径 root softwares 解压安装 cd root softwares tar zxvf hadoop 2 7 3 tar gz C usr local 配置环境变量 vim etc p
  • SHELL编程Nginx源码多版本脚本

    转载来源 京峰教育 因为Nginx是基于C语言开发的源代码程序 默认不能被Linux操作系统直接 识别和使用 需要经过C编译器将源代码文件编译生成二进制文件方可 要执行 源码软件部署三个步骤 预编译 configure prefix usr
  • 第一章 Elastic Stack入门

    一 预备知识Restful 1 起源 在没有前后端分离概念之前 一个网站的完成总是 all in one 在这个阶段 页面 数据 渲染全部在服务端完成 这样做的最大的弊端是后期维护 扩展极其痛苦 开发人员必须同时具备前后端知识 于是后来慢慢
  • 【平衡二叉搜索树(AVL)-- 旋转】

    目录 前言 1 二叉搜索树的插入 2 AVL树的旋转 1 右单旋 LL 2 左单旋 RR 3 右左双旋 LR 4 左右双旋 RL 完整插入代码以及打印验证 3 为什么需要AVL树 总结 前言 打怪升级 第60天 AVLTree 也就是我们所
  • kube-proxy Failed to retrieve node info: Unauthorized

    kube proxy Failed to retrieve node info Unauthorized 简介 解决方案 简介 最近遇到k8s master被误操作删除的问题 最后经过各方努力把集群恢复了 恢复的过程中遇到calico no
  • LASSO和LARS

    1 LASSO简介 LASSO是一种经典的松弛算法 其全称是The Least Absolute Shrinkage and Selectionator operator 于1996年由Tibshirani提出来 lasso的一个根本思想就
  • 分数阶微积分_从数学发现到物理难题——分数微积分的推导与应用

    一个神奇的发现 迭代积分公式 计算加法时 为了简化同一个数与自己多次相加我们定义了乘法 同样的 为了简化一个数与自己多次相乘 我们定义了乘方 因为这些新的标记方式和新的需要 我们把乘法和乘方运算里的n扩展到了有理数 其中它的特点是 现在我们
  • ais信号接收设备_AIS基站收发机是如何工作的

    船舶自动识别系统 Automatic Identification System 简称AIS系统 由岸基 基站 设施和船载设备共同组成 是一种新型的集网络技术 现代通讯技术 计算机技术 电子信息显示技术为一体的数字助航系统和设备 船舶自动识
  • C/C++从源码到可执行程序的过程

    C C 源码生成平台下的可执行文件 需要经过3个步骤 预处理 编译 链接 1 预处理 将宏 条件编译指令 头文件包含等指令进行展开 也就是说 这是一个代码替换的工作 C C 源码经预处理后 不再存在各种宏指令 但展开后依然是代码的形式 是人
  • 虚拟机windows7安装启动MYSQL5.7

    一 环境 环境 虚拟机VMVare 系统 windows7旗舰版 MYSQL版本 mysql5 7 25 二 具体步骤 1 首先下载安装mysql5 7 25 这里用的是安装版的mysql 网上大多数都是推荐去官网下载 这里推荐的是清华大学
  • RK356x 修改uboot和kernel,让固件支持多个设备树DTB选择

    步骤如下 1 开发环境 1 1 实验环境 1 2 目标 2 Uboot修改 2 1 uboot默认配置文件 config 2 2 uboot从resource img获取DTB和kernel顺序过程 2 3 修改boot mode模式 2