基于ARM的嵌入式Linux操作系统移植的研究.pdf

上传人:asd****56 文档编号:70343282 上传时间:2023-01-19 格式:PDF 页数:4 大小:220.72KB
返回 下载 相关 举报
基于ARM的嵌入式Linux操作系统移植的研究.pdf_第1页
第1页 / 共4页
基于ARM的嵌入式Linux操作系统移植的研究.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《基于ARM的嵌入式Linux操作系统移植的研究.pdf》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式Linux操作系统移植的研究.pdf(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、http:/ 基于基于ARM的嵌入式的嵌入式Linux操作系统移植的研究操作系统移植的研究 刘名博,邓中亮 北京邮电大学电子工程学院(100876)E-mail:摘摘 要要:随着ARM技术的广泛应用,建立基于ARM构架的嵌入式操作系统已成为当前研究的热点。本文结合实例论述了基于ARM9核的微处理器上的嵌入式Linux 操作系统的移植技术,讨论了uClinux内核的移植过程中内核代码裁剪,介绍了移植uClinux 的基本实现过程。关键词关键词:ARM 嵌入式操作系统 移植 Linux 1.前言前言 目前,在嵌入式系统里基于ARM核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用,建立面向

2、ARM构架的嵌入式操作系统也就成为当前研究的热点问题。在众多的嵌入式操作系统里,开发人员选择比较多的是Linux,这是因为它公开源代码,可以让任何人将其修改移植到自己的目标平台系统里使用。ARM Linux 支持包括ARM7、ARM9、StrongARM等系列的ARM处理器,这些ARM处理器都带有内存管理单元(MMU),而对于不带有内存管理单元的CPU,一般采用uClinux 作为其操作系统。本文就是根据实际项目,研究如何将uClinux内核(使用的uClinux版本:2.4.18)移植到ARM构架的目标平台上。2.目标平台介绍目标平台介绍 本文讨论的嵌入式目标平台采用的是大唐微电子科技有限公

3、司开发的基于 ARM946E核的COMIP嵌入式处理器,COMIP内部集成了LCD控制器,支持SRAM、SDRAM和FLASH等多样大容量外部存储器。本文所用平台在系统统一编址空间里经重映射后的地址空间分配为:SRAM 位于 0 0 x00080000,FLASH 位于 0 x02000000 0 x02200000,SDRAM 位于0 x08000000 0 x08800000。其中 FLASH 地址烧写了 Bootloader、uClinux kernel 以及 Jffs2文件系统。3.uClinux 移植分析移植分析 3.1 uClinux 启动的启动的 Bootloader 介绍介绍

4、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 在启动过程

5、中取得相应的地址的数据,并解释执行。启动参数的定义在:linux/include/asm/setup.h。-1-http:/ Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表以标记 ATAG_CORE 开始,以标记 ATAG_NONE 结束。每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来组成。数据结构 tag 和 tag_header 定义在 Linux 内核源码的include/asm/setup.h 头文件中。在嵌入式 Linux 系统中,通常需要由 Bootloader 设置的常见启动参数

6、有: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

7、-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/uncompress

8、e.c 中定义),在该函数中调用 gunzip(),对系统压缩内核解压,解压的内核地址放在 ZRELADDR 上。最后跳转到 ZRELADDR 的地址区,开始真正的 uClinux 内核启动过程。3.4 uClinux 内核裁剪内核裁剪 前面的内容介绍了移植 uClinux 一些基本原理和准备工作,然而 uClinux 移植需要更改与添加的内容比较复杂,具体要修改的文件查看表 1。其中如何将 COMIP 处理器的支持加入到 uClinux 中是成功移植 uClinux 到 COMIP 平台的关键。表 1 部分内核源代码修改列表 路径与文件(以下都在/linux-2.4.x下)修改内容/arch

9、/armnommu/config.in 添加 COMIP 芯片的定义/arch/armnommu/Makefile 添加 comip 芯片的运行地址的定义/arch/armnommu/tools/mach-types 添加 comip 的芯片与体系结构标识的定义/arch/armnommu/mm/proc-arm6,7.S 添加 comip 芯片硬件信息到系统支持的芯片列表当中,以及相关信息/arch/armnommu/kernel/entry-armv.S 添加 comip 检测中断源的宏定义/arch/armnommu/mach-comip 该目录定义了 uClinux 对 comip 芯

