【Linux 移植 】——2、移植 u-boot-2012.04.01指分析启动过程

时间:2021-10-16 07:46:29

(韦东山毕业班视频)


一、移植 u-boot-2012.04.01指分析启动过程

a、获取源代码:

从 ftp://ftp.denx.de/pub/u-boot/  下载u-boot-2012.04.01.tar.bz2,下载交叉编译链arm-linux-gcc-4.3.2.tar.bz2。


b、将 u-boot-2012.04.01.tar.bz2 解压到 PC 上,并建立 Source Insight 工程。

将 u-boot-2012.04.01.tar.bz2  放到 Ubuntu 上面 进行解压,同时安装 arm-linux-gcc-4.3.2.tar.bz2。


c、建好Source Insight 工程后添加相应文件便可以分析  u-boot-2012.04.01 的启动过程:

根据链接过程,打开 start.S 进行代码分析:

1、设置 CPU 为管理模式 set the cpu to SVC32 mode

2、关看门狗 turn off the watchdog

3、屏蔽中断  mask all IRQs by setting all bits in the INTMR

4、设置分频时钟比例

5、设置内存控制控制器 (CPU 底层初始化)

6、设置栈,调用 C 函数 board_init_f

7、调用函数数组 init_sequence 里的各个函数

7.1 board_early_init_f : 设置系统时钟、设置GPIO

... ...

8、 重定位代码

8.1 从NOR FLASH把代码复制到SDRAM

8.2 程序的链接地址是0,访问全局变量、静态变量、调用函数时是使"基于0地址编译得到的地址"
      现在把程序复制到了SDRAM
      需要修改代码,把"基于0地址编译得到的地址"改为新地址

8.3 程序里有些地址在链接时不能确定,要到运行前才能确定:fixabs

9、clear_bss

10、调用C函数board_init_r:第2阶段的代码