问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

官方的uboot怎么进入

发布网友 发布时间:2024-04-09 00:26

我来回答

1个回答

热心网友 时间:2024-04-11 03:14

第一阶段 start.S
首先我们可以在u-boot.lds中看到ENTRY(_start),即指定了入口_start,_start也就是整个start.S的最开始;
1. reset
在arch\arm\cpu\armv8\hi3559av100中的start.S
reset: /* * Could be EL3/EL2/EL1, Initial State: * Little Endian, MMU Disabled, i/dCache Disabled */ adr x0, vectors switch_el x1, 3f, 2f, 1f3: msr vbar_el3, x0 mrs x0, scr_el3 orr x0, x0, #0xf /* SCR_EL3.NS|IRQ|FIQ|EA */ msr scr_el3, x0 msr cptr_el3, xzr /* Enable FP/SIMD */#ifdef COUNTER_FREQUENCY ldr x0, =COUNTER_FREQUENCY msr cntfrq_el0, x0 /* Initialize CNTFRQ */#endif b 0f2: msr vbar_el2, x0 mov x0, #0x33ff msr cptr_el2, x0 /* Enable FP/SIMD */ b 0f1: msr vbar_el1, x0 mov x0, #3 20 msr cpacr_el1, x0 /* Enable FP/SIMD */0: /* * Cache/BPB/TLB Invalidate * i-cache is invalidated before enabled in icache_enable() * tlb is invalidated before mmu is enabled in dcache_enable() * d-cache is invalidated before enabled in dcache_enable() */ /* * read system register REG_SC_GEN2 * check if ziju flag */ ldr x0, =SYS_CTRL_REG_BASE ldr w1,
ldr w2, =0x7a696a75 /* magic for "ziju" */ cmp w1, w2 bne normal_start_flow mov x1, sp /* save sp */ str w1,
/* clear ziju flag */
adr x0, vectors,其中的vectors代表了异常向量表
主要做了如下事情:
1)reset SCTRL寄存器
具体可参考reset_sctrl函数,由CONFIG_SYS_RESET_SCTRL控制,一般不需要打开。该配置项的解释如下:
Reset the SCTRL register at the very beginning of execution to avoid interference from stale mappings set up by early firmware/loaders/etc.
http://lists.denx.de/pipermail/u-boot/2015-April/211147.html
2)根据当前的EL级别,配置中断向量、MMU、Endian、i/d Cache等。
3)配置ARM的勘误表
具体可参考apply_core_errata函数,由CONFIG_ARM_ERRATA_XXX控制,在项目的初期,可以不打开,后续根据实际情况打开)。
2. normal_start_flow流程
这里是正常启动流程
normal_start_flow: /* set stack for C code */ ldr x0, =(CONFIG_SYS_INIT_SP_ADDR) bic sp, x0, #0xf /* 16-byte alignment for ABI compliance */ bl uart_early_init adr x0, Str_SystemSartup bl uart_early_putsldr x0, =0x1202008cldr w0,
bl uart_early_put_hex /* enable I-Cache */ bl icache_enable
设置代码的堆栈跳转到uart_early_init
因为uart_early_init是全局的伪汇编指令(在uart.S中定义),所以在start.S中也可以使用到
声明一个字符串Str_SystemSartup使能icache
因为bne normal_start_flow是不跳转回来的,所以会继续向下执行
3. running_addr_check流程
判断是否进入not_ddr_init中,不需要DDR初始化,直接copy到DDR中
check_boot_mode: ldr x0, =SYS_CTRL_REG_BASE ldr w0,
lsr w6, w0, #4 and w6, w6, #0x3 cmp w6, #BOOT_FROM_EMMC //判断是不是EMMC启动 bne ufs_boot //如果不是,则进入ufs_boot
4. ziju_flow流程
自举模式从这里我可以推断出,芯片的启动分为两种,一种是自举模式也就是本地的spiflash或nand或emmc等启动,另一种就是pcie启动模式。不同启动模式对应不同的启动流程。但不同启动模式代码是相互交织的,需要分清楚!
初始化PLL和DDRC控制器和管脚复用情况。
/* init PLL/DDRC/pin mux/... */ ldr r0, _blank_zone_start ldr r1, _TEXT_BASE sub r0, r0, r1 ldr r1, =RAM_START_ADRS add r0, r0, r1 mov r1, #0x0 /* flags: 0-normal 1-pm */ bl init_registers /* init PLL/DDRC/... */
bl init_registers这个函数是初始化一些寄存器,这些寄存器分了很多,包括中断、网络、哈希功能形式的寄存器,初始化的意思就是给一个值,但这值一般没什么意义,具体的寄存器,后面会再进行配置!
start_ddr_training
/* DDR training:DR布线,完全按等长约束就没有ddr training的说法。
当布线去掉等长约束或放宽约束条件,就要做ddr training,以保证时序的完整性,使信号的建立保持时间窗口一致。ddr training是调整Addr/Cmd信号对CLK,DQ信号对DQS的延时。由于没做等长约束,信号有长,有短,就会导致信号有快,慢之差(信号在1000mil走线耗时约160~180ps,相对FR-4的板材),ddr training就是找到一套参数,使信号的建立与保持时间充足。并保存且写到配置中。*/
在arch\arm\cpu\armv8\hi3559av100\lowlevel_init_v300.c中的start_ddr_training()函数中
pcie_slave_boot5. jump_to_ddr
自举模式省略了一些PCIE判断的情况的解释,我也没怎么看懂
jump_to_ddr: adr x0, _start_armboot ldr x30,
ret
开始进入跳转到C语言阶段
总结关cache,关mmu,SVC模式检测是不是自举模式还是pcie启动,也包括是冷启动还是热启动串口初始化DDR初始化和DDR training正常启动时,会检测启动方式,对代码进行相应的拷贝,重定位设置堆栈清bss段跳转到第二阶段,即C语言阶段
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养猪场保暖怎么做最有效(冬天那么冷,怎样做好养猪的防护工作?) 淮安涟水机场机场作用 涟水机场发展情况 电脑系统下载win10求win10官方系统下载地址 ...办显示英文字母电脑开机显示英文字母怎么办 制作ox10安装u盘 win7清空记录吗 win7一直提示文件损坏 电脑无法启动文件损坏电脑开机显示文件损坏或丢失而开不了机怎么办... 怎样在手机上取消值机? 桐乡博物馆的参观体验怎么样? 成都槐树苑二期何时拆 ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 碘化钾在不同温度下会有怎样的溶解度呢? 得了痔疮用什么药最有效 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... QQ飞车荣誉勋章到最后是不是可以用点卷买经验? ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 放200只羊需要多少平米羊圈 金桔柠檬膏的做法金桔柠檬膏怎么做 冰糖金桔柠檬膏冰糖金桔柠檬膏的做法 金桔柠檬膏的做法 金桔柠檬膏怎么熬制 暖气内循环是什么意思? 手机号1 24 手机号24小时内绑定了两个被限制 请问什么时候才能重 ... ...²2°+tan²3°+···+tan²89°=5310+(1/3) 用1、3、0、5这几个数字组成最大的四位数是___,最小的四位数是... 按要求填一填。(填正确答案的序号) 1. 5310 2. 2716 3。 450 4. 2... 531010算24点 高中化学有机物中,有哪几类能与金属钠发生化学反应,分别几比几反应... 在变电所中,110kV及以上户外配电装置,一般装设架构避雷针,但在下列哪... 古诗所见描写儿童放牛时什么情景‘ 牧童骑黄牛歌声充满了画面的什么? 3档踩离合和2档踩离合哪个省油 ...微踩油门行驶和用3档不踩油门靠怠速行驶哪个省油? 汽车行驶速度是每小时25公里,挂二档还是挂三档跑?哪个档省油? 阜新市太平区水泉镇2021年能动迁吗? 三档怠速和二档小油门,哪个费油? 辽宁阜新市太平区水泉镇户部村六组动迁,村委会根村民签定的协意是否有效... 油耗问题,城区是2档2000转省油还是3档1500转省油!! 阜新市太平区水泉镇西山村北半部是要动迁吗? ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 光猫电源接口掉下来了 联通光纤头拔出来了 光纤尾纤从插头中掉了出来(就是与光猫连接的插头),无法与光猫连接上... 连接光猫的光纤插头,不小心把里面的光纤线拔了出来,怎么接回去_百度知 ... 2015款途观有轮胎防盗螺丝吗 你好,能请问下这个螺丝是干嘛用的嘛?途观车上的。貌似和车牌有关系 英雄联盟出手游了你们还玩王者荣耀吗 下列各物质中传热最慢得是( ) A木块 B水 C钢 南昌大学有多少人出国留学了?