Skip to the content.

mknod

为什么使用 major:minor

注意,/dev/sda1 不一定放到 /dev 下的,其实是可以放到其他的位置的

参考 1,实际上是建立 dev_t 和路径的关系的,而这个路径具体是什么并不重要。

例如

ls -la /dev/sda
  brw-rw---- 8,0 root  6 Sep 18:30 /dev/sda
cd
sudo mknod m b 8 0

然后,对于 ~/m io 就是和对于 /dev/sda 进行 io 是一样的

原理

主要参考 2 3

在写 bmbt 的时候,通过 cat /proc/partition 可以获取到 block 设备,需要 mknod 才可以将创建 /dev/nvme0n1,之后才可以将设备 mount 上去, 感觉根本没有必要,我的感觉是, /dev 这个目录就是多余的

其实这种想法是错误的,还是那个问题,unix 系统为了方便管理,需要一个文件,使用 /dev 目录在承载这个文件,是很方便的。

当调用 mknod 的时候,取决于该文件所在的文件系统,会调用不同的 inode_operations::mknod 创建在 /dev/x 中,最后调用的是 shmem_mknod,但是如果在 ~/ 中创建,那就是 ext4_mknod

如果是 chardev,那么注册给这个 inode 的 file_operationsdef_chr_fops

/*
 * Dummy default file-operations: the only thing this does
 * is contain the open that then fills in the correct operations
 * depending on the special file...
 */
const struct file_operations def_chr_fops = {
    .open = chrdev_open,
    .llseek = noop_llseek,
};

如果启动内核之后,就是启动 bash ,虽然可以从 /proc/partitions 中可以看到有 blockdev,但是在 /dev 下依旧是什么都没有, 而在一般的 Linux distribution 中,在 /dev/ 下创建对应的文件的工作,应该是被 udev 完成了。

其实还是问题,如果 mknod 是 udev 之类的构建的,可以在任何地方,那么

内核是如何解析内核启动参数 console=/dev/ttyS0

因为,本来 /dev/ 目录是内核提供给用户态访问的,但是这么看,/dev/ttyS0 可以在 /tmpfs 都没有的时候, 就开始来访问了。

源码

处理 chardev 和 blockdev 的位置:

主要是注册和管理 chardev 驱动,最后

测试

在 vn/code/src/m/dev.sh 中

问题

执行 lsinitrd 的时候,可以看到:

crw-r--r--   1 root     root       5,   1 May 23  2024 dev/console
crw-r--r--   1 root     root       1,  11 May 23  2024 dev/kmsg
crw-r--r--   1 root     root       1,   3 May 23  2024 dev/null
crw-r--r--   1 root     root       1,   8 May 23  2024 dev/random
crw-r--r--   1 root     root       1,   9 May 23  2024 dev/urandom

我估计只有有了这个 file ,fs mount 之后可以自动关联起来, 之后不需要

理解一个问题

为什么 kernel 的启动参数可以是 root=/dev/openeuler/root ?

root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root nokaslr

这里的 rd.lvm.lv 都是在哪里解析的

除掉 root=PARTUUID root=UUID ,还有什么启动方式?

相关话题

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。

  1. What does mknod do? 

  2. Professional Linux Kernel Architecture : Device Drivers 

  3. Understand Linux Kernel : I/O Architecture and Device Drivers