scull_load脚本里有一系列mknod的调用,如下:
mknod /dev/${device}0 c $major 0
mknod /dev/${device}1 c $major 1
mknod /dev/${device}2 c $major 2
mknod /dev/${device}3 c $major 3
从这里我们讨论下mknod的使用。
mknod的使用场景:
向系统增加一个驱动程序意味着要赋一个主设备号,通常使用register_chrdev 获得。一旦设备驱动程序注册到内核表中,内核调用file_operations的回调函数。
接下来的问题是如何给程序一个名字以被它们用来请求你的设备驱动程序,这个名字必须插入到/dev目录中,并与驱动程序的主设备号和次设备号相连。
在文件系统上创建一个设备节点的命令是mknod,而且操作用户必须是超级用户。
mknod的语法:
scull_load说明:mknod用法
背景知识:
linux的设备管理是和文件系统紧密结合的,各种设备都以文件形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。
为了管理这些设备,系统为设备编号,每个设备编号包含主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。
linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open(),close(),read()和write()等,但由于外设的种类较多,操作方式各不相同。struct file_operations结构体中的成员为一系列的接口函数,比如用于读/写的read/write函数和用于控制的ioctl等。