基于mini2440 的 bootloader 设计 ---- 6、C程序运行环境搭建
- UID
- 1066743
|
基于mini2440 的 bootloader 设计 ---- 6、C程序运行环境搭建
开发环境:
电脑系统:RedHat Enterprise Linux6 kernel version : linux-2.6.32
交叉工具链:arm-linux-xxx4.3.2
开发板版本:mini2440 S3C2440处理器 64M SDRAM 256M nand flash
根据设计好的Bootloader 启动流程,在完成了内存的初始化之后,就要进行C程序运行环境的搭建。
一、背景知识:
所谓的C程序的运行环境,其实就是指C程序运行时所需要的栈和bss段。因此本文的工作就是完成栈的设置以及bss段的清除。
C 程序局部变量的保存和函数调用时环境的保存都使用到栈。
这里需要注意的是ARM处理器的栈的特点是:满降栈.所谓的满栈是指:栈顶指针sp指向的地址存有数据,而空栈是指栈顶指针指向的地址没有数据。降栈是指:栈的增长方向为由高向底增长。当然升栈的定义就可以猜到了。
而对于bss段,我们在链接器脚本中已经将bss段的起始和结束地址分别记录在了bss_start 和bss_end这两个标号中了。因此bss段的清除就是将这两个标号之间的空间全部清除为零即可。
栈设置的原因很明确,但是为什么要清除bss段呢?事实上,bss段主要存储一些未初始化的全局变量。为了避免应用程序使用一个未赋值的全局变量带来的严重灾难,系统一般会事先将整个bss段清零。在这里,我们作为系统管理者,当然要完成这一重大的任务。
二、代码实现:
设置栈区和清除bss段的工作实际上超简单的,至少从代码实现的角度来看是这样的,但是要注意的是CPU不同模式下的栈区是不同的。因此我们要在不同的模式下设置该模式下的栈区。
设置好栈区和bss段,就可以运行C程序了,因此下一步我们就要从汇编代码跳转到C 程序中。 |
|
|
|
|
|