RK3568 学习笔记 : Linux emmc 内核启动 rootfs 根文件系统无法正常挂载问题的分析

news2024/11/17 7:54:19

问题描述

  • 平台 : NanoPi-R5C 开发板 RK3568 平台。

  • 手动编译的 Linux 内核,结果发现大概率 emmc 无法正常初始化,导致 rootfs 根文件系统无法正常挂载

  • Linux 内核版本: 6.1

  • Linux 内核代码位置: https://github.com/friendlyarm/kernel-rockchip.git,分支 nanopi6-v6.1.y

  • u-boot Linux 内核引导启动参数

bootargs=console=ttyS2,1500000 earlycon=uart8250,mmio32,0xfe660000 root=/dev/mmcblk2p3 rootfstype=ext4 rw rootwait

bootcmd=ext4load mmc 0:2 0x280000 Image; ext4load mmc 0:2 0x8300000 rk3568-nanopi5-rev02.dtb; booti 0x280000 - 0x8300000

在这里插入图片描述

问题排查

  • 通过查看 LOG 信息,发现 emmc 相关的初始化信息不多,或者在 挂载文件系统(ext4)时,emmc 没有初始化。

  • 通过修改内核代码:电源管理部分,让电源管理 PMIC 初始化提前,问题依旧。

  • 切换了内核的版本,有的版本有改善,但依旧有概率性无法挂载 rootfs 根文件系统,导致系统启动死机

  • RK 平台的Linux 内核可能更改了一些,尝试把 regulator 与 io power domains 提前初始化,但是执行依旧比较的靠后,尤其是 drivers/soc/rockchip/io-domain.c 中的 rockchip_iodomain_driver_init,提前初始化,但是 相应的 执行函数 rockchip_iodomain_probe 依旧执行的非常靠后,理论上电源部分需要提前初始化好,尤其是 emmc,里面有个 VCC_1V8 电源,来自电源管理芯片 PMIC。

解决问题

  • 从代码层面上,加了一些 LOG 打印,确认是电源初始化有点靠后,导致 emmc 没有正常初始化,文件系统 mount 挂载失败,查看文件系统挂载相关的代码,init/do_mounts.c,是否可以在文件系统挂载的地方加个延时。

  • 通过查看 init/do_mounts.c 文件系统挂载相关的代码,意外发现有个 u-boot 传参可以用于 延时挂载

  • 函数 prepare_namespace,里面有个 root_delay 变量,用于延时,单位是秒(ssleep)

/*
 * Prepare the namespace - decide what/where to mount, load ramdisks, etc.
 */
void __init prepare_namespace(void)
{
	if (root_delay) {
		printk(KERN_INFO "Waiting %d sec before mounting root device...\n",
		       root_delay);
		ssleep(root_delay);
	}
  • 经过查找 root_delay 变量,确认是来自 u-boot 的传参,因此,修改 u-boot 传参 bootargs,增加 rootdelay=1 即可,比如延时 1秒

在这里插入图片描述

  • 设置 bootargs console=ttyS2,1500000 earlycon=uart8250,mmio32,0xfe660000 root=/dev/mmcblk2p3 rootfstype=ext4 rootdelay=1 rw rootwait

  • 经过测试,发现emmc 正常初始化了,并且正常挂载 rootfs 根文件系统,并且可以进入 console 控制台。

  • emmc 根文件系统 rootfs 挂载问题得到初步的解决

在这里插入图片描述

小结

  • 后面研究一下 电源管理 pmic 与 regulator,确认为何电源管理初始化不能提前的问题(驱动注册提前初始化,但是执行函数 probe 靠后),更改启动的次序,发现没有效果

  • 这个 rootdelay 参数可能是Linux 新内核支持的,后面尝试对比新老版本Linux 内核,优化解决这个emmc 初始化较慢导致根文件系统 rootfs 无法挂载问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github图片显示不出来?两步解决!

很多同学可能和我一样,在GitHub中找一些项目或者资料的时候;总是会看到一些图片显示不出来,或者数学公式乱码: 比如这样 还有这样 其实这个主要是因为DNS污染导致的,具体大家可以百度,这边不详细介绍。 解决…

Java入门基础学习笔记4——开发Helloworld入门程序

Java程序开发的三个步骤: 1)编写代码 2)编译代码 3)运行代码 注意事项: 第一个java程序建议使用记事本来编写。 建议代码文件名全英文、首字母大写、满足驼峰模式,源代码文件的后缀必须是.java 注意&a…

37 | 什么时候会使用内部临时表?

union 执行流程 (select 1000 as f) union (select id from t1 order by id desc limit 2);key=PRIMARY,说明第二个子句用到了索引 id。 Extra 字段,表示在对子查询的结果集做 union 的时候,使用了临时表 (Using temporary)。 执行流程 创建一个内存临时表,这个临时表只有…

OpenAI 人工智能搜索产品即将推出,文本和图像都支持?!

OpenAI 人工智能搜索产品即将推出 OpenAI 计划于下周一(5 月 13 日)正式公布其人工智能搜索产品,不过报道中强调具体公告日期可能发生变化。OpenAI 拒绝对路透社的报道置评。外媒 The Information 在今年 2 月的报道中指出,OpenAI 一直在秘密开发其自家网络搜索服务,并将获…

