U-boot启动问题问答

{//?上电系统从哪里开始,启动代码放在什么位置 
	  上电后,有的系统可通过硬件管脚的电平来选择从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
   跳转到第二阶段代码入口  //ldr	pc, _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)
   运行内核
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值