驱动程序学习总结(一)

 

学习linux驱动程序大概有半年了,最近在项目上动手写了几个驱动,才对驱动有了一个全面的认识。

1. 学习驱动最好的参考资料是内核驱动源码。
2. 要想写好一个驱动必须看懂别人的驱动。
这算是我深有体会的两点吧!

下面说下我对驱动的认识:
对于驱动程序开发者来说,最好写的的驱动是 两 层驱动,也就是说,只包括硬件层和用户层,大部分网上的例程都是这样写的,在硬件层直接操作硬件,并向用户层提交接口函数,我说的两层的含义是驱动做两种工作:1.操作硬件。2.向用户层提供接口。

 

但是如果去阅读内核的话,会发现,linux的驱动大部分都是 三 层模型,这第三层叫做驱动核心层(core),他位于硬件层和用户层之间,之所以这样做,主要是考虑可移植性,比如,RTC驱动,能读取时间的芯片很多,但它们要向用户空间提供的接口是相同的,这样,可以抽象出一层,这一层是所有RTC的共性,所以把它叫做核心层。它负责提供用户层接口,并屏蔽底层硬件细节(所谓的屏蔽实质上就是提供层与层的接口)。

不论是几层驱动,驱动开发者最关心的是硬件层,但完成的工作不仅仅是如何操作硬件,更重要的是怎么为上层提供接口,还说RTC吧,核心层肯定不用动了,要不然会破坏掉linux的和谐,呵呵,主要工作就在硬件层了,操作硬件倒好说,难得是驱动开发者需要向核心层提供什么接口?这种问题似乎没有人去讨论,因此这也成为初学者的难处。我当时学到这里也是烦了好长一段时间,最后还是硬着头皮将RTC的整个源码读了一遍,也就清楚了核心需要什么接口。从封装的角度(不知道用封装来形容合不合适)来说,核心层只能说是半封装,对用户空间来说,它提供了固定的接口——系统调用,但是,对于底层,它可是相当灵活,这种接口不是固定的,也不是统一的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值