原创 S3C2450 Bootloader调试总结之一

2010-5-23 20:24 2425 6 6 分类: MCU/ 嵌入式
S3C2450 Bootloader调试总结之一






S3C2450的整个Bootloader包括四个部分:


1):Eboot.Whimory


2):NBL1.IROM_SD


3):NBL1.LSB


4):NBL2


实现功能:生成三个有用的文件:block0img.nb0,Eboot.nb0/Eboot.bin,以及IROM_SD_EBOOT.nb0。其中前两个文件用于烧到NAND的前几个block,用于初始化整个系统的环境,以及引导NK。最后面的IROM_SD_EBOOT.nb0文件,是将第二个Eboot.nb0/Eboot.bin文件打包得到的文件,用于烧写到SD卡中,从SD卡启动。下面针对前面的四个文件逐一说明。


一:NBL2


该文件用于生成block0img.nb0。用于完成如下功能:


1):初始化硬件配置,如堆栈,中断向量表,MMU等。


2):将后面生成的Eboot.bin文件拷备到DRAM中。


3):打印部分串口信息,表示系统已经启动。


4):初始化显示设备,输出开机LOGO但此时背光没点亮,故肉眼是看不清有开机LOGO显示的。


5):初始化NAND FLASH


6):跳转到拷备Eboot.bin的地址,执行Eboot程序。


注:执行此段代码的前提是,开机必须是从NAND启动的。之所以从SD卡启动时会白屏一下,就是因为从SD卡启动并没有执行这一段代码,即先点亮了背光,再初始化显示设备。如果从T卡启动,这段代码没有任何作用。


二:NBL1.LSB


此段代码个人觉得没有任何用处,应该可以直接删除。将该段屏蔽掉后,仍然能从SD卡启动,但是由于从NAND启动需要跳线,没做相关实验。但是block0img.nb0Eboot.bin两个文件已经生成。


三:Eboot.Whimory


整个Bootloader最关键的部分就是这一块了。该部分用于产生Eboot.binEboot.nb0文件。


主函数中由三个函数组成:


1):powerlock_init();


用于软置锁,开机后通过IO口给电源的使能脚供电,保证系统正常供电。


2):BootloaderMain();


整个bootloader的最关键的函数。下面将重点介绍。


3):SpinForever();


这个函数是不会执行的,在执行第二个函数后,就会跳到NK的地址启动系统了。如果执行到这个函数,那系统肯定就挂在Eboot这里了。

下面主要看BootloaderMain()这个函数。

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条