U-boot启动问题问答

来源:互联网 发布:网络形容男人的词 编辑:程序博客网 时间:2024/04/29 12:08
{//?上电系统从哪里开始,启动代码放在什么位置   上电后,有的系统可通过硬件管脚的电平来选择从Nandflash还是从Norflash启动。这里是指定从Nandflash启动的  启动代码U-boot 是不能放在RAM中的,因掉电就消失了。  }{//?boot第一件事为何是设置为SVC模式  为安全性,CPU本身提出了多种模式来实现安全性,和效率兼顾。   SVC模式就是CPU对资源的一种保护。在普通用户模式是不能访问到的。只有切换到SVC模式才能访问。}  {//?并关闭中断,MMU,看门狗等  初始时为安全性,把系统单纯化, 排除掉别的干扰,仅让u-boot实现单纯的搬移代码,  的功能。 所以关掉中断,避免中断打断带来的保存返回的问题。 关掉MMU,因为u-boot软件是硬件实地址访问。  根本没有用到内存地址映射。 看门狗如果没关,硬件上默认到时会复位的。 所以要关掉}{//?为何设备初始引导不能用C代码,要用汇编代码  特殊指令,如操作协处理器, MMC CASH ,切换SVC模式等C不能做到。  另C是需要先准备栈的。}{//?U-BOOT为何要搬移到RAM中运行  在RAM中速度更快,但因掉电就没了,所以要保存在Nandflash或Norflash中。    如果不搬移,直接在Norflash上运行也是可以的。 Nandflash因是按块操作的,不太合适直接运行。}{//?U-boot如何传递参数到内核。 移植时要注意哪些  方式一 采用param_struct:  (我们现在使用的是这种方式) 见common/cmd_boot.c go命令的优化  方式二 采用taglist:}  {//---u-boot 的启动步骤(重点)   //阶段一(汇编)    设置为SVC模式   基本硬件设备初始化  //如关闭中断,MMU,看门狗  初始化时钟,串口,flash,内存    见cpu/arm_cortexa8/start.S 的   cpu_init_crit   自搬移到内存       //copy_uboot_to_ram  或relocate   设置好栈            //stack_setup   跳转到第二阶段代码入口  //ldrpc, _start_armboot   //阶段二(C语言)   初始化本阶段使用的硬件设备  //lib_arm/board.c/start_armboot  -> init_sequence   搬移内核到内存     //common/main.c  main_loop -> getenv ("bootcmd")  bootdelay >= 0 && s && !abortboot (bootdelay)) 下的 run_command (bootcmd)   运行内核}

1 0
原创粉丝点击