[转]QNX驱动开发-Resource manger framework

141 篇文章 22 订阅
106 篇文章 5 订阅

声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,立即予以改正

如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额0.1元起步,多少随意

锋影

email:174176320@qq.com

 

在QNX下开发驱动程序,最主要的工作除了了解底层硬件具体工作流程外,就是建立一个能与操作系统兼容且支持POSIX的Resource manger框架了。在任何一段程序的执行过程中一段都是从main函数开始的,然而在操作系统中的main函数还传递了两个参数:int argc, char **argv,这两个参数是用来传递从shell命令行或者buildfile中传来对Resource manger具体参数的,使用options (int argc, char **argv);函数实现,所以这个函数在main函数中最开始的位置,可以开发的driver具有不同可选的特性,提供使用的便利性。

        第一步:书写options (int argc, char **argv);的具体实现;

        第二步:建立一个上下文切换句柄dpp = dispatch_create ();这个东东主要用在mainloop中产生一个block特性,可以让我们等待接受消息;

        第三步:iofunc初始化。这一步是将自己实现的函数与POSIX层函数进行接口,解析从read、write、devctl等函数传来的消息进行解析,以实现底层与应用层函数之间的交互,通过io_funcs.read = io_read,io_funcs.write = io_write,进行函数重载;

        第四步:注册设备名,使设备在命名空间中产生相应的名称,这一点是整个过程的关键了,形如  pathID = resmgr_attach (dpp, &rattr, "/dev/Null",_FTYPE_ANY, 0, &connect_funcs, &io_funcs, &ioattr),这样不仅注册了一个设备名,还让系统知道了我们实习的IO函数对应关系;

        第五步:为之前创建的上下文句柄分配空间,例如ctp = dispatch_context_alloc (dpp);为了第六步使用;

        第六步:通过不断循环等待dispatch_block()来调用MsgReceive()使Resource manger处于receive block状态,以接收上层发送来的消息,通过dispatch_handler (ctp)去调用我们自己定义的IO函数。

        这样一个single thread设备驱动dev/Null就创建好了,是不是很简单。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值