106.am40刷机(linux)折腾记2-前期的准备工作2-软件使用

news2024/12/23 18:01:37

最终的目标是刷入firefly的3399的镜像,同时更新内核到linux5.10版本(4.4的内核应该是相同的方法,我目前没有去折腾,暂时不用了)。

1. 平台: rk3399 am40  4g+32g

2.  内核:暂无

3.  交叉编译工具 :暂时不编译

4. 宿主机:ubuntu18.04

5. 需要的素材和资料:暂无

本节主要是一些软件的操作方法:

这些主要是一些调试方法,需要熟悉一下。

因为rk系列镜像有很多种方法和形式,这里特别说明一下:

uboot相关的是:u-boot.img,trust.img

内核相关的是:boot.img

一、dtb、dts 互转

1.1 dtb转dts

这个还是比较简单,但是需要在linux电脑中使用dtc命令

如果没有该命令,则安装sudo apt-get install device-tree-compiler

dtc -I dtb -O dts rk3399-smart-am40.dtb -o rk3399-smart-am40-20231110.dts

其中rk3399-smart-am40.dtb 是输入文件名

rk3399-smart-am40-20231110.dts 是输出文件名

前面的-I(大写字母i) -O(大写字母o) 

警告信息不管了。

1.2 dts转dtb

1.2.1 简单的dts转dtb是很容易的

dtc -I dts -O dtb -o output.dtb input.dts

其中,-I选项用于指定输入文件的格式,这里使用的是dts格式,表示设备树源码;-O选项用于指定输出文件的格式

1.2.2 但是内核中的dts一般由很多dtsi组合而成,而且还包含了一些h文件

一般就是编译内核的时候会自动生成对应的dtb文件,但是有时候我只是想比较一下dts文件的差别,就懒得去编译内核了,就自己找了一个脚本。

这是一个shell脚本,自定义文件名是build_dts_dtb.sh,放在kernel源码的根目录(新建文件需要增加执行权限哈)

#!/bin/sh
# @Author: dazhi
# @Date:   2023-06-02 16:07:52
# @Last Modified by:   dazhi
# @Last Modified time: 2023-06-02 16:42:53

