分离与分层

        我在写大多数驱动的时候一般喜欢用输入子系统,这样不仅可以省去很多麻烦(直接设置),而且很容易嵌入到内核中,很是方便。但是后来遇到一个问题,就是在修改寄存器的值得时候,不仅需要很麻烦去找寄存器映射所在位置,而且容易牵一发而动全身。这就不是我想要的了。不过好像大神们也遇到过这样的情况,所以就有开发出一个很溜的模型--分离分层

        所谓分离与分层,就是把驱动和设备分开来写,设备驱动只关心与之相关的寄存器、内存等设置,驱动只关心与上层系统的接口等问题,那么两者是如何联系起来的呢?这就需要一个媒介了,而总线驱动是再好不过了,设备通过device_add将设备挂接到总线链表中,驱动通过driver_register将驱动挂接到总线的另一个链表中,而恰好总线驱动又提供一个match函数:int bus_match(struct device * dev, struct device_driver * drv),完成了从设备到驱动的匹配。在设备程序中我们注册一个platform_device,里面有一个id可以设置,在驱动程序中同时注册一个platform_driver结构体,他的id成员必须要与platform_device的id一致,这样match函数通过匹配id就能连接起来了。

       驱动程序只是实现与软件有关的函数,而设备程序只实现与硬件相关的程序,这样我在修改硬件寄存器器时,驱动程序就不需要大幅改动了。当我们实现多设备多驱动时这种模型的优势就不言而喻了。

下面是基于ARM335XD的触摸屏驱动。

http://www.oschina.net/code/snippet_2241389_55796

 

       

转载于:https://my.oschina.net/u/2241389/blog/667801

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值