新闻  |   论坛  |   博客  |   在线研讨会
armlinux演艺---第三回
tongxin | 2009-04-13 17:44:54    阅读:737   发布文章

下面让我们看看bootloader的c代码干了些什么。main函数比较长,让我们分段慢慢看。
%A
%A int main()
%A {
%A U32 *pSource, *pDestin, count;
%A U8 countDown, bootOption;
%A U32 delayCount;
%A U32 fileSize, i;
%A char c;
%A char *pCmdLine;
%A char *pMem;
%A
%A init(); //初始化FLASH控制器和CPU时钟
%A
%A EUARTinit(); //串口初始化
%A EUARTputString("
%A
%A DBMX1 linux Bootloader ver 0.2.0
%A ");
%A EUARTputString("Copyright (C) 2002 Motorola Ltd.
%A
%A ");
%A EUARTputString((U8 *)cmdLine);
%A EUARTputString("
%A
%A ");
%A
%A EUARTputString("Press any key for alternate boot-up options ... ");
%A
%A 小弟的bootloader主要干这么几件事:init(); 初始化硬件,打印一些信息和提供一些操作选项:
%A 0. Program bootloader image
%A 1. Program kernel image
%A 2. Program root-disk image
%A 3. Download kernel and boot from RAM
%A 4. Download kernel and boot with ver 0.1.x bootloader format
%A 5. Boot a ver0.1.x kernel
%A 6. Boot with a different command line
%A
%A 也就是说,可以在bootloader里选择重新下载kernel,rootdisk并写入flash,
%A 下载的方法是用usb连接,10m的rootdisk也就刷的一下。关于usb下载的讨论请参看先前的贴子“为arm开发平台增加usb下载接口“。
%A 如果不选,直接回车,就开始把整个linux的内核拷贝到SDRAM中运行。
%A
%A 列位看官,可能有人要问,在flashloader中不是已经初始化过sdram控制器了吗?怎么init(); 中还要初始化呢,各位有所不知,小弟用的是syncflash,
%A 可以直接使用sdram控制器的接口,切记:在flash中运行的代码是不能初始化连接flash的sdram控制器的,不然绝对死掉了。所以,当程序在flash中运行的时候,去初始化sdram,而现在在sdram中运行,可放心大胆地初始化flash了,主要是设定字宽,行列延时,因为缺省都是最大的。
%A
%A 另外,如果列位看官的cpu有足够的片内ram,完全可以先把bootloader放在片内ram,干完一切后再跳到LINUX,小弟着也是不得已而为之啊。
%A
%A 今天太晚了,回去睡觉了。。。
%A
%A%A
%A

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客