Embedded 版 (精华区)
发信人: snows (花自飘零水自流), 信区: Embedded
标 题: 长篇连载--arm linux演艺---第三回
发信站: 哈工大紫丁香 (2004年03月16日12:47:42 星期二), 站内信件
ZZ
长篇连载--arm linux演艺---第三回
-------------------------------------------------------------------------------
-
书接上回:
下面让我们看看bootloader的c代码干了些什么。main函数比较长,让我们分段慢慢看。
int main()
{
U32 *pSource, *pDestin, count;
U8 countDown, bootOption;
U32 delayCount;
U32 fileSize, i;
char c;
char *pCmdLine;
char *pMem;
init(); //初始化FLASH控制器和CPU时钟
EUARTinit(); //串口初始化
EUARTputString("\n\nDBMX1 Linux Bootloader ver 0.2.0\n");
EUARTputString("Copyright (C) 2002 Motorola Ltd.\n\n");
EUARTputString((U8 *)cmdLine);
EUARTputString("\n\n");
EUARTputString("Press any key for alternate boot-up options ... ");
小弟的bootloader主要干这么几件事:init(); 初始化硬件,打印一些信息和提供一些操作
选项:
0. Program bootloader image
1. Program kernel image
2. Program root-disk image
3. Download kernel and boot from RAM
4. Download kernel and boot with ver 0.1.x bootloader format
5. Boot a ver0.1.x kernel
6. Boot with a different command line
也就是说,可以在bootloader里选择重新下载kernel,rootdisk并写入flash,
下载的方法是用usb连接,10m的rootdisk也就刷的一下。关于usb下载的讨论请参看先前的
贴子“为arm开发平台增加usb下载接口“。
如果不选,直接回车,就开始把整个linux的内 拷贝到SDRAM中运行。
列位看官,可能有人要问,在flashloader中不是已经初始化过sdram控制器了吗?怎么
init(); 中还要初始化呢,各位有所不知,小弟用的是syncflash,
可以直接使用sdram控制器的接口,切记:在flash中运行的代码是不能初始化连接flash的
sdram控制器的,不然绝对死掉了。所以,当程序在flash中运行的时候,去初始化sdram,?
现在在sdram中运行,可放心大胆地初始化flash了,主要是设定字宽,行列延时,因为缺?
都是最大的。
另外,如果列位看官的cpu有足够的片内ram,完全可以先把bootloader放在片内ram,干完
一切后再跳到LINUX,小弟着也是不得已而为之啊。
今天太晚了,回去睡觉了。。。
--
-
╭────────────────────────────╮
│ 风萧传瑟声,叶落根深处,青阶入野无归途,他乡不知顾 │
│ 泣下问和谁,叹者行已暮,寒眉傲骨今尚在,奈何入凡土 │
╰────────────────────────────╯
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.154]
※ 修改:·snows 於 03月16日12:56:19 修改本文·[FROM: 202.118.229.154]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.158毫秒