#echo $#
if [ $# -eq 1 ];then
FILE_NAME=$1
else
FILE_NAME=rk3399-box-rev2-am40 #rk3399/jc-rk3399-linux
fi

FILE_NAME=${FILE_NAME%%.*}
echo $FILE_NAME
if [ -f arch/arm64/boot/dts/rockchip/$FILE_NAME.dts ];then
	echo "start compile $FILE_NAME.dts"
else
	echo "$FILE_NAME.dts not exist!!!"
	echo "Usage : $0 dts-filename[dir:arch/arm64/boot/dts/rockchip/] "
	echo "like: $0 rk3399-firefly-linux "
	exit 1	
fi



#exit 0
cpp -Wp,-MD,x.pre.tmp -nostdinc -I. -I include/  -undef -D__DTS__ -x assembler-with-cpp -o x.dts.tmp arch/arm64/boot/dts/rockchip/$FILE_NAME.dts

dtc -I dts -O dts -i arch/arm64/boot/dts/rockchip/ -o a.dts x.dts.tmp

dtc -I dts -O dtb -i arch/arm64/boot/dts/rockchip/ -o $FILE_NAME.dtb x.dts.tmp

rm x.dts.tmp

#echo "compile $FILE_NAME.dts done"

#./scripts/resource_tool arch/arm64/boot/dts/rockchip/$FILE_NAME.dtb  logo.bmp logo_r.bmp > /dev/null


echo "resource done"

脚本可以带一个参数,用于指定一个dts文件名(如果不指定文件名,会使用默认文件名)

有一些警告不用管了。

脚本是先编译成dtb文件,然后再把dtb转成一个dts文件

在脚本文件所在的目录中(即kernel目录下),生成的文件名为a.dts

二、resource.img的生成与解包

resource.img 是boot.img的组成部分

resource.img是由rk-kernel.dtb和logo.bmp与logo_kernel.bmp文件组合而成

其中bmp文件是可选的。

2.1 resource.img的生成

2.1.1 需要的软件工具:

内核源码目录下 scripts/resource_tool 

这个是由resource_tool.c 编译生成,如果没有该工具,请参考解决linux5.15编译时不生成boot.img 的问题-CSDN博客中的错误提示3,里面包含源码

2.1.2 生成需要的文件

dtb文件,logo.bmp logo_kernel.bmp (bmp文件不是必须)

2.1.3 生成的命令

        ./scripts/resource_tool  rk-kernel.dtb logo* > /dev/null

这样resource.img就生成在当前目录了。

2.2 resource.img的解包

有时候需要把已经有的resource.img解包出来,得到dtb文件,对dtb文件进行一些反编译或者其他的操作。

        ./scripts/resource_tool --verbose --unpack --image=resource.img

在out目录中可以看到解析出来的文件。(图中用的boot-11.img解析出来的resource文件,解析后,软件自动命名boot-11.img-second,所以这里用的是这个文件名,没有用resource.img) 

三、boot.img的生成与解包

3.1 内核直接生成boot.img文件

参考解决linux5.15编译时不生成boot.img 的问题-CSDN博客

3.2 自己使用Image和resource.img合成

有时候我自己有内核(Image文件),但是dtb文件我想用原来系统自带的,或者,我想验证一下我编译的dts能否启动,但是Image用原谅系统自带的,这样就直接用原来的Image和我自己编译的resource进行合并,生成新的boot.img,用来验证自己的dtb有什么问题。

3.2.1 生成命令

./scripts/mkbootimg --kernel ./arch/arm64/boot/Image  --second resource.img  -o  boot.img

根据实际情况修改对应文件的路径,Image和resource.img是可以根据自己的需要指定不同的文件的。

mkbootimg命令 请参考解决linux5.15编译时不生成boot.img 的问题-CSDN博客

3.3 boot.img的解包

使用file查看一下文件的格式。

需要用到工具android-unpackbootimg

运行命令(linux下):

./unpackbootimg --input boot.img -o boot

解包出来的文件生成在boot目录中

其他文件不用关心 

3.3.1 注意

并不是所有的boot.img 都可以这么解包!!!

比如firefly的镜像中的boot.img就无法解析出来。

这个boot.img 是RKDevTool.exe解包FIREFLY-RK3399_Ubuntu20.04-r240_v2.5.1d_230330.img出来的,大小有128M,使用file命令查看是ext4的文件系统格式。

这个文件需要使用挂载文件系统的办法查看和修改。(mnt-temp是一个新建的文件夹)

卸载使用命令:sudo umount mnt-temp (不要在mnt-temp目录中执行)

四、update.img的解包

        打包也是有的,但是我目前很少用,这里就不再提及。主要是解包,直接使用RKDevTool.exe工具解包,解包的文件在RKDevTool.exe所在目录的output目录中。

4.1 并不是所有的img都能这么解开。

比如Armbian_23.02.2_am40_jammy_current_6.1.11.img 就无法(使用RKDevTool.exe)解包。

那这时可以尝试以下两个方法中的一个:

4.1.1 可以在虚拟机中双击该img文件,则该img自动挂载到系统中,就可以打开查看了。

4.1.2 7z解压软件可以打开img文件

其他的压缩软件(试了rar,和360zip)不行。

点击文件,鼠标右键,选中7-zip,然后打开压缩文件即可

如果是这种解包的方法,Image和dtb在boot目录下查找。

注意: 正常应该使用RKDevTool.exe(可能linux下也有对应的方法,我这就没有研究了)解包,这个工具无法解压时,可以尝试后面的方法(不一定百分之百可行)。

五、parameter.txt文件的内容一个注意事项

5.1 其实就是注意一下地址和分区信息

        

   图中rootfs的地址就不同,一般是参考parameter.txt为准。尤其是刚刚使用了该img(parameter.txt是从该img解包出来的)烧写过机器的情况,那么此时机器中的分区情况肯定就跟该img中的parameter.txt中指定的是一致的,需要特别注意分区情况!!!!

六、maskrom与loader模式的简要说明

6.1 loader模式

        线刷的基本模式,uboot正常时(同时还需要boot.img中的dtb设置正常),可以进入到该模式

6.1.1 进入loader模式的办法(下面是介绍多种方法,选择其中一种就可以了)

        6.1.1.1  上电启动的时候,按住recovery按键。(注意:usb的线必须先连接到电脑,注意图中蓝色部分的字)

       am40我基本是这样使用的(蓝色字体)。

        6.1.1.2  进入系统后,reboot loader   (好像安卓下不可用) 

        6.1.1.3  在uboot命令阶段,使用uboot命令 reboot loader  (firefly的uboot是支持的,其他不清楚)

        

        6.1.1.4  在uboot启动阶段(上电的时候),按住ctrl+d 可以自动进入

        6.1.1.5  在uboot命令阶段,输入download

        

        6.1.1.6  在uboot命令阶段,输入rockusb 0 mmc 0 也是可以的
       

6.1.2 进入loader之后,下载软件提示如下:

(驱动程序DriverAssitant_v4.5必须安装好)

这时候就可以下载了。

6.1.3 无法进入loader模式的原因:

6.1.3.1 uboot被破坏,这个时候uboot不能正常启动,上电后应该是自动进入maskrom模式(可以按住recovery按键试试)。

6.1.3.2 boot.img 中dtb文件有问题,初始化emmc故障,这个时候无法进入loader模式,也无法自动进入到maskrom模式(需要手动短路两个点进入maskrom模式才可以)。类似如下打印信息:

Hit key to stop autoboot('CTRL+C'):  0

Device 'mmc@fe310000': seq 0 is in use by 'sdhci@fe330000'  

Card did not respond to voltage select!

mmc_init: -95, time 51

Could not get mmc 0

## Booting Rockchip Format Image

Could not find kernel partition, ret=-1

no mmc device at slot 1

Card did not respond to voltage select!

mmc_init: -95, time 50

starting USB...

Bus usb@fe380000: USB EHCI 1.00

Bus usb@fe3a0000: USB OHCI 1.0

Bus usb@fe3c0000: USB EHCI 1.00

Bus usb@fe3e0000: USB OHCI 1.0

scanning bus usb@fe380000 for devices... 1 USB Device(s) found

scanning bus usb@fe3a0000 for devices... 1 USB Device(s) found

scanning bus usb@fe3c0000 for devices... 3 USB Device(s) found

scanning bus usb@fe3e0000 for devices... 1 USB Device(s) found

       scanning usb for storage devices... 0 Storage Device(s) found

Device 0: unknown device

ethernet@fe300000 Waiting for PHY auto negotiation to complete. done

Speed: 100, full duplex

BOOTP broadcast 1

BOOTP broadcast 2

BOOTP broadcast 3

6.1.3.3 usb下载线要连接,尤其是使用按键进入的时候。

6.2 maskrom模式

        当emmc中的uboot无法正常启动时,一般需要进入到该模式。

        uboot正常,但是boot.img中的dtb文件异常,也会导致无法进入loader模式,就需要手动进入到maskrom模式。

6.2.1 手动进入maskrom,

        需要在上电之前,短路两个点了,然后不放开,再进行上电,直到出现maskrom的提示。

        firefly的提供这个两个点:

        am40上,要仔细找一下,对比那三个比较大的电容,可以定位到。

6.2.1.1 实际是 :如果进入maskrom,需要短接emmc-clk信号到地。(这是firefly的图)

6.2.2 从loader进入到maskrom模式

        

6.3 maskrom模式一定要下载miniloaderAll.bin

        maksrom 模式下,miniloaderAll.bin是必须要下载的,否则无法下载成功。

比如我在这个模式下更新boot.img,就必须选中loader。

七、总结:

7.1 boot的组合成分

        

7.2 那么在调试的时候,可以任意的调整Image或者resource.img文件,去验证自己的内核或者dtb文件的正确性。

        比如:正常的Image+待验证的dtb,可以验证dtb是否正常

                正常的dtb+待验证的Image,看看自己内核的配置是否正常,驱动是否正常?

7.3  因需要的文件比较多,所以做了一个文件共享

也欢迎大家私信我哈。

7.4 注意:只要能进入maskrom,一切都有救。进不了,就成了废品了。 一般情况下使用loader模式更新足够了,只有loader模式进不了的情况才会启动maskrom了。

7.5 logo.bmp和logo_kernel.bmp只是影响开机logo的显示,不会有其他问题。

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

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

相关文章

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…

macOS文本编辑器 BBEdit 最新 for mac

BBEdit是一款功能强大的文本编辑器,适用于Mac操作系统。它由Bare Bones Software开发,旨在为开发者和写作人员提供专业级的文本编辑工具。 以下是BBEdit的一些主要特点和功能: 多语言支持:BBEdit支持多种编程语言和标记语言&…

jstack java堆栈跟踪工具

jstack java堆栈跟踪工具 1、jstack介绍 jstack(stack trace for java)是java虚拟机自带的一种堆栈跟踪工具。 jstack主要用于生成java虚拟机当前时刻的线程快照,线程快照是当前java虚拟机内每一条线程正在执行的方法 堆栈的集合&#xf…

信息安全工程师软考知识点

文章目录 知识点总结2023软考总结选择题问答题 知识点总结 军用不对外公开的信息系统安全等级至少应该>三级 数据中心的耐火等级不应低于二级 政府网站的信息安全等级原则上不应低于二级第一代交换机以集线器为代表,工作在OSI物理层 第二代交换机以太网交换机&a…

关于论文图表目录和交叉引用的使用小结

目录 1 题注用法 2 交叉引用 最近在写论文,遇到不少Word使用的问题(错误!文档中没有指定样式的文字。) 网上其实也有很多解决方案但我当时还是折腾了几个小时才整出来图目录,以下是针对我目前使用的感觉简明很多的方法。 1 题注用法 1) 假…

