- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
向嵌入式Linux移植实时设备驱动程序
向嵌入式Linux移植实时设备驱动程序
发布时间:2006.09.28 05:00???? 来源:赛迪网技术社区????作者:Bill Weinberg Linux暴风雨般地占领了嵌入式系统市场。根据工业分析家分析,大约1/3到1/2的新的32位和64位嵌入式系统设计采用了Linux。嵌入式 Linux 已经在很多应用领域显示出优势,比如SOHO家庭网络和成像/多功能外设,并在以下几方面具备巨大的跨越式发展前景:(NAS/SAN)存储,家庭数字娱乐(HDTV/PVR/DVR/STB)和手持设备/无线设备,特别是数字移动电话。
新的嵌入式Linux应用不会象掌握在智慧和工艺之神-罗神手中那样,会突然从开发者的头脑中爆发出来。大量的项目必须采用数千行的,甚至数百万行的过去的现成代码。成百上千的嵌入式项目已经成功地将其它平台的现成代码移植到Linux之上,比如Wind River VxWorks 和 pSOS, VRTX, Nucleus 和其它RTOS ,这些移植工作现在仍然有价值和现实意义。
到目前为止,大多数的关于移植旧的RTOS应用到嵌入式Linux的文献,已经在关注RTOS 接口(API),任务,调度模式和怎样将他们映射到相应的用户空间去。 在嵌入式程序的密集I/O空间中,同样重要的是,将RTOS的应用硬件接口代码向具有更加规范化模式的Linux设备启动程序的移植。
本文将纵览几种常用的内存映射I/O方法,它们经常出现于旧的嵌入式应用中。它们涵盖的范围,包括从对中断服务例程的特殊使用和用户线程对硬件访问,到出现于有些ROTS中的半规范化驱动程序模型。它对于移植RTOS 代码到规范化模式的Linux设备启动程序具有启发性,并且介绍了一些方法。特别地,本文会重点讨论和比较RTOS代码中的内存映射,Linux基于I/O调度队列的移植,和重新定义RTOS I/O,以便在本地Linux 驱动程序和守护进程里应用。
RTOS I/O 概念
“不规范”是能够描述大多数在基于RTOS系统里的I/O的最佳词语。大多数RTOS针对较早的无MMU的CPU而设计,忽略了内存管理,即使当MMU问世也是这样,不区分物理地址和逻辑地址。大多数 RTOS还全部在特权态(系统模式)运行,表面上看增强了性能。像这样,全部的RTOS 应用和系统代码都能够访问整个机器地址空间,内存映射设备和I/O指令。实际上,将RTOS应用程序代码同驱动程序代码区分开非常困难,即使它们是有差别的。
这个不规范的结构导致了I/O的特殊实现。在很多情况下,完全缺乏对一种设备驱动程序模型的认同。根据这种工作的平等和没有分层的特性,回顾在基于RTOS软件中使用的一些重要概念和实践非常有指导意义。
在线内存映射访问
当在上个世纪八十年代中期商业化的RTOS产品可以买到的时候,大多数嵌入式软件包含巨大的主循环,主循环带有针对严格时间操作的注册I/O和中断服务例程。开发人员将RTOS和执行程序设计进他们的项目,主要为了加强同时性和帮助多任务同步,但是避开其它任何有“妨碍“的构造。同样地,即使一个RTOS提供了I/O 调用形式方法,嵌入式程序员继续使用直接的I/O操作:
#define DATA_REGISTER 0xF00000F5
char getchar(void) {
return (*((char *) DATA_REGISTER)); /* read from port */
}
void putchar(char c) {
*((char *) DATA_REGISTER) = c; /* write to port */
}
多数受过训练的开发者常常将这样的直接I/O代码从硬件代码独立分离开。但是我还曾遇见大量的意大利面条式的I/O处理代码。 当普遍深入使用直接内存映射I/O的时候,对Linux开始接触的嵌入式开发人员总是面临将所有的这类代码移植到用户空间,将定义寄存器地址的#define 语句转换成mmap()调用。 这种处理方法对于一些种类的原型很好,但是不能支持中断处理,限制了实时响应,特别不安全,不适合作为商业发布。
RTOS 中断服务例程
在 Linux中, 中断服务专属于内核的范围。 在一个 RTOS中, 中断服务例程代码是自由形态而且与应用程序代码没有区别(不外乎返回序列)。很多 RTOS提供系统调用或者宏,来让代码自己检测它自己的切换点(比如 Wind River VxWorks的 intContext())。中断服务例程通常也使用标准的库函数,伴随着可重入性和可移植性问题。大多数RTOS支持注册中断服务例程代码,中断仲裁句柄和中断服务例程调度。一些非常原始的嵌入式执行程序,仅仅支持在硬件矢量表里插入中断服务例程的开始地址
您可能关注的文档
最近下载
- 《机械装调技术》电子教案 模块五 整机调试与运行任务一 齿轮啮合齿侧间隙的检测与调整.doc VIP
- 青花瓷 完美演奏版 周杰伦 钢琴谱 数字 简谱.pdf VIP
- 第38届物理竞赛决赛实验考试答题纸 .pdf VIP
- 现代医药物流交易的配送中心建设项目可行性研究报告.doc VIP
- 2025-2026学年初中生物学人教版2024八年级上册-人教版2024教学设计合集.docx
- 养生馆卫生管理制度(3篇).docx
- 健康管理师课件第一章--健康管理概论.ppt VIP
- JBT 4333.4-2013 厢式压滤机和板框压滤机 第4部分:隔膜滤板.pdf VIP
- 电信反诈骗演讲稿模板5篇.docx VIP
- 基于光纤布拉格光栅的温度测量系统设计与应用.docx VIP
文档评论(0)