码迷,mamicode.com
首页 > 其他好文 > 详细

【系统移植】U_BOOT移植

时间:2015-01-01 00:15:00      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

U-BOOT移植

                       Bootloader引导启动


技术分享

 

0x0000_0000 0x0000_8000 32KB IROM

0x0002_0000 0x0003_8000 96KB IRAM

0x0003_4000 0x0003_8000 16KB BL1

 

The boot loader is divided into the BL0( 1st boot loader) and the BL1(2nd boot loader).  

?    BL0 which is placed in iROM loads BL1 from the booting device to iRAM. The booting device is determined by  

     the OM and NFMOD pins. In addition, according to the secure boot key values, BL0 checks the integrity of  BL1.  

?    BL1 should initializes the DRAM controller. After initializing the DRAM controller, it loads the OS image from  

     the booting device to DRAM. And, according to the secure boot key values, BL1 checks the integrity of the OS image.  


-对于bootloader的引导内核启动大致可以分为以下几个步骤来实现的:

 

1)在系统reset或者上电的时候,CPUPC指针会默认指向物理地址的0x0000-0000处取指译码执行,而此处的物理地址表示的硬件是处理器的片内IROM,由于IROM存储器具有存储并执行代码的功能,它固化了一段引导代码(BL0),这段代码决定了以什么方式启动,一般的启动方式有USB/NAND FLASH 等,BL0找到启动引导代码之后,由于NAND FLASH不支持片上执行,于是BL0会把BL1的引导代码载入片内的IRAM,在上面看到IRAM的存储空间是96KB但是只留了0x34000 - 0x38000 16KB存储空间给BL1引导启动,如果系统的启动和引导代码的大小小于16KB的时候,BL1引导代码不会自搬移,直接完成了bootloader的引导内核的启动

 

2)但是一般情况下,都不会有那么理想的引导方式,此时在BL1的引导代码中,在IRAM执行中会自搬移到DRAM中,此时会有疑问,当BL1搬移到DRAM后的在IRAM中执行过的代码会不会再次被重复执行,(答案是不会的,在u_boot启动的代码中通过比较运行地址和连接地址的比较)当执行BL1的代码时,u_boot会对系统的相关硬件初始化,初始化系统时钟,关看门狗,以及初始化栈空间和清BSS段以及创建异常向量表,在这里由于内核启动时要求关内存管理单元以及关相应的D_CACHEI_CACHEDLL

 

3)还有最后也是最重要的就是在u_boot把内核的镜像zImage加载到物理地址的0x20008000中还有一些内核启动时初始化内存管理以及内核线程运行的一些环境都被BL1存放在地址的0x200000100param_struct 结构体中,当内核起来的时候回去调用这些参数

 

4)其实在内核起来的时候运行还需要根文件系统rootfs,在这之前u_boot固化的方式或者通过nfs网络共享的方式提供给内核。

 

 

【系统移植】U_BOOT移植

标签:

原文地址:http://blog.csdn.net/cj_kano/article/details/42304901

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!