- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux实现与分析.doc
4510B BOOTLOADER/uCLinux实现与分析
一.相关介绍 1
1.Bootloader 的基本任务 1
2. 4510B开发板上的存储介质 1
3.一般程序结构 2
二.实现与分析 2
1.初始化 2
2.Memory Remap的实现: 2
3.Kernel的装载: 2
4.Loadkernel(): 2
三.ADS和源代码相关 2
后记: 2
疑难解答: 2
前段时间,写了一个简单直接的4510B bootloader用来装载uclinux内核。在这篇文档里,我将结合源代码介绍一下4510 Bootloader的实现和分析。源代码很简单很直接,希望对初学的朋友有点帮助。也许在分析中有很多错误,希望大家能够指正,共同进步。Bootloader的实现基于三星4510B,假设开发板上有2M的Flash作为Boot rom,SDRAM的大小是16M。开发环境是ADS1.2。
一.相关介绍
1.Bootloader 的基本任务
Bootloader一般是被烧录或者下载到bootrom的0x0地址处,作为上电后执行的第一部分指令,bootloader需要完成两个任务:(1). memory remap, (2). 把kernel装载到SDRAM里合适的位置上去。在完成这两个任务后,bootloader就“功成身退”了。
下面的讨论都只围绕这两个任务进行。其他跟这两个不相关的东东不在介绍范围之内,相关的东东我都会顺带介绍。
2. 4510B开发板上的存储介质
一块4510B开发板上,一般有三种存储介质:FLASH,SDRAM和4510片内的SRAM。
FLASH一般是只读的(只在运行的时候),而且一般都作为bootrom使用,因为FLASH 里存储的内容在掉电的时候也不会丢失,所以flash很适合作为bootrom,用来保存bootloader。SDRAM,大家应该都很熟悉的,是可读写的存储介质,速度比FLASH快的多,在系统运行的时候,SDRAM是主要的存储介质。但SDRAM里的数据在掉电后即消失,无法用来保存数据。所以每次启动的时候都需要bootloader将内核装重新装载到SDRAM里去。在4510的片内还集成了8k的SRAM,SRAM也是可读写的,一般作为系统的cache使用。
3.一般程序结构
简单来说,一般的可执行程序都包括代码段、数据段和BSS段。也可以简单的看作由两部分组成:RO段和RW段。RO段一般包括代码段和一些常量,在运行的时候是只读的。而RW段包括一些全局变量和静态变量,在运行的时候是可以改变的(读写)。如果有部分全局变量被初始化为零,则RW段里还包括了ZI段。
RO: Read Only
RW: Read Write
ZI: Zero Init
因为RO段是只读的,在运行的时候不可以改变,所以,在运行的时候,RO段可以驻留在Flash里(当然也可以在SDRAM或者SRAM里了)。而RW段是可以读写的,所以,在运行的时候必须被装载到SDRAM或者SRAM里。
在用ADS编译的时候,是需要设置RO BASE 和RW BASE的,用过ADS的应该都清楚这点。通过RO BASE 和RW BASE的设置,告诉链接器(linker)该程序的起始运行地址(RO BASE)和RW段的地址(RW BASE)。如果一个程序只有RO段,没有RW段,那么这个程序可以完全在Flash里运行,不需要用到SDRAM 或者SRAM。如果包括RW段和RO段,那么该程序的RW段必须在被访问以前被拷贝到SDRAM 或者SRAM里去,以保证程序可以正确运行。下面这个图说明了一个程序执行前(load view)和执行时(execute view)的状态。从图中可以看到,整个程序在执行前始放在ROM里的,在执行的时候,RW段被拷贝到了RAM里的合适位置去。
在ADS里,有一些预先定义了的变量可以用(linker defined symbol)。在下面的实现里,用到了几个预定义的变量:
Image$$RO$$Base 该变量指定了RO段的BASE
Image$$RO$$Limit 该变量指定了RO段的Limit
Image$$RW$$Base 该变量指定了RW段的BASE
Image$$RW$$Limit 该变量指定了RW段的Limit
Image$$ZI$$Base 该变量指定了ZI段的BASE
Image$$ZI$$Limit 该变量指定了ZI段的Limit
注:具体可以参考ADS Linker Guide
Image$$RO$$Limit 减Image$$RO$$Base 等于RO段的大小
Image$$RW$$Limit 减Image$$RW$$Base 等于RW段的大小
Ima
您可能关注的文档
- DCS应用中的接地问题22695.doc
- Delphi8Net与SQLServer2000的实际应用(续).doc
- DestructionorTreatmentForm-Apiary:销毁或处理的形式,养蜂场.doc
- DHCP协议的功能及运行方式3.doc
- Dpoayx2011考研农学大纲变化详解:无机及分析化学.doc
- DSA冠状动脉造影在冠状动脉病变诊断中的价值1.doc
- DSP实验九FFT的DSP的实现方法.doc
- DSP数字振动器的移相正弦波发生器设计.doc
- DynamicsimulationsontheArachidonicAcidMetabolicNe:对花生四烯酸代谢网络的动态模拟.doc
- EMI抑制方法分析研究.doc
文档评论(0)