Linux实现与分析.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档