启动流程

1、 Stage1

start.S代码结构 u-boot的stage1代码通常放在start.S文件中,用汇编语言,主要实现功能如下:

(1) 定义入口: 该工作通过修改连接器脚本来完成。

(2)设置异常向量(Exception Vector)。

(3)设置CPU的速度、时钟频率及终端控制寄存器。

(4)初始化内存控制器。

(5)将ROM中的程序复制到RAM中。

(6)初始化堆栈。

(7)转到RAM中执行,该工作可使用指令ldr pc来完成。

bl lowlevel_init跳转到arm926ejs里面的spl.c

2、Stage2

C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作:

(1)调用一系列的初始化函数。

(2)初始化Flash设备。

(3)初始化系统内存分配函数。

(4)如果目标系统拥有NAND设备,则初始化NAND设备。

(5)如果目标系统有显示设备,则初始化该类设备。

//LCM

(6)初始化相关网络设备,填写IP、MAC地址等。

(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

u-boot\arch\arm\cpu\armv7\start.S
.globl _start
_start: b reset
… …
jump_2_ram:
… …
_board_init_r_ofs:
.word board_init_r - _start    //调用 uboot/arch/arm/lib/ board.c 是C 语言开始的函数也是整个启动代码中C语言的主函数,进入Stage2

u-boot\arch\arm\lib\board.c

一、初始化硬件

board_init_r() (u-boot15/arch/arm/board.c)
————>board_init()(sl8541e_1h10.c)
————>stdio_init()
————>drv_lcd_init() (common/lcd.c)

最新文章

  1. IOS开发基础知识--碎片41
  2. Tomcat8.0.21登录时忘记用户名和密码
  3. thinkphp-1
  4. ylbtech-dbs:ylbtech-3,BarCode(条码资源系统)
  5. WIN7建立网络映射磁盘
  6. linux驱动(一)
  7. JQuery的stop()属性
  8. Cxf -wsdl2java 使用参数介绍
  9. zuoye
  10. Selenium+Python ---- 免登录
  11. UC手机浏览器js加入收藏夹
  12. Learning-Python【17】:包的导入使用
  13. C++中的智能指针
  14. POJ 3974 - Palindrome - [字符串hash+二分]
  15. piwik获取访客头像,自定义显示访问者头像(URL)和描述(标题和替代)
  16. Ionic命令大全
  17. 有关C++的数据类型(int,long,short,float,double等等)
  18. 批量 1 insert into select 2 sqldataadapter.update 3 SELECT INTO FROM (要求目标表不存在) 4 AddRange(ef) 5 MySqlBulkLoader.Load() 6 BatchInsert 7 insert bulk
  19. RAID磁盘阵列的原理与搭建
  20. Problem B. Market(market.c/cpp/pas)

热门文章

  1. Vmware上安装Linux(centos7)图文教程
  2. 爬虫之 App 爬取
  3. JVM源码分析-JVM源码编译与调试
  4. 程序的健壮性Robustness
  5. GO异常 | runnerw.exe: CreateProcess failed with error 21
  6. js的new操作符深度解析
  7. Linux如何运行和停止jar包
  8. 《快乐编程大本营》java语言训练班 1课:第一个java程序:你好,范冰冰;
  9. PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)
  10. Java使用自定义类加载器实现热部署