首页 » 互联网 » 海思Hi35xx uboot启动分析总结_参数_情况变量

海思Hi35xx uboot启动分析总结_参数_情况变量

落叶飘零 2025-01-19 04:39:17 0

扫一扫用手机浏览

文章目录 [+]

(1)BOOTROM启动

当启动模式为从 BOOTROM 启动时,海思的BOOTROM的程序会去初始化串口,然后与海思的HiBurn工具建立通信

如果能建立通信,则启动HiBurn升级uboot程序流程,如果不能与HiBurn建立连接,等待一段韶光之后它就转去从外部的spi flash启动

海思Hi35xx uboot启动分析总结_参数_情况变量 互联网

(2)HiBurn 烧入事理

HiBurn烧入的基本事理是,HiBurn工具与BOOTROM程序建立连接之后,先下载uboot程序的开始4KB数据到海思芯片的内部RAM

然后通过下载的那一小部分uboot代码去初始化外部的DDR,如果DDR初始化成功,HiBurn再将剩下的uboot程序下载到外部的DDR中去

末了是在DDR中启动uboot,如果要进行烧入操作,是通过DDR中的Uboot程序,发送uboot命令将DDR中的uboot程序烧入到外部的flash中去,这样就实现了uboot程序的升级。

(3)spi flash启动

海思的hi3521a芯片支持从 SPI NOR Flash 和 SPI NAND Flash 直接启动,它的启动也便是我们start.s中的大部分实现。
紧张做的事情有:

初始化CPU干系功能(关缓存,关MMU,设置SVC模式等)将非常中断向量表重定向到内部RAM将uboot代码重定向到外部DDR中设置栈空间清空BSS段末了调用C措辞接口去实行C措辞代码实现第二阶段的启动。
第一阶段在实行之后,在DDR中的映射空间的数据分布如下:

(二)start_armboot第二阶段启动总结

在uboot的启动的第二阶段,紧张做的是:

初始化变量和构造体重定向环境变量初始化堆管理器初始化环境变量进入命令处理循环

在命令处理循环中,默认Uboot是超时等待用户命令输入

如果有检测到命令的输入,则实行相应的命令,如果超时没有命令输入,uboot默认实行的bootm命令进行kernel启动勾引。

这里涉及到两个比较总要的点:环境变量的重定向和uboot命令处理。

(1)环境变量重定向

在uboot第二阶段的时候,uboot会去检测flash中环境变量的地址中环境变量是否有效,如果有效,则利用flash中的环境变量值来初始化uboot运行中的环境变量,如果flash中的环境变量无效,则利用默认的环境变量来初始化运行中的uboot。

在uboot的用户命令操作过程中,如果有对环境变量进行修正,都是修正的内存中的那一份环境变量,如果要将修正的环境变量保存到flash中去,则须要运行命令saveenvuboot在flash的分布如下:

uboot.bin烧入到flash的0地址位置,boot.bin里面的数据便是按我们连接脚本中的数据那样分布。
在0x80000(512KB)开始的位置便是环境变量的在flash的位置,其大小为256KB。

(2)uboot命令处理

在启动的末了阶段,便是实行uboot的bootm命令,紧张便是uboot将kernel程序从flash中复制到内存去,然后便是考验kernel镜像文件的有效性,设置uboot通报给kernel的参数,设置kernel启动的环境(比如关缓存,关中断,CPU处于SVC模式等)

末了便是通过一个函数指针指向kernel的启动地址,调用该函数实现uboot到kernel的运行。

在这个过程中,启动参数和机器码同时通报给kernel,关于参数通报,实际在这里是通过寄存器间参数的地址通报给了kernel。

(3)参数通报

C措辞进行函数调用的时候,常常会通报给被调用的函数一些参数,对付这些C措辞级别的参数,被编译器翻译成汇编措辞的时候,就要找个地方存放一下,并且让被调用的函数能够访问,否则就没发实现通报参数了。
对付找个地方放一下,分两种情形。

一种情形是,本身通报的参数就很少,就可以通过寄存器传送参数。
由于在前面的保存现场的动作中,已经保存好了对应的寄存器的值,那么此时,这些寄存器便是空闲的,可以供我们利用的了,那就可以放参数,而参数少的情形下,就足够存放参数了,比如参数有2个,那么就用r0和r1存放即可。
其余一种情形是,如果参数太多,寄存器不足用,那么就得把多余的参数堆栈中了。
即,可以用堆栈来通报所有的或寄存器放不下的那些多余的参数。

--------------End--------------

如需获取更多内容

请关注"大众年夜众号 liwen01

标签:

相关文章