1. 刚开始涉及的文件
/arch/arm/arm920t/Start.S
/arch/arm/uboot.lds
uboot.lds标识文件是从start.s文件开始,链接地址是0x00000000.程序一开始是从0x00000000处运行(此处不理解),暂且从0x00000000处分析,假设板子启动后PC=0x00000000,此处会运行start.s里的代码,之后关中断,关看门狗,设置时钟,初始化内存控制器设置栈指针,然后运行到C语言处。关于以上汇编部分的调试,得用反汇编去调试。
C语言部分(Nand_boot.c, Spl.c, Spl_boot.c, board.c这几种启动方式不了解)
board_init_f函数:r8寄存器里存放gd结构体,此函数初始化以及设置gd结构体和bd结构体
然后进入board_init_r函数:初始化各种外围设备,如nand,nor,网卡,串口等等,之后进入main_loop()函数
2. main_loop()函数分析
此处分两种,rk3188启动使用do_booti,而s3c2440使用的是do_bootm,显然rk3188的启动方式是厂商加的。区别是rk3188省去了进入uboot的等待时间,即用户无法对uboot进行打断。而且do_booti是rk3188特地加的。
rk3188实现了启动区与recovery区的功能,方便开发人员实现升级功能。
uboot方面的工作:
涉及uboot启动到内核的调试,升级固件功能(A/B分区,以及留块空闲的flash存放标志信息),uboot下命令行的添加,其余基本不涉及!了解了uboot的启动原理即可!
uboot下的网络通信,一般以tftp,ftp为主
flash的分区,预留一块作为上一次启动的完整信息。