Uboot

来源:互联网 发布:网络机顶盒会被禁止吗 编辑:程序博客网 时间:2024/04/26 07:07
Uboot极度依赖于硬件。系统上电后执行,初始化硬件设备,准备好软件环境(如c环境),最后调用操作系统内核。
关闭看门狗,关闭外部中断,设置系统的时钟,初始化存储器的内存,将更多的代码的复制到内存,尤其是将内核的代码复制到内存。
同时其还具备串口,网口,网络功能,解压缩功能。最终的产品中并不需要这些功能(这些功能将会由内核提供),只是为了开发方便。


Bootloader的启动方式:
芯片上电后,ARM结构cpu默认从0x0地址开始执行(其他芯片可能不是),在开发板中,需要将Flash(ROM)的地址映射到这个地址。BootLoader正好放在这个地方,
这样一上电,bootloader就会被执行。然后将内核复制到内存(有些是直接在norflash上运行),然后在固定的地方(环境变量区)将参数传递给内核,运行内核,内核启动以后,就会挂接(mount)根文件系统(root filesystem),再启动应用程序。


关于uboot与内核的交互参数(环境参数):    比如ip地址,串口的波特率,要传递给内核的启动命令。




Bootloader 两段:
第一段: 汇编语言,cpu体系架构的初始化
1,硬件设备的初始化: 刚开始可能是使用慢时钟,关闭看门狗中断,关闭所有外部中断,设置好cpu时钟,进入管理模式,初始化好RAM(sdram);
2,为第二阶段准备ram空间,尤其是定好堆栈空间(C运行环境)
3,复制第二阶段的代码到ram空间
4,跳到第二阶段代码的c入口。 
第二阶段: 
5, 继续初始化好一切其他的需要的硬件设备(C语言下使用函数指针初始化)
6,检测处理好内存映射(确定板上有几块flash,容量多大,全局地址设定在那里,多大ram ,地址在那里,全局地址可以根据板子的情况直接设置)
7,将内核和根文件系统映像从flash读到ram (内核映像如果经过压缩,需要进一步解压缩,Uboot添加了gzip解压函数,有些内核具备自解压功能),文件系统是否需要复制到ram需要看文件系统的类型(ramdisk /jffs2)
8,为内核设置好启动参数
9,调用内核 ( 程序直接跳到内核入口)






Uboot 常用命令: 


flinfo 
loadb 
cp 
md 
mw
erase // flash 擦除
boot // 启动内核命令
tftp命令
原创粉丝点击