您的位置:首页 > 其它

驱动基本入门介绍

2013-07-22 16:33 246 查看
基本外设驱动的开发其实都是很简单的,只要抓住几点,你就可以去自己调试驱动了。(我现在说的都是入门级的,可能说的地方有不对的,如果有不对的,虚心接受)

1.大概了解一些外设的基本工作流程(而非工作原理)

2.了解一般驱动程序是怎么进入内核的过程以及加载过程

3.了解驱动程序的基本架构

4.结合现实与内核基本知识去让硬件动起来

5.最终是实现把从硬件获得的数据上报的接口

只要大概了解这几个,抓住了中心,一般外设驱动是没有问题的。

触摸屏是在现在用到的最多的一个人机交互的工具,是面向人的第一个接口。

一般的触摸屏是电阻屏和电容屏的。电阻屏是靠压力来确定坐标的,压力有大有小,轻了点不中,中了可能又会点飞了,交互性方面不好,所以现在一般都采用电容屏的,电容屏是靠人手上的带电体来接触电容屏产生电流,以感知坐标的位置。驱动方面对于这个不太关心,我就是解释一下,嘿嘿,啰嗦了。。。

驱动关心的有哪些呢?

1.大概了解一些外设的基本工作流程(而非工作原理)

点一下触摸屏的表面,这时候屏的IC就要把当前点的位置的坐标传输出来 。坐标是我们最终要得到的东西,现在作为开发人员,你要知道的是怎么点一下,触摸IC就知道了呢,那就是IC上的“中断”了,硬件工程师都知道在连接IC与CPU的时候,首先要接的就是中断脚,Vcc,GND,这个中断脚的作用就是这个作用,接下来就是把数据传出来了,那靠什么传给CPU呢,这就是I2C了,这个不用我说,经典的两根线--SDA和SCL,这样大家就清楚了,touch是这样的:点一下屏,触发一下中断,中断脚会发消息给CPU,CPU利用I2C总线把数据接过来并上传上去,看吧,其实驱动就是这样的东西。

2.了解一般驱动程序是怎么进入内核的过程以及加载过程

例如现在驱动叫 touch.c,把它放在kernel/drivers/input/touchscreen/下,分别在Kconfig和Makefile里加好,关于这个步骤我在关于编译linux kernel里已经说过 了。

3.了解驱动程序的基本架构

module_init(touch_init)-->touch_init-->regster_driver()--->touch_driver--->touch_probe---->

一般字符设备的驱动程序的架构都是很简单的,最下面是module_init和module_exit,module_init()里放了一个函数指针t——touch_init,这个指针指向一个名一样的函数,这个函数的功能就是用regster_driver把这个驱动注册到内核里,touch_driver里又有一些touch_probe的探测函数来探测总线上的设备资源的,这个暂时不介绍,只要知道,这个函数就是要与内核中已经分配给它的一个资源对号起来,连接的暗号就是一个名字就行了。这个Probe函数就是做一些硬件初始化如把设备地址与i2c总线上已村在对应上,申请中断之类的。这时候硬件初始化已就好了,现在你一摸屏,中断就会检测到信息了,说明有数据出来,然后再利用几个函数把读出来的数据上报就行了。

4.结合现实与内核基本知识去让硬件动起来

这涉及到内核中的中断知道,工作队列,定时器,要结合 生活去理解,首先中断肯定就是来一个中断上报一个坐标的数据,这个都能理解。工作队列也要结合中断来说,中断的实现是与系统效率结合的,实时性是用户最要求的,所以中断分上半部和下半部,上半部就是接受中断,下半部 就是处理中断的结果,其实就是读I2c中的数据,并上报给应用程序处理,定时器的作用就是防抖动,大家也都知道。这样touch的驱动就整个与内核 一起动作起来了。

5.最终是实现把从硬件获得的数据上报的接口

这一部分其实也简单,驱动开发人员不需要关心,因为linux内核 已经为我们做好了接口了,我们只要套用就行了。

以上就是写一个简单的touch驱动所要做的事了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: