Boot 1.3.4到GT2440(第二版2.0)(2)

第二阶段是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执行完成

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzxyg.html