Selenium+JQuery定位方法及应用

SeleniumJQuery定位方法及应用 1 JQuery定位说明1.1 JQuery定位方法1.2 JQuery最常用的三个操作1.3 JQuery一个示例1.3.1 用户名输入框1.3.2 密码输入框1.3.3 登陆按钮1.3.4 完整代码 2 JQuery选择器2.1 常用选择器列表2.2 思考 1、关于Selenium提供了很多元素定位方法&#xf…

解决计算中msvcp120.dll丢失问题,总结5个有效的方法

msvcp120.dll是Microsoft Visual C 2013 Redistributable中的一个动态链接库文件,它提供了许多重要的函数和类,用于支持各种应用程序的正常运行。当这个文件丢失或损坏时,可能会导致一些应用程序无法启动或运行错误。 msvcp120.dll的属性 文件…

ssm826基于ssm的电影评论系统+vue

ssm826基于ssm的电影评论系统vue 交流学习 ​​​​​​​ 演示 项目功能演示: ————————————————

【数据分享】我国雏鹰企业数据(excel格式\shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。 本次我们为大家带来的…

MSVCP140_1.dll,是什么意思?msvcp140_1.dll丢失的解决方法分享

今天我在打开电脑一款软件时候,突然提示‘’msvcp140_1.dll丢失‘’我不知道怎么办,经过我几天的努力终于找到msvcp140_1.dll文件的解决方法,也成功解决这个问题,解决了我的困扰,也成功找到msvcp140_1.dll为什么会丢失…

关于企业海外Social平台营销布局,你需要了解这三件事

01 企业Social营销布局模式 Social营销走到现在,早已进入了标准配置期。任何企业和组织,进行营销宣传的时候都会在社媒社交平台上创建账号和运营。目前,海外Social平台营销模式基本分为四类: 官方社媒账号运营:以Hoot…

自我报错-----断言

断言 最近在阅读freertos源码时,经常在某些某些API函数中遇到assert(断言),其实断言就是用来判断表达式是否成立,而进行自我报错,防止程序后续发生未知的错误,可以这么理解 if(条件true)//程序…

高通SDX12:ASoC 音频框架浅析

一、简介 ASoC–ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。 本文基于高通SDX12平台,对ASoC框架做一个分析。 二、整体框架 1. 硬件层面 嵌入式Linux设备的Audio subsystem可以划分为Machine(板…

高级运维学习(十六)Prometheus 监控

Prometheus概述 Prometheus是一个开源系统监控和警报工具包,最初由 SoundCloud构建。也是一款监控软件,也是一个时序数据库。Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。主…

web 自动化测试,这8 个核心知识点,你一定得掌握

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

设计原则 | 单一职能原则

一、单一职能原则(SRP:Single Responsibility Principle) 1、原理 就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化可能会削弱或者抑制这个类完成…

DMP大湾区工博会开幕在即,狂撒100万福利,邀您与2200+展商面对面

截止11月9日,DMP大湾区工博会2023已迎来超100万人关注。大湾区工博会将于11月27-30日在深圳国际会展中心(宝安)举办。作为工业制造行业的风向标,展会将带来2200多家全球参展企业、40多场主题演讲、数千项行业新品技术。 本届DMP大湾区工博会,…

Rocky DEM 高尔顿板 小球掉落正态分布模拟

Rocky DEM 高尔顿板 小球掉落正态分布模拟 前言一、外部三维模型的建立二、导入到Rocky中并设置1.导入外部三维模型2.打开3D视图3.添加颗粒入口界面4.添加颗粒并设置属性5.设置颗粒与墙壁的碰撞属性6.设置颗粒入口流量7.求解 三、动画序列设置并导出 前言 刚开始学习离散元软件…

测试面试越自信越好吗?

前几天面试了一位小伙子,我觉得比较有代表性,所以拿出来跟大家分享一下。 我们公司的招聘流程是首先HR主动寻找或者挑选投简历者中比较合适的人来公司应聘,先是笔试,笔试包括英文部分和专业知识部分,根据做题的结果再…

计算复杂性理论(一)图灵机

计算复杂性理论(一)图灵机 一台 k-带图灵机(TM)M 有 k-条带子。第一条带子称为输入带,用来存放输入数据,输入带是只读带。其余 k−1 条带子是工作带,既可以从工作带上读信息,也可以…