Linux编程学习笔记--Devices
2012-6-24
在Linux平台上,设备驱动程序是内核的一部分,用户进程不能直接访问。
Linux提供了file-like 对象,通过这种机制,用户进程通过类似文件操作的方式访问设备驱动,进而访问设备。
user process --> file-like object --> device driver --> device
user process --> file-like object --> linux kernal
# device types
设备文件有两种类型:
1) character device:按照字节流进行读写操作。
2) block device:按照固定大小字节的块进行读写操作。
典型的应用程序不会用到块设备。对硬盘的访问,应该通过文件系统进行。
# device number
Linux使用两个数字标识设备:
major device number:标识设备对应的驱动,一个驱动可以应用于多个设备。
minor device number:子设备,标识一个驱动控制的设备或部件,一个驱动可能控制了多个设备,通过minor进行区分。
主设备号是内核代码的一部分,可以从/usr/src/linux/Documentation/devices.txt 查看。
# device entry
在很多方面和普通的文件类似,可以执行mv, rm, cp, write等操作。
mknod -- 在文件系统中创建 device entry。创建一个文件,代表设备。
/dev 目录包含了完整的字符、块设备entry。大多数情况下,用户应该使用已有的device entry,而不是创建。
对设备的访问:将device entry作为文件打开,对该文件进行读写操作。
# 特殊设备
Linux提供了一些特殊的设备,没有和硬件设备关联。它们的主设备号为1,和linux内核的内存设备关联。
/dev/null -- 写入该设备的数据会被丢弃;从该设备读取数据,会得到文件结束。
/dev/zero -- 无限长文件,内容是0。
/dev/full -- 模拟一个满的文件。
/dev/random 和 /dev/urandom -- 访问linux内核内建的随机数生成功能。rand函数生成的随机数是可以复制的,不可靠。
环回设备 /dev/loop0 -- 用普通的磁盘文件模拟块设备。
创建虚拟文件系统的方法:
1)创建一个空文件;
2)在空文件上创建文件系统;
3)用环回设备挂接文件系统;
# PTYs
/dev/pts -- 该目录下的条目对应于伪终端(PTY)。
# ioctl
是控制硬件设备的全功能接口。
man ioctl_list -- 获取请求码