Linux驱动程序开发 003- 设备与驱动的关系
来源:互联网 发布:无水印视频录制软件 编辑:程序博客网 时间:2024/06/07 05:59
序言
前面两章我们了解了Linux驱动程序的基本框架,也了解了如何编译Linux的驱动程序。接下来我们有必要介绍Linux系统的设备了,这样我们才能清楚的知道应用程序和设备驱动程序是如何的工作的,或者说应用程序是如何控制驱动程序的,进而知道应用程序是如何通过驱动程序操作设备的。
Linux设备分类
Linux下的设备通常分为三类,字符设备,块设备和网络设备。
crw-rw---- 1 root root 4, 64 Feb 18 23:34 /dev/ttyS0
crw-r----- 1 root root 4, 65 Nov 17 10:26 /dev/ttyS1
crw-rw---- 1 root root 4, 66 Jul 5 2000 /dev/ttyS2
crw-rw---- 1 root root 4, 67 Jul 5 2000 /dev/ttyS3
brw-rw---- 1 root root 3, 1 Jul 5 2000 /dev/hda1
brw-rw---- 1 root root 3, 2 Jul 5 2000 /dev/hda2
brw-rw---- 1 root root 3, 3 Jul 5 2000 /dev/hda3
设备节点、设备驱动及设备的关联
当我们访问一个设备节点是,系统是如果知到使用哪个设备驱动及访问哪个设备的呢?这个是通过设备号来实现的。当我们创建一个设备节点时需要指定主设备号和次设备号。对于设备节点来说,名字不是重要的,设备号才是最重要的,它实际指定了对应的驱动程序和对应的设备。
后记
这一章我们了解了Linux设备、设备节点与设备驱动的关系,也了解了应用程序是如何通过设备驱动程序访问设备的。下一章我们就可以给Hello World程序添加读写功能了,并且为它创建一个设备节点,这样我们就可以通过应用程序来操作Hello World驱动程序的内容了。
前面两章我们了解了Linux驱动程序的基本框架,也了解了如何编译Linux的驱动程序。接下来我们有必要介绍Linux系统的设备了,这样我们才能清楚的知道应用程序和设备驱动程序是如何的工作的,或者说应用程序是如何控制驱动程序的,进而知道应用程序是如何通过驱动程序操作设备的。
Linux设备分类
Linux下的设备通常分为三类,字符设备,块设备和网络设备。
- 字符设备
一个字符设备是一种字节流设备,对设备的存取只能按顺序按字节的存取而不能随机访问,字符设备没有请求缓冲区,所有的访问请求都是按顺序执行的。Linux下的大多设备都是字符设备。应用程序是通过字符设备节点来访问字符设备的。设备节点一般都由mknod命令都创建在/dev目录下,下面的例子显示了串口设备的设备节点。字符设备文件的第一个标志是前面的“c”标志。
root#ls -l /dev/ttyS[0-3]crw-rw----
crw-r-----
crw-rw----
crw-rw----
- 块设备
存储设备一般属于块设备,块设备有请求缓冲区,并且支持随机访问而不必按照顺序去存取数据,比如你可以先存取后面的数据,然后在存取前面的数据,这对字符设备来说是不可能的。Linux下的磁盘设备都是块设备,尽管在Linux下有块设备节点,但应用程序一般是通过文件系统及其高速缓存来访问块设备的,而不是直接通过设备节点来读写块设备上的数据。
root# ls -l /dev/hda[1-3]brw-rw----
brw-rw----
brw-rw----
- 网络设备
网络设备不同于字符设备和块设备,它是面向报文的而不是面向流的,它不支持随机访问,也没有请求缓冲区。在Linux里一个网络设备也可以叫做一个网络接口,如eth0,应用程序是通过Socket而不是设备节点来访问网络设备,在系统里根本就不存在网络设备节点。
相对于这三类设备,Linux设备驱动程序也分为对应的三类:字符设备驱动程序、块设备驱动程序和网络设备驱动程序。设备节点、设备驱动及设备的关联
当我们访问一个设备节点是,系统是如果知到使用哪个设备驱动及访问哪个设备的呢?这个是通过设备号来实现的。当我们创建一个设备节点时需要指定主设备号和次设备号。对于设备节点来说,名字不是重要的,设备号才是最重要的,它实际指定了对应的驱动程序和对应的设备。
- 主设备号
驱动程序在初始化时,会注册它的驱动及对应主设备号到系统中,这样当应用程序访问设备节点时,系统就知道它所访问的驱动程序了。你可以通过/proc/devices文件来驱动系统设备的主设备号。
- 次设备号
驱动程序遍历设备时,每发现一个它能驱动的设备,就创建一个设备对象,并为其分配一个次设备号以区分不同的设备。这样当应用程序访问设备节点时驱动程序就可以根据次设备号知道它说访问的设备了。
Linux中设备节点是通过“mknod”命令来创建的。一个设备节点其实就是一个文件,Linux中称为设备文件。有一点必要说明的是,在Linux中,所有的设备访问都是通过文件的方式,一般的数据文件程序普通文件,设备节点称为设备文件。在Linux内核中网络设备也是通过文件操作的,称为网络设备文件,在用户空间是通过socket接口来访问的。socket号就是网络设备文件描述符。后记
这一章我们了解了Linux设备、设备节点与设备驱动的关系,也了解了应用程序是如何通过设备驱动程序访问设备的。下一章我们就可以给Hello World程序添加读写功能了,并且为它创建一个设备节点,这样我们就可以通过应用程序来操作Hello World驱动程序的内容了。
- Linux驱动程序开发 003- 设备与驱动的关系
- Linux设备驱动开发基础---字符设备驱动程序开发之基于中断的按键驱动
- Linux驱动程序开发 - 设备驱动模型初探
- Linux驱动程序开发 - 设备驱动模型初探
- Linux驱动程序开发 - 设备驱动模型初探
- Linux驱动程序开发 - 设备驱动模型初探
- Linux驱动程序开发 - 设备驱动模型初探
- Linux驱动程序开发 004- 字符设备驱动
- Linux驱动程序开发 - 字符设备驱动
- Linux 总线、设备与设备驱动的关系
- Linux设备驱动开发基础---字符设备驱动程序开发
- Linux字符设备驱动程序开发(1)-使用字符设备驱动
- Hasen的linux设备驱动开发学习之旅--增加了并发控制的设备驱动程序
- 【Linux开发】linux设备驱动归纳总结(八):2.总线、设备和驱动的关系
- 《linux设备驱动开发详解》上的globalmem字符设备驱动程序
- linux设备驱动开发学习之旅--增加了并发控制的设备驱动程序
- Linux设备驱动与整个硬件系统的关系
- Linux设备驱动模型与kobject的关系
- javascript常见陷阱集合
- Linux驱动程序开发002 - Kbuild系统
- ssi批量增加java.sql.SQLException: Connection is closed.
- 在Visual Studio中使用MonoTouch开发iOS应用程序(下):开发体验
- 转载记录备用:SDL模拟分子运动 http://blog.csdn.net/rcfalcon/article/details/5265227
- Linux驱动程序开发 003- 设备与驱动的关系
- 提取ipa里面的资源图片
- wince下sources\sources.cmn\Makefile.def的相关作用(含source文件中的宏定义和dirs文件)
- 《程序员》2012年4期精彩内容:创业
- 观察者模式
- Linux驱动程序开发 004- 字符设备驱动
- 程序猿常用的C/C++编译器介绍
- SD和emmc区别
- MyEclipse优化速度方案浅析