10、片结构的支持/include/asm-armnommu/arch-comip 该目录定义了 uClinux 对 comip 芯片板级体系结构的支持/drivers/block/blkmem.c 增加 comip 芯片的 romfs 的支持/arch/armnommu/boot/Makefile 自解压的相关存储器的定义/arch/armnommu/boot/compressed/Makefile添加 head-comip.S 到编译链表中/drivers/char/tty_io.c 添加 console 的初始化程序,在 start_kernel 中能调用到/include/asm/proc

11、更改 Vector_base()为 0 用户通过改写各个文件目录的config.in与Makefile文件可以将新的源文件添加到uClinux的系统中1。(config.in为系统的配置文档,主要是配置相关的宏定义、系统信息等等,这样在Makefile中根据这些宏定义来决定编译连接那些程序3。至于uClinux如何规定代码,数-2-http:/ 据映象的地址分配,可以参考linuxarcharmnommuvmlinux.lds4。4.uClinux 内核启动内核启动 4.1 内核启动入口内核启动入口 head-armv.S 为 uClinux 内核启动的真正入口函数,这段汇编代码很短,程序过程

12、如下:1.设定当前程序状态,禁止 FIQ、IRQ 进入 SVC 模式;2.清空 BSS 段;3.判断保存 processor 类型与 Architecture 类型;4.跳转到 start_kerenel。4.2 内核启动流程内核启动流程 系统初始化执行flashloader,初始化SDRAM,复制Bootloader到SDRAM开始执行Bootloader,复制核映象到SDRAM,传递根盘地址参数给内核内核解压,启动,寻找根盘文件系统加载到嵌入式系统上结束对uClinux内核修改编译通过后,用FLASH 烧写工具依次将Bootloader、内核以及根盘文件系统(Jffs2文件系统)烧写到FL

13、ASH 里。然后就可以启动系统了。内核启动的流程如图1 所示2。首先,系统上电复位后,根据系统设置,系统程序计数器(PC)指针先指向 SRAM 的地址 0 处,完成必要的系统初始化。然后,PC 跳转到 FLASH 的零地址,也就是 0 x02000000 处,执行 FLASH 开始处的flashloader 代码,完成系统 SDRAM 的初始化工作,然后将后面的 Bootloader 代码复制到 SDRAM 的零地址,也就是 0 x08000000 处。然后将 PC 指针再次跳转到 0 x08000000,在 SDRAM 存储器内部执行Bootloader,内核加载代码。采用在 SDRAM 内

14、而不在 FLASH 内执行 Bootloader 的原因是在 SDRAM 内执行代码程序速度比在 FLASH 内快很多,有利于加快系统启动速度。接下来 Bootloader 所做的工作就是从 FLASH 里把压缩的内核映象复制到 SDRAM 内,并且图 1 uClinux 启动过程 把根盘文件系统所在地址参数传递给内核。内核复制到 SDRAM 之后,进行内核解压,执行内核启动。内核启动过程中根据 Bootloader 传递过来的地址参数去寻找根盘文件系统,将其加载到嵌入式系统上。这样,整个 uClinux 被引导启动起来,进入正常工作状态。5.结束语结束语 本文根据COMIP目标平台,分析了如

15、何将uClinux 移植到ARM9构建的嵌入式系统上的主要技术和基本流程,掌握这些移植的技术和流程,对于开发嵌入式系统是十分重要的。目前已经成功移植uClinux到COMIP目标平台,并能顺利启动和稳定运行。参考文献参考文献 1 Daniel P.Bovet,Understanding the Linux Kernel(2nd Edition)M.OReilly,2002.2 刘峥嵘 等编著.嵌入式Linux 应用开发详解M.北京:机械工业出版社,2004.7.3 王学龙 编著.嵌入式 Linux 系统设计与应用M.北京:清华大学出版社,2001.8.4 李明.ARMLinux 的移植过程及分

16、析J.电子设计应用,2003.7.-3-http:/ The Reseach of Porting Embedded Linux Operating System Based on ARM Liu Mingbo,Deng Zhongliang School of Electronic&Engineering,Beijing Univ.of Post&Telecom.,Beijing,100876 Abstract With the applications of ARM technique,building the embedded oprating system based on ARM p

17、rocessor has been a hotpoint of research.In this paper,porting technique of embedded Linux operating system based on ARM is discussed And how to construct the uClinux kernel for special processor and the porting process on the special hardware platform are also introduced.Keywords:ARM embedded oprating system porting Linux 作者简介:作者简介:刘名博,硕士研究生,主要从事嵌入式系统的研究;邓中亮,教授,博士生导师,主要从事智能通信和嵌入式系统的研究。-4-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com