新闻中心

EEPW首页>嵌入式系统>设计应用> 向嵌入式Linux移植设备程序

向嵌入式Linux移植设备程序

作者: 时间:2016-10-08 来源:网络 收藏

将RTOSI/O映射进Linux

上面描述的基于队列的生产/消费I/O模型,仅仅是很多种在传统设计中所采用的特别方法之一。让我们继续用这个直接的例子,来讨论几种在嵌入式Linux下的实现:

大规模移植到用户空间

对于勉强了解Linux设备驱动设计细节,或者非常匆忙的开发者,可能将大多数这样基于队列设计程序完整无缺地移植到用户空间。在这种驱动程序映射配置中,内存映射的物理I/O口通过函数mmap()提供的指针可以在用户空间操作。

#include

#defineREG_SIZE0x4/*deviceregistersize*/

#defineREG_OFFSET0xFA400000

/*physicaladdressofdevice*/

void*mem_ptr;/*de-referenceformemory-mappedaccess*/

intfd;

fd=open(/dev/mem,O_RDWR);/*openphysicalmemory(mustberoot)*/

mem_ptr=mmap((void*)0x0,REG_AREA_SIZE,PROT_READ+PROT_WRITE,

MAP_SHARED,fd,REG_OFFSET);

/*actualcalltommap()*/

一个基于进程的用户线程进行与基于RTOS的中断服务例程或者延时任务一样的操作,然后使用SVR4进程间通信函数msgsnd()将消息放进队列,等待被另一个本地线程或者另一个进程利用函数msgrcv()来获取。这种快速”脏的”处理方法是好的原型,同时对于建立可发布型代码带来了巨大的挑战。首先重要的是需要在用户空间扫描中断。象DOS仿真(DOSEMU)项目提供基于信号的带SIG(Silly中断发生器)中断I/O,但是用户空间的中断处理过程非常慢(毫秒量级中断延时,所替代的基于内核的中断服务例程中断延时为数十微秒)。更进一步讲,在用户空间的切换调度不能保证用户空间的I/O线程100%的及时执行,即使采用可抢占Linux内核和实时调度策略。


上一页 1 2 下一页

关键词:

评论


相关推荐

技术专区

关闭