[ZLG-ARM] 长篇连载--arm linux演艺---第三回 (转)

[复制链接]
2177|1
 楼主| amazelove 发表于 2009-3-24 18:40 | 显示全部楼层 |阅读模式
长篇连载--arm&nbsp;linux演艺---第三回&nbsp;<br />  --------------------------------------------------------------------------------&nbsp;<br />  <br />  书接上回:&nbsp;<br />  <br />  下面让我们看看bootloader的c代码干了些什么。<br />main函数比较长,让我们分段慢慢看。&nbsp;<br />  <br />  int&nbsp;main()&nbsp;<br />  {&nbsp;<br />  U32&nbsp;*pSource,&nbsp;*pDestin,&nbsp;count;&nbsp;<br />  U8&nbsp;countDown,&nbsp;bootOption;&nbsp;<br />  U32&nbsp;delayCount;&nbsp;<br />  U32&nbsp;fileSize,&nbsp;i;&nbsp;<br />  char&nbsp;c;&nbsp;<br />  char&nbsp;*pCmdLine;&nbsp;<br />  char&nbsp;*pMem;&nbsp;<br />  <br />  init();&nbsp;//初始化FLASH控制器和CPU时钟&nbsp;<br />  <br />  EUARTinit();&nbsp;//串口初始化&nbsp;<br />  EUARTputString(&quot;

DBMX1&nbsp;Linux&nbsp;Bootloader&nbsp;ver&nbsp;0.2.0
&quot;);&nbsp;<br />  EUARTputString(&quot;Copyright&nbsp;(C)&nbsp;2002&nbsp;Motorola&nbsp;Ltd.

&quot;);&nbsp;<br />  EUARTputString((U8&nbsp;*)cmdLine);&nbsp;<br />  EUARTputString(&quot;

&quot;);&nbsp;<br />  <br />  EUARTputString(&quot;Press&nbsp;any&nbsp;key&nbsp;for&nbsp;alternate&nbsp;boot-up&nbsp;options&nbsp;...&nbsp;&quot;);&nbsp;<br />  <br />  小弟的bootloader主要干这么几件事:init();&nbsp;初始化硬件,打印一些信息和提供一些操作选项:&nbsp;<br />  0.&nbsp;Program&nbsp;bootloader&nbsp;image&nbsp;<br />  1.&nbsp;Program&nbsp;kernel&nbsp;image&nbsp;<br />  2.&nbsp;Program&nbsp;root-disk&nbsp;image&nbsp;<br />  3.&nbsp;Download&nbsp;kernel&nbsp;and&nbsp;boot&nbsp;from&nbsp;RAM&nbsp;<br />  4.&nbsp;Download&nbsp;kernel&nbsp;and&nbsp;boot&nbsp;with&nbsp;ver&nbsp;0.1.x&nbsp;bootloader&nbsp;format&nbsp;<br />  5.&nbsp;Boot&nbsp;a&nbsp;ver0.1.x&nbsp;kernel&nbsp;<br />  6.&nbsp;Boot&nbsp;with&nbsp;a&nbsp;different&nbsp;command&nbsp;line&nbsp;<br />  <br />  也就是说,可以在bootloader里选择重新下载kernel,rootdisk并写入flash,&nbsp;<br />  下载的方法是用usb连接,10m的rootdisk也就刷的一下。关于usb下载的讨论请参看先前的贴子“为arm开发平台增加usb下载接口“。&nbsp;<br />  假如不选,直接回车,就开始把整个linux的内核拷贝到SDRAM中运行。&nbsp;<br />  <br />  列位看官,可能有人要问,在flashloader中不是已经初始化过sdram控制器了吗?怎么init();&nbsp;中还要初始化呢,各位有所不知,小弟用的是syncflash,&nbsp;<br />  可以直接使用sdram控制器的接口,切记:在flash中运行的代码是不能初始化连接flash的sdram控制器的,不然绝对死掉了。所以,当程序在flash中运行的时候,去初始化sdram,而现在在sdram中运行,可放心大胆地初始化flash了,主要是设定字宽,行列延时,因为缺省都是最大的。&nbsp;<br />  <br />  另外,假如列位看官的cpu有足够的片内ram,完全可以先把bootloader放在片内ram,干完一切后再跳到LINUX,小弟着也是不得已而为之啊。&nbsp;<br />  <br />  今天太晚了,回去睡觉了。。。&nbsp;<br />
qingfengyishi 发表于 2009-3-25 19:44 | 显示全部楼层

楼主贴满,

楼主贴满,要不看起来麻烦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部