系列目录传送门
mknod简介
mknod是用来创建特殊设备文件的系统调用, 在Linux Kernel - 探索Ram Disk 驱动(1) - 体验使用中, 我们通过在/dev/ram0的设备文件创建文件系统后, 访问我们挂载的Ram Disk设备.
与普通意义上的文件不同, 对一个设备的读写实质上会调用到设备驱动提供的读写函数, 进而和设备产生交互.
lqp@lqp-ThinkPad-T540p:~$ ls -l /dev/ram*
brw-rw—- 1 root disk 1, 0 12月 1 17:58 /dev/ram0
brw-rw—- 1 root disk 1, 1 12月 1 17:12 /dev/ram1
…
通过ls -l命令查看dev目录下的ram设备文件, 可以观察到, 设备类型是block的, 其中的 1, 0对应/dev/ram0的设备号. 设备号由主设备号和从设备号组成(MAJOR, MINOR), 其中MAJOR表示主设备类型, 也和设备的驱动类型相配; MINOR可以理解为该驱动所管理的子设备号.
文件类型
除了熟知的普通文件, 文件目录, 和上面提到的block类型外, 通过代码可以发现, 还有以下类型:
//lqp comment: include/uapi/linux/stat.h
//....
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) //文件链接
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) //常规文件, 如txt文件
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) //目录
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) //字符设备文件