LeetCode例题讲解:844.比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s "ab#c&qu…

网站实现微信扫码登录(利用微信开放平台实现)

第一步:微信开放平台账户申请 网址:微信开放平台 1.首先我们要做的就是进入到微信开放平台申请一个开放平台账户,获得资质! :注册需要准备营业执照、1-2个工作日审批、300元认证费 :注册之后&#xff0…

Window逆向基础之逆向工程介绍

逆向工程 以设计方法学为指导,以现代设计理论、方法、技术为基础,运用各种专业人员的工程设计经验、知识和创新思维,对已有产品进行解剖、深化和再创造。 逆向工程不仅仅在计算机行业、各行各业都存在逆向工程。 计算机行业逆向工程 计算…

裸金属服务器与云服务器有什么区别?

近年来,随着云计算技术的迅速发展,裸金属和云服务器已成为企业部署业务的两种主要方式。 裸金属是指提供基础设施硬件环境,但不包含操作系统和中间件的计算资源服务。 而云服务器则是通过虚拟化技术将计算资源划分为多个虚拟机,可…

JDK1.8 安装并配置环境变量

一、Windows 配置 1 安装文件 jdk-8u401-windows-i586.exe 2 环境变量 JAVA_HOME C:\Program Files (x86)\Java\jdk-1.8 CLASSPATH .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar; Path %JAVA_HOME%\bin 说明:Win7/Win8 中 Path 可能需要写成 ;%JAVA_HO…

【excel】统计单元格内数字/字符串的数量

文章目录 一、问题二、步骤(一)将A1中的数字分解出来,在不同的单元格中显示(二)统计每个数字出现的个数(三)去重 三、尾巴 一、问题 单元格中有如下数值:12345234534545&#xff0c…

01 背包(从二维数组到一维滚动数组)

问题描述: 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些)物品装入背包里物品价值总和最大。 二维dp数组01背包 1. 确定dp数组以及下标的含义 dp[i][j] 表…

Stable Diffusion写真完整教程

前言 最近自己对AI非常痴迷,并且今后也会一直在这个领域深耕,所以就想着先入门,因此花时间研究了一番,还好,出了点小成果,接下来给大家汇报一下。 AI绘画 提到AI绘画,大家可能立马会想到made…

男款内裤哪个品牌最好?男士内裤高能测评,选购攻略分享!

很多男性朋友的内裤都是穿到天荒地老的存在,但实际上如果一条内裤没有定期更换的话,存在的细菌就难以消除,从而可能导致出现健康问题,而且一条内裤没有定期更换,舒适性和透气性等方面都非常差! 定期更换内裤…

AI 入门:从 ChatGPT 开始

在信息泛滥的时代,AI 技术已经渗透到生活的各个方面,学习 AI 成为个人发展的必然趋势。而 ChatGPT 作为 AI 领域的佼佼者,无疑是开启学习之旅的最佳起点。它不仅提供了一个便捷的交流平台,更能显著提升信息处理效率。 本文将带领…

在 Python 的哪个版本之后,字典的添加顺序与键的顺序是一致的?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 在 Python 的不同版本中,字典(dict)类型的行为发生了显著变化。在 Python 3.6 及之前的版本中,字典是无序的,这意味着字典在遍历时不能保证按…

硬盘架构原理及其算法RAID工作原理写惩罚

一、硬盘的架构以及寻址原理 硬盘工作原理: 硬盘寻址原理:逻辑顺序磁道、盘片、扇区(顺序CHS) 二、机械硬盘算法 读取算法 寻道算法 个人与企业适合的算法和寻道 个人使用的机械硬盘适合的寻道算法和读取算法是&#xff1a…

[Vision Board创客营]--使用openmv识别阿尼亚

文章目录 [Vision Board创客营]使用openmv识别阿尼亚介绍环境搭建训练模型上传图片生成模型 使用结语 [Vision Board创客营]使用openmv识别阿尼亚 🚀🚀五一和女朋友去看了《间谍过家家 代号:白》,入坑二刺螈(QQ头像也换…

杰发科技AC7840——软件Sent_HAL39X

0. 序 使用PWM模拟Sent测试下7840的软件sent功能。 参考链接:SENT协议应用笔记 - TechPlus汽车工坊的文章 - 知乎 SENT协议 1. Sent功能测试 使用提供的软件Sent代码在7840上测试,接收数据OK 2. 参考资料 3. 数据解析 我们个根据上述参考资料尝试解析…

商务英语口语成人考级外语培训之BECkao考级口语篇

在口语考试中,不管实际内容你能说出多少,但准备一些套话,至少还能撑撑场子你们说是不是? 内容阐述 描述事实 1.Im going to describe/present/explain/give you some information about... 2.Id like to say a few words about...…

【Go】Go Swagger 生成和转 openapi 3.0.3

本文档主要描述在 gin 框架下用 gin-swagger 生成 swagger.json 的内容,中间猜的坑。以及,如何把 swagger 2.0 转成 openapi 3.0.3 下面操作均在项目根目录下执行 生成 swagger 2.0 import swagger go get -u github.com/swaggo/gin-swagger go get …