Cstyle的札记:从Uboot开始,第0篇

        由于之前断断续续到看过一些相关到东西,但是年代久远,基本上忘记得只剩下一些基本到概念了,所以还是google了一下,找到了不少好东西,分享下链接。http://blog.csdn.net/zsy2020314?viewmode=contents这里有博主写到关于Uboot到不少心得体会,包括makefile语法,精简code和移植到新平台,当做是一个参考。
    Uboot的架构默认所关掉中断,使用查询到方式来实现整个的框架,有点类似UEFI。分为两个部分stag1和stag2。通常第一阶段完成cpu的最基本到初始化,比如关掉看门狗,关中断,时钟设置,内存初始化,堆栈,cache,把第二阶段到代码复制到第一阶段初始化好的内存当中,跳到第二阶段到C代码当中去,有点像SECore和PEIcore。第二阶段一般用来初始化本阶段需要用到的cpu外设,比如网卡,串口,读取os镜像和根文件系统到内存,设在内核启动参数,引导OS等,有点像所DXEcore和BDS。
    ​调用ARM linux前必须满足到条件:
R0=0
R1=机器类型ID,linux/arch/arm/tools/mach-types
R2=启动参数在内存中的位置
CPU禁止中断(IRQ,FIQ)
CPU工作在SVC模式
cache 关闭
MMU关闭

    ​完成了上面到步骤之后,我还需用uboot来构造一个数据结构(标记列表)来记录当前到内存到地址,启动命令等信息,uboot在把控制权交给os之前会先填这些数据结构,把数据结构到地址放在R2寄存器当中,OS接管之后,会从这里读取系统到相关信息,引导内核。这一点有点像E820 table,也有点像UEFI当中的systemtable里面记录到各种HOB,总之这些就是为OS提供一些基本到硬件信息。


转载请注明出处
[email protected]  //   http://blog.csdn.net/CStyle_0x007

你可能感兴趣的:(Cstyle的札记:从Uboot开始,第0篇)