Linux所有设备文件都在/dev目录下。
在/dev目录下手动创建设备文件节点的命令:mknod /dev/demodev c 2 0
mknod命令--->
调用sys_mknod①;
--->ext3_mknod②
--->init_special_inode③
①:long sys_mknod(const char __user *filename,int mode,unsigned dev);这个函数有两个重要参数,一是设备文件名(/dev/demodev),二是设备号。设备文件名主要在用户空间使用(如open函数),而内核空间则使用inode来表示相应的文件。此函数会调用/dev目录上挂载的文件系统接口来为/dev/demodev生成一个新的inode。具体做法是:1.sys_mknod首先在根目录’/’寻找dev目录所对应的inode;2.通过dev的inode结构中的i_op成员指向的ext3_dir_inode_operations,来调用该对象中的mknod方法,这将导致ext3_mknod函数被调用
②:ext3_mknod函数的主要作用是生成一个新的inode(用来在内核空间中表示demodev设备文件节点)
③:主要功能是为新生成的代表设备文件的inode初始化其中的i_fop和i_rdev成员。i_rdev成员表示该inode所对应的设备号。i_fop成员初始化根据是字符设备还是块设备有不同的赋值。对于字符设备,fop指向def_chr_fops(struct file_operation类型)def_chr_fops定义了一个open操作chrdev_open