个人从事linux驱动开发已经一年多了,在这里我想浅谈一下我对linux 驱动的一点理
解和认识
我个人把linux驱动分为两类:
1. kernel/linux/driver 目录下的驱动,如网卡,Nandflash驱动等
2.比较简单的外围设备如LED灯
这里主要谈第1类驱动,这类驱动较为复杂
个人理解驱动的软件部分主要分3大块:
1.协议部分,如网卡驱动的网络协议部分,这部分由内核自己完成,且较为规范,
对于驱动工程师来讲,这部分很少需要改动,所以我也很少关注它。它主要包括两方面:
你对协议的理解,和协议是如何通过软件实现的,个人认为此块较为复杂。
2.驱动与内核的接口部分,如 我要注册使用一个驱动,需填充哪个内核提供的结构
体,有哪些函数需要我完成。这类结构体大多包涵两部分:模块参数和一些功能函数。
对于不同设备 需填写的结构体函数各有不同,详情可参照
《linux设备驱动开发详解》一书,宋宝华 编著,此书可谓是内核驱动的一幅地图。
我们读驱动代码是经常会遇到一些不认识的函数,多为linux系统提供用于实现
某种机制如中断唤醒,内核定时器,同步,共享,自旋锁等等,如果不能很好的理解这些
东西,看代码是难免云里雾里的。推荐一书《linux设备驱动》 第三版 魏永明等译
此书堪称linux驱动工程师的葵花宝典。有助于我们理解linux驱动的一些机制
3.驱动与硬件关联部分:如何读写芯片寄存器和对芯片手册中时序图的实现软件模拟
通常会有相应的函数实现具体的功能,我们称这部分函数 为 底层函数,它与底层硬件密
切相关。
此部分需 详细阅读数据手册,原理图,或与硬件工程师沟通。
后两块是我们平时做linux驱动关注的重点。
再浅谈一下个人学习体验:
1.看书,几本书对照着看,因为很少有书讲的 很全面,而我们做东西需较全面的知识。
多看几本书可以知识互补,重复讲的地方还能加深印象。
2.做实验,理论联系实际,不但可以加深对书本知识印象,再回过头去看书也会加深对知
识理解的深度
阅读(1913) | 评论(1) | 转发(0) |