首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于mini2440 的 bootloader 设计 ---- 6、C程序运行环境搭建

基于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 程序中。
返回列表