《嵌入式Linux系统构建和移植若干共性技术研究.pdf》由会员分享,可在线阅读,更多相关《嵌入式Linux系统构建和移植若干共性技术研究.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 162 计算机测量与控制.2005.13 2 ComputerM easurement&Control 设计与应用收稿日期!2004-11-14 修回日期!2004-12-24 基金项目!国家自然科学基金资助项目 60374016 广州市科技攻关重点计划项目 2003Z2-D9011 作者简介!张燕忠 1979-男 硕士研究生 主要研究嵌入式Linux系统及其移植 文件系统等 文章编号!1671-459S#2005$02-0162-03 中图分类号!TP316 文献标识码!A嵌入式Linux系统构建和移植若干共性技术研究张燕忠,蔡妍艳 华南理工大学 自动化科学与工程学院 广东 广州 5106
2、40 摘要!分析了Linux操作系统的特点及其在嵌入式系统应用领域的优势 针对嵌入式Linux操作系统的构建和移植过程中的启动代码的移植 文件系统的选择与移植 实时性扩展等若干共性技术难题 提出了解决问题的方法和程序设计的基本框架 关键词!嵌入式Linux 移植 共性技术S tudy of Some Common technology on the design andtransplantation of embedded Linux Operating SystemZhang Yanzhong Cai Yanyan College of Automation Science and Engi
3、neering South China University of Technology Guangzhou 510640 China Abstract A i m ing at some common technologies such as boot loader filesyste m real ti me extend during design and transplantation ofe mbedded Linux operating syste m the characteristics of Linux OS and it s advantages on the applic
4、ations of e mbedded syste m are first ana-lyzed then propose some approaches and basic progra mm ing fra mework to sole the proble ms.Key words Embedded Linux OS Transplantation Common Technology0 引言嵌入式系统是以应用为中心 以计算机技术为基础 软件硬件可裁剪 符合应用系统对功能 可靠性 成本 体积 功耗的严格要求的专用计算机系统 1 在以计算机技术 通讯技术相结合的信息时代快速发展和互联网广泛应用
5、的形势下 嵌入式系统在计算机 通信 消费电子产品等领域的应用越来越广泛 而其开发平台却受到很大限制 很多还是限制在单片机上 虽然单片机以其价格低 性能好等特点得到广泛应用 但是基于单片机处理器的嵌入式系统存在程序开发周期长 调试难 产品扩展能力低等缺点 这种简单的嵌入式系统没有操作系统 通常都是用一个简单的循环控制对外界的控制请求进行处理 这对一些简单的系统而言已经足够了 但是 随着控制系统复杂度的提高和应用领域的不断拓宽 开发嵌入式操作系统已经成为大势所趋 嵌入式操作系统可以让开发人员不必关心太多底层硬件细节 达到程序调试简易 移植性强 易维护的目的 同时缩短产品的开发周期 目前市场上有很多
6、优秀商业专用实时操作系统 如Vx-W orks pSOS Nucleus Plus和W indows CE等 这些操作系统大部分都是为专用系统而开发 且使用者必须支付高额版权费用 近年来 Linux操作系统作为一股新生势力得到了迅猛发展 Linux支持广泛的硬件平台 具有真正的32位处理能力 能真正实现多任务 多用户环境 具有很好的硬件兼容性和软件可裁剪性 是一个成熟 稳定的现代操作系统 Linux操作系统是一个免费 开放源代码的操作系统 用户可以免费获得Linux源代码 针对不同的应用场合对系统进行定制 改造 使Linux系统性能更强 更稳定 尽管Linux开始是作为PC计算机体系结构的操作
7、系统 但是现在已经有了非XS6 CPU的版本 带或不带内存控制单元 包括Power-PC ARM M IPS M 6S K甚至是微控制器 这些针对微处理器的嵌入式Linux操作系统正在逐渐发展壮大 但同时也存在一些问题 本文将针对嵌入式Linux操作系统在不同处理器平台上的构建和移植过程中的启动代码 文件系统 实时性扩展等共性技术问题进行探讨 此处只对单处理器系统进行讨论 多处理器情况将在其它文章中进行论述 1 启动代码的移植从软件角度来看 一个嵌入式Linux系统通常由引导加载程序 Linux内核 文件系统和应用程序构成 有时还会在内核层和应用程序层之间增加一个图形用户界面层 其中 启动代码
8、负责系统硬件初始化和操作系统内核加载工作 引导加载程序是计算机系统上电后运行的第一段代码 系统加电或复位后 所有CPU通常都在CPU制造商预先安排的固定地址上取指令 在PC体 系 结 构 中 PC机 从 固 定 地 址FFFF 0000处运行代码 这段代码为BI OS 基本输入输出系统 固件程序 它主要完成硬件自检和资源分配的任务 并将硬盘的引导扇区读入到基本内存地址0 x7C00处 然后跳转到此处开始执行此处的引导扇区代码 2 但是在嵌入式系统中 图1 固态存储设备存储空间典型结构图通常没有BI OS之类的固件程序 也没有使用硬盘作为存储介质 取而代之的是某种类型的固态存储设备 如ROM E
9、EPROM 第2期张燕忠9 等C嵌入式Linux系统构建和移植若干共性技术研究 163 FLASH等 9 通过硬件连线将固态存储介质的地址和CPU预先安排的地址对应起来9 并在该地址处安排系统的Boot Load-er程序和内核的启动参数内核映像和根文件系统 固态存储设备存储空间分配的一个典型例子如图1所示 不同CPU体系结构有不同的Boot Loader9 除了CPU体系结构之外9Boot Loader还和嵌入式系统的硬件板级配置有密切关系 两个不同嵌入式硬件系统9 即使采用相同CPU9要使引导其中一个系统的Boot Loader以能在另一个系统上工作9 通常也需要进行代码移植 通常情况下9
10、Boot Loader可以分为stage1和stage2两部分9 其中stage1代码为CPU结构相关代码9 一般使用汇编语言实现9 具有短小精悍的特点 stage2代码通常用C语言来实现9 这样可以实现复杂的功能9 而且代码会具有更好的可读性和可移植性 尽管不同CPU和硬件板下Boot Loader代码会有所不同9 但它的工作流程一般如图2所示 图2 Boot Loader的工作流程图图2中9stage1的基本硬件初始化主要完成CPU频率时钟频率RAM空间等初始化工作 设置堆栈指针是为执行stage2的C代码做准备 进入stage2之后9 就要设置好某个硬件端口9 如串口网卡接口等9 目标板
11、将通过该端口向宿主机打印初始化信息9并建立交互环境 在配备大容量固态存储空间的目标系统中9可以通过烧写器将内核和根文件系统映像直接写到固态存储芯片中9 并通过Boot Loader将它们复制到内存上运行;相反9如果目标系统没有配备足够大固态存储空间9 则需要通过该阶段初始化的端口将内核和根文件系统下载到内存上9 在这种情况下9 还需要Boot Loader实现相应端口的通信协议代码9 如Srecord协议ftp协议等 32位处理器系统中的物理地址空间可达4GB9 虽然CPU通常预留出足够地址空间给系统RAM9 但在构建实际嵌入式系统 时9 通 常 只 实 现 其 中 一 部 分RAM地 址 空
12、 间 因 此9stage2的代码中还要对系统实际占用的内存地址空间进行检测9 并将 检 测 结果作为启动 参 数 传 给 内 核 启 动 参 数 对 于Linux内核启动是必不可少的 不同CPU架构9 内核启动参数的传递方式有所不同 对于PowerPC体系结构的系统而言9内核启动时是把R6寄存器的内容作为内核启动参数的起始地址9 把R7寄存器的内容作为结束地址9 因此9 内核启动参数的传递过程就是设置启动参数的起始地址和结束地址9 并把它们保存到R6R7寄存器中 而ARM体系结构是通过标记列表 形式来传递内核启动参数的 XS6体系结构的目标系统中9 则采用固定内存区域的方式传递启动参数 对于使
13、用bzI mage方式的内核而言9 内核命令行参数位于绝对地址0 x99000到0 x990FF之间 经过图2前面的各个步骤之后9Boot Loader跳转到内核入口处9 由内核执行CPU寄存器中断初始化建立页表等工作9 最后执行相应应用程序 2 文件系统在现代计算机系统中9 程序和数据一般都是以文件的形式存储9 因此必须实现将这些文件映射到实际物理存储空间9 并提供相应操作接口9 这就是文件系统 文件系统为用户提供结构化格式存储和检索信息的方法9 负责文件存取共享的管理9 保证数据的安全性和一致性3 许多嵌入式系统没有磁盘或者文件系统9Linux没有它们同样可以正常运行 在这种情况下9 应用
14、程序代码必须整合到内核中9 与内核一起编译并在系统引导时作为一个映像文件加载 显然9 这种系统的灵活性比较差9 只能满足一些功能比较简单的嵌入式系统的要求 事实上9 许多商业嵌入式操作系统都提供了文件系统支持 在嵌入式系统中9 一般采用Flash为存储介质9 程序运行的方式有两种C一种是直接在Flash上运行;另一种是先把代码保存在Flash中9 然后由启动代码将内核和根文件系统复制到内存上运行 Ext2是Linux事实上的标准文件系统9 具有稳定性好可靠性高健壮性强等特点 但是Ext2是针对像硬盘那样的块存储设备所设计9 基于扇区擦除/写操作管理不完善9 也不支持损耗平衡 由于Flash存储
15、设备擦除寿命有限9Ext2文件系统不适合代码直接在Flash上运行的方式 JFFS2是专门针对以Flash作为存储介质的嵌入式系统设计的文件系统9 它提供的扇区级别上Flash设备擦除读写操作性能比Ext2文件系统好9 而且具有崩溃/掉电保护功能 在Linux系统中9 对Flash设备的读写擦除等操作是通过调用MTD子系统提供的接口实现 MTD子系统由用户模块核心模块和硬件驱动模块三个部分组成 用户模块只需要通过MTD核心模块提供的字符设备或块设备方式来访问MTD抽象设备 MTD核心模块是作为操作系统核心子模块之一来实现9 它为各种Flash存储设备定义了一个抽象的MTD设备结构9 并将用户层
16、的具体操作与实际硬件设备驱动模块联系起来 硬件驱动模块实现MTD抽象设备结构定义的设备方法9 并实现某种特定Flash设备的访问控制 在嵌入式系统移植过程中9 文件系统的移植工作主要集中在硬件驱动模块部分 开发者可以通过在kernel/drivers/mtd/maps目录下添加驱动模块文件实现对硬件系统Flash设备的文件系统支持 在添加的驱动模块文件中9 必须实现对应的读写擦除等设备方法9 并建立相应struct mtdpartition结构 在模块初始化阶段必须对Flash的存储空间进行映射探测等工作 当然9 要使编写的文件驱动模块起作用9 还需要重新编译内核以获得内核的支持3 在Linu
17、x系统正常运行过程中9 会运行一些守护进程9 这 164 计算机测量与控制 第13 卷些守护进程会产生很多日志消息 对于程序代码在Flash设备上运行的方式 频繁地将这些日志信息写到Flash中会降低系统性能 t mpfs为日志文件提供了解决方案 t mpfs是基于内存的文件系统 因此读 写 擦除等操作发生在RAM中而不是在Flash设备中 读 写速度几乎是瞬时完成 t mpfs唯一的缺点就是当系统重新引导时会丢失所有数据 此外 cra mfs是一个实现高度压缩的文件系统 它是Linus Torvalds本人开发的一个适用于嵌入式系统的小文件系统 它是一个只读文件系统 随机读取的效率非常高 非
18、常适合于存储空间要求严格的嵌入式系统 3 实时性扩展!4实时性是指系统的正确性不仅依赖于计算的逻辑结果 还依赖于结果产生的时机 对于超出规定时限的计算机结果 即使逻辑上正确也把它当作出错处理 实时不等于快速 实时系统要求实时任务必须具有可预测性 确定性 实时可以分为 硬实时 和 软实时 前者如果在给定时限内系统没有响应 则会造成灾难性后果 如航空航天系统 后者在不满足响应时限的情况下只是导致系统性能退化 不会造成灾难性后果 Linux本身是一个分时操作系统 它不能用于要求快速响应的硬实时工业控制领域 但由于Linux是免费开放源代码的自由软件 可以通过修改Linux内核源码的方式将Linux改
19、造成一个实时操作系统 还可以利用Linux丰富的外围资源 如网络协议 设备驱动 GUI等 许多机构 组织都对Linux操作系统的实时性进行了研究 其中影响比较大的一个是美国新墨西哥理工学院开发的Linux实时内核 被称为NMT-RTL或RT-Linux 我们可以获得相应内核版本的RT-Linux补丁来对Linux内核进行改造 以获得优秀的实时响应特性 实时操作系统的实时性能由系统对中断请求的响应和中断处理例程的处理效率决定 在Linux操作系统中 中断处理的一般流程为 中断源 中断向量表 中断入口 调用doI R 函数 中断后续处理 转入软中断入口等 3 RT-Linux是在Linux系 统
20、底 层 实 现 的 一 个 精 简 实 时 内 核 它 修 改 了Linux的中断系统 实现了一个高效的中断管理核心 并用一个实时调度程序实现了实时任务之间 实时任务与非实时任务之间的调度 而非实时任务之间的调度工作仍由原来的Linux调度程序完成 架构RT-Linux核心前后系统结构比较如图3所示 图3 架构RT-Linux核心前后系统结构图如图3所示 RT-Linux实时内核截断了Linux内核与中断控制设备之间的直接联系 并将Linux内核当作一个任务 使Linux运行在一个精简的实时操作系统下 只有在没有实时任务运行的情况下 Linux才作为一个非实时任务运行 RT-Linux修改了L
21、inux的中断开关代码 cli和sti 直接接管硬件中断管理 当一个中断到来时 RT-Linux实时内核截获中断 并判别中断类型 如果为实时中断 则唤醒实时中断处理函数 如果不是实时中断 则只是作简单的标记 并把中断处理任务送入等待队列 等到没有实时任务执行并且Linux中断系统开放中断时才执行相应非实时中断服务程序 RT-Linux的调度策略完全基于线程的优先级 高优先级拥有获得CPU时间的高优先权 在Linux和RT-Linux双内核实时操作系统中 如果存在实时线程 则首先调度实时线程 只有在系统中没有实时任务的情况下才调度非实时线程 如果系统有多个实时线程处于就绪状态 系统根据线程优先级
22、决定当前运行哪个线程 如果两个处于就绪状态的多个线程具有相同优先级 那么具体运行哪个线程具有不确定性 对于非实时线程 系统总是选择剩余时间片最多的线程投入运行 当就绪队列中所有线程的时间片为零时 调度程序会重新分配时间片 RT-Linux的应用程序一般分为实时部分和非实时部分 实时任务和非实时任务之间可以通过实时管道 RT-FIFO 和共享内存等方式进行通信 4 结束语Linux作为一种开放源代码的操作系统 以其优越的性能在嵌入式系统应用领域占据了非常广阔的发展空间 将一个Linux系统移植到具体处理器硬件板的嵌入式系统过程中 会涉及到很多问题 本文针对其中的启动代码 文件系统和实时性扩展等共
23、性技术问题进行了论述 以供同行参考 参考文献#1 邹思轶.嵌入式Linux设计与应用 M.北京 清华大学出版社 2002.2 陈莉君.Linux操作系统内核分析 M.北京 人民邮电出版社 2000.3 汤子瀛.计算机操作系统 M.西安 西安电子科技大学出版社 2001.4 www.fs m .下载的RT-Linux开发资料 .上接第150页 64通道的动态数据采集 320通道静态数据采集 不但能够满足一般的机构实验的要求 而且能够制造地震模拟台 在目前国内结构实验中处于前列 图3为促动缸的位移给定 反馈相关图 已经标定 其中灰色虚线为理想相关图 黑色实线为实际相关图 促动缸最大 最小位置给定
24、反馈相差5 mm 促动缸位移的量程为+-125 mm 每一小格代表5 mm 参考文献#1 李刚.TMS320F206 DSP结构 原理及应用 M.北京 北京航空航天大学出版社 2002.2 王占林.液压伺服控制 M.北京 北京航空航天大学出版社 19S7.3 张雄伟 曹铁勇.DSP芯片的原理与开发应用 第二版 M.南京 电子工业出版社 2000.嵌入式Linux系统构建和移植若干共性技术研究嵌入式Linux系统构建和移植若干共性技术研究作者:张燕忠,蔡妍艳,Zhang Yanzhong,Cai Yanyan作者单位:华南理工大学,自动化科学与工程学院,广东,广州,510640刊名:计算机测量与
25、控制英文刊名:COMPUTER MEASUREMENT&CONTROL年,卷(期):2005,13(2)被引用次数:5次 参考文献(4条)参考文献(4条)1.查看详情2.汤子瀛 计算机操作系统 20013.陈莉君 Linux操作系统内核分析 20004.邹思轶 嵌入式Linux设计与应用 2002 引证文献(5条)引证文献(5条)1.温治强.宋跃.李少文.张志坚 基于嵌入式Linux的网络远程视频监控系统期刊论文-计算机测量与控制 2010(2)2.汪俭健.张环.周宗潭.胡德文 基于Qt/Embedded的嵌入式自动掌纹识别系统期刊论文-计算机测量与控制 2009(3)3.杜清珍.杨杰.张鑫 基于嵌入式Web的远程监控系统期刊论文-计算机测量与控制 2008(6)4.沈军涛.郭大江.周文瑾 甚低频遥控水雷的可行性分析与系统设计期刊论文-计算机测量与控制 2006(9)5.王勇.杨勇 嵌入式操作系统Linux的应用移植期刊论文-测控技术 2006(10)本文链接:http:/