首先从mknod系统调用看起
看mknod命令调用的系统调用
执行的命令:mknod /dev/test_char c 128 11
可以使用工具看到核心调用如下
mknod("/dev/test_char", S_IFCHR|0666, makedev(128, 11)) = 0
mknod对应的内核函数为sys_mknod
sys_mknod
vfs_mknod error = dir->i_op->mknod(dir, dentry, mode, dev);
上图是sys_mknod的源码可以看到在mode是S_IFCHR的时候调用的是vfs_mknod。
可以看到 vfs_mknod只是i_op->inode的封装。dir是nd.dentry->d_inode也就是/dev这个目录对应的inode。如果/dev是ext3下的