打印
[ZLG-ARM]

长篇连载--arm linux演艺---第三回 (转)

[复制链接]
1261|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
amazelove|  楼主 | 2009-3-24 18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
长篇连载--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(" DBMX1 Linux Bootloader ver 0.2.0 "); 
  EUARTputString("Copyright (C) 2002 Motorola Ltd. "); 
  EUARTputString((U8 *)cmdLine); 
  EUARTputString(" "); 
  
  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,小弟着也是不得已而为之啊。 
  
  今天太晚了,回去睡觉了。。。 

相关帖子

沙发
qingfengyishi| | 2009-3-25 19:44 | 只看该作者

楼主贴满,

楼主贴满,要不看起来麻烦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

36

帖子

0

粉丝