在Linux中,
对于硬盘来说,根据硬盘的接口类型,有诸如
/dev/sda
或 之 类的设备文件。/dev/hda
其设备文件的存在是否意味着硬盘的驱动程序正在运行?
如何找出它是什么设备驱动程序?
对于硬盘上的分区,有一个设备文件,例如
/dev/sda1
或/dev/hda1
。其设备文件的存在是否意味着该分区的驱动程序正在运行?
如何找出它是什么设备驱动程序?
磁盘分区的驱动程序与磁盘的驱动程序相同吗?
对于硬盘上某个分区上的文件系统,只有将其挂载到
/
.挂载文件系统前,文件系统的驱动程序是否未运行?
文件系统具有针对该文件系统类型的设备驱动程序(例如,Linux 有一些针对 ntfs 文件系统的设备驱动程序),因此文件系统是否被视为设备?
文件系统的设备文件是什么?文件系统的挂载目录是文件系统的设备文件吗?
答案1
是的,如果存在 /dev/sda 等磁盘设备,则表示已加载此类磁盘的驱动程序。您可以通过执行来检查确切的驱动程序
ls -l /dev/sda
brw-rw---- 1 根磁盘 8, 0 Apr 8 2014 /dev/sda
在这种情况下,您的主设备号 = 8,因此您可以在内核源代码中搜索该驱动程序是什么
不存在运行分区之类的东西。而且没有分区驱动程序。分区是存储设备的一部分,通过存储驱动程序对其进行访问(参见第 1 点)。
ls -l /dev/sda1
brw-rw---- 1 根磁盘 8, 1 Apr 8 2014 /dev/sda1
对于文件系统,正确的名称是内核模块,而不是驱动程序。驱动程序与设备相关。即使您的文件系统未安装,也可以加载该模块。它是独立的。文件系统没有设备文件
答案2
在 Linux 中这个词“司机” 与支持某些硬件的“内核模块”一样多地使用。
当选择选项并且内核从源代码编译并有两种形式(静态或动态加载模块)时,就决定了内核支持。 (单体与微内核)
静态模块是内核的固定部分,该内核的核心功能和动态模块可以按需加载以扩展基本功能。
块设备和字符设备的名称并不重要,至少对于内核而言是这样。主要编号和次要编号指示内核使用哪个模块来访问它。主要和次要编号的范围是静态分配的(检查Documentation/devices.txt
在内核源代码中列出),更现代的内核模块使用动态主要/次要编号。
调用第一个 SCSI 磁盘纯粹是惯例/dev/sda
,但它是内核用来选择正确的模块来访问它的主要和编号。
ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Apr 8 2014 /dev/sda
例如,我可以通过设置具有相同幻数 8,0 的新设备来访问同一磁盘mknod
mknod /dev/my-first-disk b 8 0
这让我们更接近你第一个问题的答案:设备条目的存在是否意味着您正在运行的内核支持它? 不。使用 mknod,您可以创建具有任何主设备号和次设备号和名称的设备,甚至是那些不被任何内核模块使用/保留的设备。
细微差别在于,大多数人不会创建自己的设备,而是依赖乌德夫为他们动态地这样做。那么设备名称的存在通常表明某些硬件已被正确识别。
显示当前加载的动态模块,lsmod
但可用的静态支持需要了解用于构建内核的编译时选项,通常存储在名为/boot/config-<kernel-version>
.静态支撑始终可用。
文件系统不是设备,而是从设备上存储的字节到可用数据的转换层。多很多这里