中国Linux公社论坛's Archiver

limingth 发表于 2005-5-24 23:31

Learn lumit Step 3 : 系统初始化流程

Learn lumit Step 3 : 系统初始化流程 跟着启动代码走
++++++++++++++++++++++++++++++++++++++++++++++++++++++

    一般板子买回来的时候都是带一个启动代码 bootloader ,负责初始化系统,
通过串口建立开发板和 PC 主机之间通信的桥梁。大多数嵌入式开发学习者都是
从学习 bootloader 命令开始的,就和买 PC 电脑的开机之后主板的 BIOS 一样,
很少有机会去了解系统从第一条指令开始究竟做了哪些事情。

    lumit 网站上也提供了一个 bootloader 源码,这是一个支持 tftp 网络下载
的 bootloader 。和很多其他的启动代码类似,在系统执行 bootloader 的过程中,
必须完成如下的几个重大任务:

1) 初始化 SDRAM ,建立堆栈环境,为跳转到 C 语言代码的入口做好准备。
2) 初始化 UART ,建立目标板和调试主机之间的通信。
3) 实现一个基于串口输入的命令解释器,提供一些基本的用户命令。

    其实 bootloader 初始化的任务还有很多,但我觉得这三个任务是比较重大的。
这里结合 lumit4510 的代码,我给出了一个经过简化的 bootloader ( l-boot ) ,
只包含了 startup.s 和 main.c 两个程序,一个是汇编代码,一个是 C 语言入口。
可以很直观的看出,系统运行到 C 语言之前,需要经过哪些必要的初始化步骤。

ResetEntry
    |
    ++++ SYS_RST_HANDLER
                |  
                ++++ InitSystem
                         |
                         ++++ InitMemory
                                   |
                ++++++++++++++++++++  
                |         
                ++++ Copy ROM to RAM
                |
                ++++ Set up SVC stack
                |
                ++++ Remap Memory
                |
                ++++ Goto main ( in main.c )

    进入 C 语言 main.c 中的代码就比较容易理解了,主要是汇编程序不太好看,
不过 startup.s 一共只有 200 多行的代码,怎么看也都懂了。

chw75 发表于 2005-7-6 15:55

由于ARM汇编不懂,特请教各位大侠以下有关step 3中startup.s的一些代码:
-----------------------------------------------------------------------------
(1)
ldr        r1, =SDRAM_ITF :OR: SFR_BASE<<16 :OR: SRAM_BASE<<6 :OR: CACHE_ALL :OR: CACHE_EN       
请问:OR:是不是表示或运算?

(2) RamEndAddr        EQU                &200       
请问&200是不是表示地址200的内容?

(3)IMPORT        |Image$$RO$$Base|        ; ROM code start
BaseOfROM        DCD        |Image$$RO$$Base|
请问$$和||表示什么意思??
用DCD在此处到底有什么用处??
__________________________________________

hellokilly 发表于 2005-9-5 17:34

ResetEntry
|
++++ SYS_RST_HANDLER
|
++++ InitSystem
|
++++ InitMemory
|
++++++++++++++++++++
|
++++ Copy ROM to RAM
|
++++ Set up SVC stack
|
++++ Remap Memory
|
++++ Goto main ( in main.c )
上面那些东西是什么意思呀???

lanair04 发表于 2005-9-5 20:37

提个问题,下载的Learn-lumit-step3这个文件用winrar解压以后再用什么工具打开呀,我怎么打不开呀??

limingth 发表于 2005-9-6 09:14

把后缀名改成 zip 文件再试试看,好像以前也有人碰到这种问题。

quietstone 发表于 2005-12-6 12:46

我也遇到这样的问题,直接点击链接保存下载下来的文件是打不开,但在链接处点击右键另存为就OK了。

rootlinger 发表于 2005-12-15 08:44

IMPORT |Image$$RO$$Base| ; ROM code start
BaseOfROM DCD |Image$$RO$$Base|
请问$$和||表示什么意思??

limingth 发表于 2005-12-16 12:24

这个是arm链接器编译器内部的特殊变量,可以查看 ads 安装目录下的 pdf 文档,里面 linkguide 那个文档里面有详细说明。  :lol:

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.