老菜的园子

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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 -- 获取请求码

posted on 2012-06-24 22:04  weichsel  阅读(449)  评论(0编辑  收藏  举报