- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《嵌入式操作系统作业模版0
嵌入式操作系统作业
摘要:随着ARM技术的广泛应用, 建立基于ARM构架的嵌入式操作系统已成为当前研究的热点。本文结合实例论述了基于ARM9核的微处理器上的嵌入式Linux 操作系统的移植技术, 讨论了uClinux内核的移植过程中内核代码裁剪,介绍了移植uClinux 的基本实现过程。
关键词:ARM 嵌入式操作系统移植 Linux
1. 前言
目前, 在嵌入式系统里基于ARM核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用, 建立面向ARM构架的嵌入式操作系统也就成为当前研究的热点问题。在众多的嵌入式操作系统里, 开发人员选择比较多的是Linux , 这是因为它公开源代码, 可以让任何人将其修改移植到自己的目标平台系统里使用。ARM Linux 支持包括ARM7、ARM9、StrongARM等系列的ARM处理器, 这些ARM处理器都带有内存管理单元(MMU) , 而对于不带有内存管理单元的CPU , 一般采用uClinux 作为其操作系统。本文就是根据实际项目,研究如何将uClinux内核(使用的uClinux版本:2.4.18)移植到ARM构架的目标平台上。
2. 目标平台介绍
本文讨论的嵌入式目标平台采用的是大唐微电子科技有限公司开发的基于ARM946E核的COMIP嵌入式处理器,COMIP内部集成了LCD控制器,支持SRAM、SDRAM和FLASH等多样大容量外部存储器。本文所用平台在系统统一编址空间里经重映射后的地址空间分配为:SRAM位于0 ~ 0FLASH位于0~ 0SDRAM位于0~ 0其中FLASH地址烧写了Bootloader、uClinux kernel以及Jffs2文件系统。
3. uClinux移植分析
3.1 uClinux启动的Bootloader介绍
uClinux的Bootloader有许多开源代码,如Blob、Redboot、U-boot等,Bootloader有以下功能:
1. 禁止所有中断;
2. 设置存储器参数;
3. 设置GPIO参数;
4. 设置处理器的时钟,初始化各个模式下寄存器与堆栈;
5. 使能I catch ,D catch;
6. 跳转到c代码,初始化串口,设置uClinux启动参数;
7. 然后跳转到uClinux的内核启动地址。
3.2 uClinux启动参数
uClinux启动可以在Bootloader中输入相应的启动参数,启动参数放入SDRAM中固定的地址,以方便uClinux在启动过程中取得相应的地址的数据,并解释执行。启动参数的定义在:linux/include/asm/setup.h。
Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表以标记 ATAG_CORE 开始,以标记 ATAG_NONE 结束。每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来组成。数据结构 tag 和 tag_header 定义在 Linux 内核源码的include/asm/setup.h 头文件中。
在嵌入式 Linux 系统中,通常需要由 Bootloader 设置的常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等。
Linux 内核在启动时可以以命令行参数的形式来接收信息,利用这一点我们可以向内核提供那些内核不能自己检测的硬件参数信息,或者重载(override)内核自己检测到的信息。
3.3 uClinux内核自解压过程
处理器在经过Bootloader初始化后,跳转到uClinux的内核起始地址。一般uClinux有两个入口的说法,一个就是Head.S(本版本为head-comip.S),另一个是head-armv.S的,其实真正的入口是head-armv.S。这是由于uClinux编译完成后有两个版本,一个是.ram版本,一个是.rom版本,.rom版本是uClinux可执行文件的压缩版本,.ram为未压缩版本。Head.S为.rom版本的入口地址,head-armv.S为.ram版本的入口地址。
head.S可以说属于Bootloader的范畴,主要功能是初始化自解压所需要的空间,获得内核解压后的首地址ZRELADDR;然后调用decompress_kernel,(该函数也有初始化串口,提供串口的输入输出的函数,在include/ asm-armnommu/arch-comip/uncompresse.c中定义),在该函数中调用gunzip(),对系统压
文档评论(0)