Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439269
  • 博文数量: 63
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 1204
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 11:33
文章分类
文章存档

2015年(1)

2014年(3)

2013年(7)

2012年(52)

分类: WINDOWS

2012-04-19 12:23:54

在CPU上电的时候,ARM会首先从地址零开始运行。这里,我们将2410的0x30000000开始的SDRAM映射到地址0x00000000,然后从这里开始运行程序。

在任何操作系统的启动代码中,首先要确定pc的值,在这里我们将pc的赋值定义在start.s文件中(ARM共有七种中断方式,分别为复位、未定义、软件中断、预取中止、数据终止、IRQ、FIQ,另外还有一个保留的,每一种中断都有自己的起始地址,这些都在start.s中说明);关于复位的具体实现我们写在init.s中,主要实现个模式下堆栈的定义以及bss段的定义,进一步实现mmu、clock、memory、irq、io等的初始化(这些都在boot.c中),最后跳入我们应用程序的入口;其他中断的实现我们都写在了abnormal.s中。从而实现了操作系统的启动。

总之,操作系统的启动过程就是先设置pc的值,在进行个方面的初始化。

其实在写这段程序的过程中,我自己也遇到了很多问题,比如好多的宏定义和下划线,一不小心就少写了一个字母或者一个下划线,使得程序出错又很难找到错误。以后的学习中,一定要心细。

阅读(1022) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~