(韦东山毕业班视频)
一、移植 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阶段的代码