- 字符设备文件,以这个虚拟设备上的 read/write/ioctl 等接口与用户交互;但 read/write 一般只能做一件事情, ioctl 可以根据 cmd 参数做多个功能,但其缺点是很明显的: ioctl 接口无法直接在 Shell 脚本中使用,为了使用 ioctl 的功能,还必须编写配套的 C语言的虚拟设备操作程序, ioctl 的二进制数据接口也是造成大小端问题 (big endian与little endian)、32位/64位不可移植问题的根源;
- proc 接口,接受用户的 read/write/ioctl 操作;同样的,一个 proc 项通常使用其 read/write/ioctl 接口,它所存在的问题与上面的虚拟字符设备的的问题相似;
- sysfs 属性接口
优点: 比起古老的 proc 文件系统,它是基于内核的数据结构,因此组织结构上更加严密。它的设计使内核的信息更易获取,而且更加清晰。
内核空间与用户空间的映射关系如下表所示:
内核空间(internel) | 用户空间(externel) |
内核对象 (kernel objects) |
目录 (directories) |
对象属性 (object attributes) |
普通文件 (regular files) |
对象关系 (object relationshiops) |
符号链接 (symbolic links) |
1.1 Linux 统一设备模型所添加的高级sys接口: