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 多行的代码,怎么看也都懂了。 由于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在此处到底有什么用处??
__________________________________________ ResetEntry
|
++++ SYS_RST_HANDLER
|
++++ InitSystem
|
++++ InitMemory
|
++++++++++++++++++++
|
++++ Copy ROM to RAM
|
++++ Set up SVC stack
|
++++ Remap Memory
|
++++ Goto main ( in main.c )
上面那些东西是什么意思呀??? 提个问题,下载的Learn-lumit-step3这个文件用winrar解压以后再用什么工具打开呀,我怎么打不开呀?? 把后缀名改成 zip 文件再试试看,好像以前也有人碰到这种问题。 我也遇到这样的问题,直接点击链接保存下载下来的文件是打不开,但在链接处点击右键另存为就OK了。 IMPORT |Image$$RO$$Base| ; ROM code start
BaseOfROM DCD |Image$$RO$$Base|
请问$$和||表示什么意思?? 这个是arm链接器编译器内部的特殊变量,可以查看 ads 安装目录下的 pdf 文档,里面 linkguide 那个文档里面有详细说明。:lol:
页:
[1]