第二阶段是start_armboot
其实这个函数是定义在u-boot-1.3.4\lib_arm\board.c
他的作用是初始化,这初始化跟第一阶段的不一样,第一阶段的初始化主要是比较低层的,面现在已经建立起C的运行环境,所以可以初始化一点其它函数
这里主要初始化的是
主要定义在init_fnc_t*init_sequence[]这个指针数组里(注,参考《ARM79出口-u-boot移植手册》)
1、 cpu_init 定义在cpu\arm920t里,并没有做实质性的工作,因为笔者现在还没有定义CONFIG_USE_IRQ所以,代码来到这,直接return0
2、 board_init 定义在开发板.c里,笔者这是GT2440.c。它主要的工作是初始化系统时钟,引脚IO设置,使能数据cache和指令cache,考虑到板子可能会发生意外中断,还初始化了中断,下一步就初始化中断
3、 interrupt_init 这实际上是定时器的中断初始化。定义在cpu\arm920t\s3c24x0\Interrupts.c里
4、 env_init 环境初始化。在u-boot-1.3.4\common\env_nand.c里
5、 init_baudrate 用于初始化波特率
6、 serial_init 用于初始化串口,定义在u-boot-1.3.4\cpu\arm920t\s3c24x0\serial.c里
7、 console_init_f 作用是告诉编译器,笔者目前是使用串口的,
8、 display_banner 串口初始化完成,所以就可以打印信息,成功后,就可以不用点灯大法,可以使用串口输出来调试了
9、 print_cpuinfo 可选
10、 checkboard 可选,后面还有几个选的,就不说了
初始化完这些函数后,就进入其它函数
flash_init()。定义在…\board\gt2440(开发板目录,以后就不打了)\flash.c,它是负责显示你的nor flash有多大,然后用后面的函数display_flash_config显示它。当你打开它,会发现这里兼容AMD的芯片,如果你的不是AMD的就要修改flash ID号了
如何修改?先在这作简单介绍
就是在gt2440.h原本定义#define CONFIG_AMD_LV800 1屏蔽掉
然后定义自己的
#define CONFIG_SST_VF1601 1
后面再修改FLASH_BANK_SIZE、CFG_MAX_FLASH_SECT
但是由于sstnor操作是不相同的,所以就需要修改board/gt2440/flash.c
mem_malloc_init() 初始化内存,非常关键,要把这块区域清零,以便后续来使用它。
后面几个就是什么LCD、VFD之类的先不理它
到了nand_init()了,这里的话,涉及到后面讲的是使用在gt2440.c里定义的nand_init()还是uboot自带的,就要靠几个宏定义,现在先放一放,知道这里是初始化nand的就可以了。
然后是什么打印环境变量,开中断,还有一个有关网卡的函数,笔者使用的是cs8900所以直接用它自带的,如果读者的是dm9000或者其它,就应该自己写了后替换它,推荐使用宏。最后面,一系列之后,到了main_loop()。Uboot执行完成