没有合适的资源?快使用搜索试试~ 我知道了~
首页GEC2440的BIOS分析.pdf
资源详情
资源评论
资源推荐
jbb0523(彬彬有礼) ARM 与 OS 入门系列文档
GEC2440 的 BIOS 分析
作者:jbb0523(彬彬有礼)
一、 前言
1、 我的基础
我较为系统的学习过 AVR 单片机各种外设的应用,使用过一次 Philips 公司的 ARM 处理器
LPC2131 移植 uC/OS-II,对于 TI 公司的 TMS320C54X 系列 DSP 仅有小于入门级别的了解,
对于操作系统底层驱动程序相关知识基础基本为零。
2、 读懂本文档需要的基础
1) 基本掌握 ARM 指令集汇编指令及常用伪指令的使用;
2) 基本了解 S3C2440 的以下模块:NAND FLASH 控制器、时钟、GPIO、PWM 定时器;
3) 基本了解 NAND FLASH 和 SDRAM 的概念;
3、 启动代码详细解释参见以下帖子,比我讲的详细,本文档重点讲解 BIOS 引导过程:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3992018&bbs_page_no=1&bbs_id=1032
4、忠告:知识是不能拿来卖弄的,学如逆水行舟,不进则退;可以参考单片机学习过程去
学习 ARM,但不能把思维固定在单片机上,记住:这是 ARM!!!
二 、 启 动 代码 start.s 分析
1、 ADS 下相关设置
1) 打开 BIOS 工程,点击设置按扭,如下图所示:
2)点击 ARM Linker——Output 选项卡需设置以下选项:
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
jbb0523(彬彬有礼) ARM 与 OS 入门系列文档
则在运行域中 RW 段也紧跟在 RO 段后面;
2) |Image$$RO$$Limit|、|Image$$RW$$Limit|、|Image$$RO$$Base| 、|Image$$ZI$$Limit|
四个值增由编译器自动计算所得;
3) 此工程分段比较简单,如果更为复杂则需分散加载机制;
3、在以上 ARM Linker——Layout 设置中,Section 框内设置为 SelfBoot,这里需根据
相关启动代码中设置,在启动代码中有“AREA SelfBoot, CODE, READONLY ”,Section
中所设置的 SelfBoot 即由此代码中的 SelfBoot 而来,即代码的入口。
4、启动代码中有如下宏定义:
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
这里是根据 S3C2440 手册中设置的:
5、启动代码中各种模式堆栈的大小是根据需要设置的,初学者不必深究!
6、启动代码根据 ADS 设置,将从 SelfBoot 代码段开始执行,从 ENTRY 进入,前面一
系列判断不占用存储空间,“ b ResetHandler ”将从首地址开始存储,即 0X00 地址,其
次为“b HandlerUndef”指令,由于 ARM 指令每条指令占四个字节,故本指令将存储在
0X04、0X05、0X06 和 0X07 四个地址,以此类推,注意此顺序不能改变,见手册中如下:
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
jbb0523(彬彬有礼) ARM 与 OS 入门系列文档
当发生相应中断时,将由 ARM 内部硬件机制自动跳转到相应地址执行,如上电或复位时,
将跳到 0X0000 0000 开始执行;即上电后,启动代码将从 SelfBoot 段开始执行,在编译时根
据前面几句判断应该用哪一种编译方式进行编译,而这几句代码不会生成到代码映象.bin 文
件中,然后执行“ b ResetHandler ”,即跳转到 ResetHandler 处,中间的代码暂不执行,
等待调用(个人认为相当于 C 语言中的函数吧), 然 后 依 次 执 行 , 其 中 部 分代码可能由于跳
转指令会跳过,一直执行到“bl Main”,跳转的 C 语言中的 Main 函数运行,此语句后面的
代码是为前面的代码服务的,一部分是子函数供前面代码调用,一部分是数据池;
7、CPU 是采用的 NAND FLASH 启动,而 S3C2440 有专门的 NAND FLASH 控制器,
因些它不占用 BANK 空间;NAND FLASH 采用非线性存储,代码不能在其内运行,因此需
要将其复制到 RAM 中;上电启动时,CPU 自动将 NAND FLASH 中的前 4K 代码复制到内
部 4K 的 SRAM 中,因此在这前 4K 代码中需有将代码从 NAND FLASH 复制到 SDRAM 中
的操作,这个过程要用代码实现,CPU 不会自动执行!在《附录:start.s 简要讲解》的第
12 条中即是这个拷贝过程;按我现在的认识,只需按要求将外部 NAND FLASH 和 SDRAM
接在 CPU 上即可访问,尤其是 SDRAM 只要按要求接线即可按地址访问,不需填代码(这
是目前认识水平,不知对否), 而 NAND FLASH 可以按访问时序进行访问;
8、细心的人可能发现这里的主函数叫 Main,而不是平时我们所见的 main,这两个是
有区别的,main 是编译器的函数,执行它前会执行自动执行一些其它操作,而 Main 是我们
自已定义的主函数,当然可以定义成其它的,只要在 start.s 最的的“bl Main”语句中相
应更改即可!
9、本启动代码中从 NAND FLASH 中向 SDRAM 默认拷贝了 128KB 的代码,
至于为什么要拷贝 128KB,我还不是很明白,个人理解这是一个最大值问题,即我们拷贝
足够的代码到 SDRAM 中;NAND FLASH 也是分区使用的,这个下面详细解释;还有就是
我们如何保证从 NAND FLASH 向 SDRAM 中拷贝代码的操作能在前 4K 代码中,这个问题
我还有点儿模糊。
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
剩余46页未读,继续阅读
jbb0523
- 粉丝: 5278
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0