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.nb0和Eboot.bin两个文件已经生成。

三:Eboot.Whimory

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

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

1):powerlock_init();

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

2):BootloaderMain();

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

3):SpinForever();

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

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

整个函数代码如下:


从以上程序可以看出,整个BootloaderMain()函数由五大函数组成,分别是:

1):KernelRelocate (pTOC);

用于将全局变量在DRAM中声明。

2):OEMDebugInit ();

用于初始化串口,给后续代码提供串口打印信息,便于调试。

3):OEMPlatformInit ();

用于初始化硬件平台,如时钟,驱动等。

该函数通过如下子函数完成各硬件平台的初始化:

A:memset():

初始化BSP args结构;

B:InitUSB();

初始化USB接口;

C:Isr_Init();

初始化中断;

D:BP_Init();

初始化Nand Flash;

E:InitDisplay();

初始化显示设备;

F:ShowLogo();

显示logo;

G:FMD_GetInfo();

读Flash信息;

H:TOC_Read();

读TOC信息;

I:OEMEthGetSecs();

读取当前时间,进行5秒倒计时;同时在这5秒的时间内检测是否有回车或空格键按下,如果回车,则运行NK。如果空格,则进入USB下载的菜单。

J:backlight_open();

亮背光。

以上是OEMPlatformInit ()函数的作用,具体每一句如何执行,每个函数是如何工作的,限于篇幅,这里就不详细介绍了。

 

4):OEMPreDownload ();

该函数用于判断程序是下载映像还是引导映像。执行完该函数后,将根据函数的返回值选择。程序通过一个switch语句完成。

5):DownloadImage()或OEMLaunch() 函数;

在步骤4中,如果返回值是BL_DOWNLOAD,则执行DownloadImage()函数,用于下载映像。如果返回值是BL_JUMP,则执行OEMLaunch() 函数,用于引导映像,最终启动系统。程序执行到OEMLaunch()后,整个bootloader也就完成任务了。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/ymzhou117/archive/2010/03/05/5349751.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值