z913457894 发表于 2021-7-24 15:15

fastboot uboot的使用

本帖最后由 z913457894 于 2021-7-24 15:14 编辑

其实早就准备发一篇fastboot/uboot模式的科普贴,之前的有一篇逆向进fastboot的帖子,https://www.znds.com/tv-1198276-1-1.html,一直有人再说进什么fastboot直接用Hitool不就ok了,fastboot下面也没什么可以用的指令之类的,看到这些,我觉得我真有必要针对这些问题讲一讲。 我们这里说的fastboot/uboot模式,准确的说只能叫uboot模式(在嵌入式领域都称为bootloader模式,你可以理解为平常电脑的bios),而fastboot是运行在uboot模式之上的一种协议,这种协议是可以通过USB或以太网与引导加载程序通信的机制,我们这里只针对这种模式来讲,不谈协议。下面是我手上的两个盒子进入fastboot/uboot模式的终端输出,也就是你们俗称跑码。第一个 天邑TY1208-Z,可以看到上面显示是Uboot
第二个是广电九联科技HDC2100k,上面显示为fastboot
以上不管是fastboot还是uboot,源代码都是由芯片厂商提供,和芯片厂商提供的刷机工具(比如海思的hitool)是配套的,后期盒子厂家会在fastboot/uboo代码基础上适配自己的其他基础硬件,网卡,wifi等,但和上层的刷机工具通信的协议是不会改变的。看完这个你就会明白为什么我一直在花力气进这个模式的原因,离开了这个模式刷机工具啥都干不了。本来这里是准备通过我的盒子HDC2100k修改fastboot环境变量,加入ctrl+c的bootdelaykey,hitool就可以正常备份刷写固件的案列,来证明fastboot模式对刷机工具hitool的重要性,加入证明让帖子变得变得难以让人看懂,之后会再写一篇帖子帖子------hdc2100k如何支持hitool工具。 这种模式各个厂家的指令大同小异,都是类似的,因为他们的代码都是仿照开源uboot代码写的,我这里以手上的HDC2100K介绍下fastboot/uboot下指令的用法,看懂了,其它的基本也就都会了。我们现在就演示下fastboot下各个指令是如何使用。串口终端我推荐SecureCRT。
我们首先输入指令help,回车来看看你有哪些指令可以用,我只是简单的列举了几个常用指令。

环境变量相关我们输入指令printenv回车查看一下环境变量,可以看到tftp的ip设置,设备的mac地址,启动信息等
我们还可以修改环境变量,以修改加载kenel等待时间为例,输入setenv bootdely 1 回车,然后在输入 saveenv回车很好理解设置完,保存,如果不保存,就是重启无效。
https://www.znds.com/static/image/hrline/line3.png
传输相关传输就是上载和下载,电脑到机顶盒内存,机顶盒内存到电脑,这里都是以机顶盒内存为中间桥梁,这里很重要,必须要理解,就拿我们现在要刷系统的某个分区,我们必须分两步走,一是系统分区文件从电脑传输到机顶盒内存,二是再从机顶盒内存到emmc或者其它存储芯片。传输方式有很多,串口,网口,usb都可以。串口传输   输入指令loady 0x1FFBFC0 后面1FFBFC0是内存地址,同样你可以通过指令getinfo ddrfree获取空闲地址。 如果用的是SecureCRT的话,直接选择 传输->发送Ymodem,选择你要发送的文件点击确定就行了。如果是上载到电脑的,输入指令uploadx 0x1FFBFC0 , SecureCRT上直接选择 传输->接收Xmodem,保存文件就可以了。这里Xmodem和Ymodem是两个不同协议,根据具体指令选择,loadx就是Xmodem,loady就是ymodem。
网络传输速度比较快,适合大文件传输,但我们需要在电脑上有一个tftp的服务器工具。首先我们设置环境变量IP地址信息,指令setenv serverip 192.168.0.119setenv ipaddr 192.168.0.139setenv gatewayip 192.168.0.250ping 192.168.0.119都很好理解,设置服务器ip,自己的ip,网关地址,ping下服务器,根据自己情况设置。
电脑打开tftp的服务器工具,下载的文件改名file.bin,放到程序同级目录,准备好之后输入指令tftp 0x1FFBFC0 file.bin,等待传输完成就行
上传之需要在上面指令多加一个参数,上传字节数,比如我们需要上传0x400字节tftp 0x1FFBFC0 file.bin 0x400,等待传输完成后,程序目录就会生成文件file.bin

usb传输   我不太想讲,要看具体盒子支持些什么指令,天邑Ty1208-z支持USB_burning指令,可以直接文件放到U盘(格式化成fast32)里面,然后直接文件写入emmc分区,这个盒子没这个指令,显得有点复杂,我简单把指令列出来,有兴趣自己尝试。usb start打开初始化usbusb storage   列举出已经插入的usb设备fatls   展开usb设备中文件列表fatload将文件加载到内存

https://www.znds.com/static/image/hrline/line3.png
内存操作相关下载完数据,如何查看数据是不是正确的,显示内存数据,输入指令md.b 0x1FFBFC0 0x400md.b 按单字节显示; md.w按双字节显示;md.l 按四字节显示第二个参数和第三个参数分别是内存地址和显示字节数,显示字节数是以前面指令模式为单位的,md.l就会显示4倍的显示字节数。
修改内存nm.b   nm.w   nm.l
查看空闲内存地址getinfo ddrfree这里面的地址范围可以用在上面所有和内存相关的地方

https://www.znds.com/static/image/hrline/line3.png
Emmc读取写入相关emmc写入,输入指令mmcwrite 0 0x1FFBFC0 0x1000 2 Write 后第一个参数0是指的设备0,有的设备mmcwrite没有这个参数;第二个0x1FFBFC0上面已经提过了内存地址;第三个0x1000是扇区号,就是写入的扇区地址,一个扇区0x200(512)字节,比如我们要写入偏移地址0x200000,我只需要偏移地址除以扇区大小0x200就可以得到扇区地址0x1000;第四个2就是写入两个扇区1024字节
emmc读取,输入指令mmcread 0 0x1FFBFC0 0x1000 2 参数跟前面mmc write一致。

https://www.znds.com/static/image/hrline/line3.png
总结上面介绍的东西基本已经覆盖了百分之九十的常用指令,用这些最基本的指令,我们就可以完成固件读取,写入的操作,Hitool刷机软件的所有功能也都是建立在这些指令之上的,你要是会写软件,基本上也可以写一个hitool出来。作为一名程序开发者,从程序猿角度科普下,希望刷机的朋友们不只单单知道有包就可以刷,而真正去理解程序是怎么运作的。

梅奇耶鲁 发表于 2021-7-24 16:03

虽然我看不懂,但是感觉很厉害的样子

solitary. 发表于 2021-7-24 18:29

这是高手

无码表情 发表于 2021-7-24 18:29

小白前来学习

xtwuyou 发表于 2021-7-24 18:30

大师之作,需要慢慢消化,好久没有这样教学类的贴子了,支持一下!!!!!!

honglong2007 发表于 2021-7-24 18:57


小白前来学习,,,,

wang990156 发表于 2021-7-24 20:34

感谢大佬分享

kmml 发表于 2021-7-25 20:24

虽然我看不懂,但是感觉很厉害的样子{znds8}{znds8}{znds8}

IdlmI 发表于 2021-7-26 11:28

感谢分享

gfy81 发表于 2021-7-26 11:55

这是高手
页: [1] 2 3 4 5 6
查看完整版本: fastboot uboot的使用