linux设备管理之主/次设备号

您所在的位置:网站首页 initctl命令 linux设备管理之主/次设备号

linux设备管理之主/次设备号

#linux设备管理之主/次设备号| 来源: 网络整理| 查看: 265

【推荐阅读】

一文看懂linux内核详解

linux内核内存管理-写时复制

深入了解使用linux查看磁盘io使用情况

主设备号和次设备号

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。 主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的其他设备。(主设备号和控制这类设备的驱动是一一对应的) 通俗的说就是主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备. 在同一个系统中,一类设备的主设备号是唯一的。比如:磁盘这类,次设备号只是在驱动程序内部使用,系统内核直接把次设备号传递给应用程序,由驱动程序管理。为了保证驱动程序的通用性,避免驱动程序移植过程中出现主设备号冲突,系统为设备编了号,每个设备号又分为主设备号和次设备号。 主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号。 注: 主设备号和次设备号,在不同磁盘的工具中都有输出显示,所以对于这个概念的理解还是很重要,否则你看不懂很多命令的输出。 尤其是 cat /proc/devices 输出的意义等。

设备的分类

以 Linux 的方式看待设备可区分为 3 种基本设备类型。 每个设备常常实现 3 种类型中的 1 种, 因此可分类成字符设备, 块设备, 或者一个网络设备。  这种将设备分成不同类型或类别的方法并非是固定不变的。  1、字符设备  一个字符( char ) 设备是一种可以当作一个字节流来存取的设备( 如同一个文件 ); 字符驱动模块负责实现这种行为。  这样的驱动模块至少实现 open, close, read, 和 write 系统调用。文本控制台( /dev/console )和串口( /dev/ttyS0 及其他 )是字符设备的例子, 因为它们很好地展现了流的抽象。 字符设备通过文件系统结点来存取, 例如 /dev/tty1 和 /dev/lp0。  2、块设备  如同字符设备, 块设备通过位于 /dev 目录的文件系统结点来存取. 一个块设备(例如一个磁盘)应该是可以驻有一个文件系统的。  在大部分的 Unix 系统, 一个块设备只能处理特定的 I/O 操作, 即传送一个或多个长度经常是 512 字节( 或一个更大的 2 的幂的数 )的整块。  Linux, 相反, 允许应用程序读写一个块设备象一个字符设备一样;它允许一次传送任意数目的字节。  结果就是, 块和字符设备的区别仅仅在内核内部管理数据的方式上, 和在内核/驱动的软件接口上不同。  如同一个字符设备, 每个块设备都通过一个文件系统结点被存取的, 它们之间的区别对用户是透明的。 块驱动和字符驱动相比, 与内核的接口完全不同。  3、网络接口设备  任何网络事务都通过一个接口来进行, 就是说, 一个能够与其他主机交换数据的设备。  通常, 一个接口是一个硬件设备, 但是它也可能是一个纯粹的软件设备, 比如回环接口(lo)。一个网络接口负责发送和接收数据报文, 在内核网络子系统的驱动下,  不必知道单个事务是如何映射到实际的被发送的报文上的。很多网络连接( 特别那些使用 TCP 的)是面向流的, 但是网络设备却常常设计成处理报文的发送和接收。  网络驱动对单个连接一无所知; 它只处理报文。设备名称

linux 系统下查找下主设备号

linux 系统采样,因为内核的版本对于/proc下的机制影响比较大,所以要注意版本[root@fp-web-130 src]# cat /etc/redhat-releaseCentOS Linux release 7.2.1511 (Core)

[root@fp-web-130 src]# uname -r3.10.0-1160.45.1.el7.x86_64

[root@fp-web-130 src]# cat /proc/devices//显示结果

Character devices: //字符设备1 mem4 /dev/vc/04 tty4 ttyS5 /dev/tty5 /dev/console5 /dev/ptmx7 vcs10 misc13 input21 sg29 fb99 ppdev128 ptm136 pts162 raw180 usb188 ttyUSB189 usb_device202 cpu/msr203 cpu/cpuid226 drm249 hidraw250 usbmon251 bsg252 watchdog253 rtc254 tpm

Block devices: //块设备259 blkext7 loop //回环设备8 sd //scsi设备9 md11 sr //只读光驱65 sd66 sd67 sd68 sd69 sd70 sd71 sd128 sd vcsa129 sd vcsa1130 sd vcsa2131 sd vcsa3132 sd vcsa4133 sd vcsa5134 sd vcsa6135 sd说明: sd,md,loop等就是设备名参看: https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/devices.txt实例:lsblk 命令可以查看块设备的主设备号和次设备号

解释:loop0 的主设备号是 7:0 7表示的主设备号,0是系统为loop0回环设备编了号.这个主从就表示了唯一性([root@fp-web-130 src]# cat /proc/devices 得到的回环设备loop是7)loop1 的主设备号是 7:1 7表示的主设备号,1是系统为loop1回环设备编了号.

基本上如果主设备号和次设备号明白了,那么lsblk这个命令的基本输出结果理解上就没有难度了

为了使应用程序区分所控制设备的类型,内核使用主设备号。而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备号举例: 这里sd是8(cat /proc/devices查的),看到有一列是8,16 这里8就是主设备号、16就是次设备号

【文章福利】小编推荐自己的Linux内核技术交流群:【977878001】整理一些个人觉得比较好得学习书籍、视频资料;进群私聊群管理领取内核资料包(含视频教程、电子书、实战项目及代码)

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

有三个目录说下 /dev/* , /proc/devices

1./proc/devices/中的设备是通过insmod加载到内核的,它可产生一个major供mknod作为参数(那么必然可以通过lsmod查看) 2./dev/*.* 是通过mknod加上去的,设备节点,mknod(创建设备节点)后在此添加一子目录 格式:mknod device1 c/b major minor 如:mknod dr1 c 254 0,用户通过此设备名来访问你的驱动。 /dev,设备文件存储目录,应用程序通过对这些文件的读写和控制,可以访问实际的设备 3./sys/devices ,内核设备按总线类型分层放置的目录结构,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备, /sys/dev 下有两个子目录block和char,存放的是块设备和字符设备的主次号码,形式为(major:minor),它指向 /sys/devices 目录下的设备。 注:sysfs最主要是用来描绘Linux kernel 2.6中的设备驱动模型, 用户态的后台程序(udev)会动态地周期性的扫描/sys目录中的属性项来自动管理设备文件(也称为设备节点),从而在/dev目录会建立或者删除对应的设备文件。

lsmod用于显示已载入系统的模块信息和模块间的依赖关系(sd举例)

[root@ht8 include]# lsmod | grep sd sd_mod 46281 3 crc_t10dif 12912 1 sd_mod //lsmod命令实际上是读取并分析/proc/modules文件 [root@ht8 include]# cat /proc/modules | grep sd sd_mod 46281 3 - Live 0xffffffffc0392000 crc_t10dif 12912 1 sd_mod, Live 0xffffffffc02ae000 Module: 模块的名字 Size: 模块的大小,单位是字节。 Live表示模块可用 模块的起始地址 内核已加载的模块信息也存在与/sys/modules目录下 [root@ht8 include]# cd /sys/module/sd_mod/ [root@ht8 sd_mod]# ll total 0 -r--r--r-- 1 root root 4096 Mar 26 19:11 coresize drwxr-xr-x 2 root root 0 Jan 5 19:39 holders -r--r--r-- 1 root root 4096 Mar 26 19:11 initsize -r--r--r-- 1 root root 4096 Mar 26 19:11 initstate drwxr-xr-x 2 root root 0 Mar 26 19:10 notes -r--r--r-- 1 root root 4096 Mar 26 19:11 refcnt -r--r--r-- 1 root root 4096 Mar 26 19:11 rhelversion drwxr-xr-x 2 root root 0 Mar 26 19:10 sections -r--r--r-- 1 root root 4096 Mar 26 19:11 srcversion -r--r--r-- 1 root root 4096 Mar 26 19:11 taint --w------- 1 root root 4096 Mar 26 19:11 uevent

linux下次设备号查看

[root@fp-web-130 src]# ls -l /dev total 0 crw-rw---- 1 root video 10, 175 May 27 2021 agpgart crw------- 1 root root 10, 235 May 27 2021 autofs drwxr-xr-x 2 root root 340 Feb 9 00:02 block drwxr-xr-x 2 root root 140 May 27 2021 bsg crw------- 1 root root 10, 234 May 27 2021 btrfs-control lrwxrwxrwx 1 root root 3 May 27 2021 cdrom -> sr0 drwxr-xr-x 2 root root 80 May 27 2021 centos drwxr-xr-x 2 root root 3000 May 27 2021 char crw------- 1 root root 5, 1 May 27 2021 console lrwxrwxrwx 1 root root 11 May 27 2021 core -> /proc/kcore drwxr-xr-x 10 root root 220 May 27 2021 cpu crw------- 1 root root 10, 61 May 27 2021 cpu_dma_latency crw------- 1 root root 10, 62 May 27 2021 crash drwxr-xr-x 5 root root 100 May 27 2021 disk brw-rw---- 1 root disk 253, 0 May 27 2021 dm-0 brw-rw---- 1 root disk 253, 1 May 27 2021 dm-1 brw-rw---- 1 root disk 253, 2 Feb 7 14:58 dm-2 brw-rw---- 1 root disk 253, 3 Feb 7 14:58 dm-3 drwxr-xr-x 2 root root 100 May 27 2021 dri crw-rw---- 1 root video 29, 0 May 27 2021 fb0 lrwxrwxrwx 1 root root 13 May 27 2021 fd -> /proc/self/fd crw-rw-rw- 1 root root 1, 7 May 27 2021 full crw-rw-rw- 1 root root 10, 229 May 27 2021 fuse crw------- 1 root root 10, 228 May 27 2021 hpet drwxr-xr-x 2 root root 0 May 27 2021 hugepages lrwxrwxrwx 1 root root 25 May 27 2021 initctl -> /run/systemd/initctl/fifo drwxr-xr-x 3 root root 180 May 27 2021 input crw-r--r-- 1 root root 1, 11 May 27 2021 kmsg srw-rw-rw- 1 root root 0 May 27 2021 log brw-rw---- 1 root disk 7, 0 Feb 7 14:58 loop0 brw-rw---- 1 root disk 7, 1 Feb 7 14:58 loop1 brw-rw---- 1 root disk 7, 2 Feb 9 11:21 loop2 crw-rw---- 1 root disk 10, 237 May 27 2021 loop-control drwxr-xr-x 2 root root 140 Feb 7 14:58 mapper crw------- 1 root root 10, 227 May 27 2021 mcelog crw-r----- 1 root kmem 1, 1 May 27 2021 mem drwxrwxrwt 2 root root 40 May 27 2021 mqueue drwxr-xr-x 2 root root 60 May 27 2021 net crw------- 1 root root 10, 60 May 27 2021 network_latency crw------- 1 root root 10, 59 May 27 2021 network_throughput crw-rw-rw- 1 root root 1, 3 May 27 2021 null crw------- 1 root root 10, 144 May 27 2021 nvram crw------- 1 root root 1, 12 May 27 2021 oldmem crw-r----- 1 root kmem 1, 4 May 27 2021 port crw------- 1 root root 108, 0 May 27 2021 ppp crw-rw-rw- 1 root tty 5, 2 Feb 9 15:03 ptmx drwxr-xr-x 2 root root 0 May 27 2021 pts crw-rw-rw- 1 root root 1, 8 May 27 2021 random drwxr-xr-x 2 root root 60 May 27 2021 raw lrwxrwxrwx 1 root root 4 May 27 2021 rtc -> rtc0 crw------- 1 root root 253, 0 May 27 2021 rtc0 brw-rw---- 1 root disk 8, 0 May 27 2021 sda brw-rw---- 1 root disk 8, 1 May 27 2021 sda1 brw-rw---- 1 root disk 8, 2 May 27 2021 sda2 brw-rw---- 1 root disk 8, 16 Feb 5 01:02 sdb brw-rw---- 1 root disk 8, 17 Feb 5 01:02 sdb1 brw-rw---- 1 root disk 8, 18 Feb 5 01:02 sdb2 brw-rw---- 1 root disk 8, 21 Feb 5 01:04 sdb5 crw-rw---- 1 root cdrom 21, 0 May 27 2021 sg0 crw-rw---- 1 root disk 21, 1 May 27 2021 sg1 crw-rw---- 1 root disk 21, 2 May 27 2021 sg2 drwxrwxrwt 2 root root 40 May 27 2021 shm crw------- 1 root root 10, 231 May 27 2021 snapshot drwxr-xr-x 2 root root 80 May 27 2021 snd brw-rw---- 1 root cdrom 11, 0 May 27 2021 sr0 lrwxrwxrwx 1 root root 15 May 27 2021 stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 May 27 2021 stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 May 27 2021 stdout -> /proc/self/fd/1 crw-rw-rw- 1 root tty 5, 0 May 27 2021 tty crw--w---- 1 root tty 4, 0 May 27 2021 tty0 crw--w---- 1 root tty 4, 1 May 27 2021 tty1 crw--w---- 1 root tty 4, 10 May 27 2021 tty10 crw--w---- 1 root tty 4, 11 May 27 2021 tty11 crw--w---- 1 root tty 4, 12 May 27 2021 tty12 crw--w---- 1 root tty 4, 13 May 27 2021 tty13 crw--w---- 1 root tty 4, 14 May 27 2021 tty14 crw--w---- 1 root tty 4, 15 May 27 2021 tty15 crw--w---- 1 root tty 4, 16 May 27 2021 tty16 crw--w---- 1 root tty 4, 17 May 27 2021 tty17 crw--w---- 1 root tty 4, 18 May 27 2021 tty18 crw--w---- 1 root tty 4, 19 May 27 2021 tty19 crw--w---- 1 root tty 4, 2 May 27 2021 tty2 crw--w---- 1 root tty 4, 20 May 27 2021 tty20 crw--w---- 1 root tty 4, 21 May 27 2021 tty21 crw--w---- 1 root tty 4, 22 May 27 2021 tty22 crw--w---- 1 root tty 4, 23 May 27 2021 tty23 crw--w---- 1 root tty 4, 24 May 27 2021 tty24 crw--w---- 1 root tty 4, 25 May 27 2021 tty25 crw--w---- 1 root tty 4, 26 May 27 2021 tty26 crw--w---- 1 root tty 4, 27 May 27 2021 tty27 crw--w---- 1 root tty 4, 28 May 27 2021 tty28 crw--w---- 1 root tty 4, 29 May 27 2021 tty29 crw--w---- 1 root tty 4, 3 May 27 2021 tty3 crw--w---- 1 root tty 4, 30 May 27 2021 tty30 crw--w---- 1 root tty 4, 31 May 27 2021 tty31 crw--w---- 1 root tty 4, 32 May 27 2021 tty32 crw--w---- 1 root tty 4, 33 May 27 2021 tty33 crw--w---- 1 root tty 4, 34 May 27 2021 tty34 crw--w---- 1 root tty 4, 35 May 27 2021 tty35 crw--w---- 1 root tty 4, 36 May 27 2021 tty36 crw--w---- 1 root tty 4, 37 May 27 2021 tty37 crw--w---- 1 root tty 4, 38 May 27 2021 tty38 crw--w---- 1 root tty 4, 39 May 27 2021 tty39 crw--w---- 1 root tty 4, 4 May 27 2021 tty4 crw--w---- 1 root tty 4, 40 May 27 2021 tty40 crw--w---- 1 root tty 4, 41 May 27 2021 tty41 crw--w---- 1 root tty 4, 42 May 27 2021 tty42 crw--w---- 1 root tty 4, 43 May 27 2021 tty43 crw--w---- 1 root tty 4, 44 May 27 2021 tty44 crw--w---- 1 root tty 4, 45 May 27 2021 tty45 crw--w---- 1 root tty 4, 46 May 27 2021 tty46 crw--w---- 1 root tty 4, 47 May 27 2021 tty47 crw--w---- 1 root tty 4, 48 May 27 2021 tty48 crw--w---- 1 root tty 4, 49 May 27 2021 tty49 crw--w---- 1 root tty 4, 5 May 27 2021 tty5 crw--w---- 1 root tty 4, 50 May 27 2021 tty50 crw--w---- 1 root tty 4, 51 May 27 2021 tty51 crw--w---- 1 root tty 4, 52 May 27 2021 tty52 crw--w---- 1 root tty 4, 53 May 27 2021 tty53 crw--w---- 1 root tty 4, 54 May 27 2021 tty54 crw--w---- 1 root tty 4, 55 May 27 2021 tty55 crw--w---- 1 root tty 4, 56 May 27 2021 tty56 crw--w---- 1 root tty 4, 57 May 27 2021 tty57 crw--w---- 1 root tty 4, 58 May 27 2021 tty58 crw--w---- 1 root tty 4, 59 May 27 2021 tty59 crw--w---- 1 root tty 4, 6 May 27 2021 tty6 crw--w---- 1 root tty 4, 60 May 27 2021 tty60 crw--w---- 1 root tty 4, 61 May 27 2021 tty61 crw--w---- 1 root tty 4, 62 May 27 2021 tty62 crw--w---- 1 root tty 4, 63 May 27 2021 tty63 crw--w---- 1 root tty 4, 7 May 27 2021 tty7 crw--w---- 1 root tty 4, 8 May 27 2021 tty8 crw--w---- 1 root tty 4, 9 May 27 2021 tty9 crw-rw---- 1 root dialout 4, 64 May 27 2021 ttyS0 crw-rw---- 1 root dialout 4, 65 May 27 2021 ttyS1 crw-rw---- 1 root dialout 4, 66 May 27 2021 ttyS2 crw-rw---- 1 root dialout 4, 67 May 27 2021 ttyS3 crw------- 1 root root 10, 239 May 27 2021 uhid crw------- 1 root root 10, 223 May 27 2021 uinput crw-rw-rw- 1 root root 1, 9 May 27 2021 urandom crw------- 1 root root 250, 0 May 27 2021 usbmon0 crw-rw---- 1 root tty 7, 0 May 27 2021 vcs crw-rw---- 1 root tty 7, 1 May 27 2021 vcs1 crw-rw---- 1 root tty 7, 2 May 27 2021 vcs2 crw-rw---- 1 root tty 7, 3 May 27 2021 vcs3 crw-rw---- 1 root tty 7, 4 May 27 2021 vcs4 crw-rw---- 1 root tty 7, 5 May 27 2021 vcs5 crw-rw---- 1 root tty 7, 6 May 27 2021 vcs6 crw-rw---- 1 root tty 7, 128 May 27 2021 vcsa crw-rw---- 1 root tty 7, 129 May 27 2021 vcsa1 crw-rw---- 1 root tty 7, 130 May 27 2021 vcsa2 crw-rw---- 1 root tty 7, 131 May 27 2021 vcsa3 crw-rw---- 1 root tty 7, 132 May 27 2021 vcsa4 crw-rw---- 1 root tty 7, 133 May 27 2021 vcsa5 crw-rw---- 1 root tty 7, 134 May 27 2021 vcsa6 drwxr-xr-x 2 root root 60 May 27 2021 vfio crw------- 1 root root 10, 63 May 27 2021 vga_arbiter crw------- 1 root root 10, 238 May 27 2021 vhost-net crw------- 1 root root 10, 58 May 27 2021 vmci crw------- 1 root root 10, 57 May 27 2021 vsock crw-rw-rw- 1 root root 1, 5 May 27 2021 zero内核文档(kernel-doc)中查询各主次设备号代表的意义.[root@ht8 sd_mod]# rpm -qa | grep kernel-doc kernel-doc-3.10.0-1160.59.1.el7.noarch //没有的话,yum install kernel-doc root@ht8 sd_mod]#cat /usr/share/doc/kernel-doc-3.10.0/Documentation/devices.txt Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。 一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。 Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。打开一个文件就是 调用这个文件file_operations中的open操作。不同类型的文l件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。

内核中如何标识设备号

设备号是在驱动module中分配并注册的,而/dev目录下的设备文件是根据这个设备号创建的,因此,当访问/dev目录下的设备文件时,驱动module就知道,自己该出场服务了(当然是由内核通知)。在Linux内核看来,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。在内核中,用dev_t类型(其实就是一个32位的无符号整数)的变量来保存设备的主次设备号,其中高12位表示主设备号,低20位表示次设备号。 设备获得主次设备号有两种方式:一种是手动给定一个32位数,并将它与设备联系起来(即用某个函数注册);另一种是调用系统函数给设备动态分配一个主次设备号。 对于手动给定一个主次设备号,使用以下函数: int register_chrdev_region(dev_t first, unsigned int -count, char *name) 其中first是我们手动给定的设备号,count是所请求的连续设备号的个数,而name是和该设备号范围关联的设备名称,它将出现在/proc/devices和sysfs中。 比如,若first为0x3FFFF0,count为0x5,那么该函数就会为5个设备注册设备号,分别是0x3FFFF0、 0x3FFFF1、 0x3FFFF2、 0x3FFFF3、 0x3FFFF4,其中0x3(高12位)为这5个设备所共有的主设备号(也就是说这5个设备都使用同一个驱动程序)。而0xFFFF0、 0xFFFF1、 0xFFFF2、 0xFFFF3、 0xFFFF4就分别是这5个设备的次设备号了。需要注意的是,若count的值太大了,那么所请求的设备号范围可能会和下一个主设备号重叠。比如若 first还是为0x3FFFF0,而count为0x11,那么first+count=0x400001,也就是说为最后两个设备分配的主设备号已经不是0x3,而是0x4了!用这种方法注册设备号有一个缺点,那就是若该驱动module被其他人广泛使用,那么无法保证注册的设备号是其他人的 Linux系统中未分配使用的设备号。

与主次设备号相关的3个宏:

MAJOR(dev_t dev):根据设备号dev获得主设备号; MINOR(dev_t dev):根据设备号dev获得次设备号; MKDEV(int major, int minor):根据主设备号major和次设备号minor构建设备号

从Linux2.6内核版本开始,/proc文件系统迁移至改进后的/sys文件系统。/sys文件系统中加入对动态变更的支持,如添加和删除LUN,而无需重新加载主机适配器驱动或重启主机。

sysfs(/sys目录)-sysfs 的设计原则是一个属性文件只做一件事情,sysfs属性文件一般只有一个值,直接读取或写入

sysfs 虚拟文件系统提供了一种比 proc(老的机制) 更为理想的访问内核数据的途径。sysfs 文件系统总是被挂载在 /sys 挂载点上

sysfs 与 proc 相比有很多优点,最重要的莫过于设计上的清晰。一个 proc 虚拟文件可能有内部格式,如 /proc/scsi/scsi ,它是可读可写的,并且读写格式不一样,代表不同的操作,应用程序中读到了这个文件的内容一般还需要进行字符串解析,而在写入时需要先用字符串格式化按指定的格式写入字符串进行操作。相比而言.

SYS 系统目录结构/sys/sys/下的目录结构是经过精心设计的:在 /sys/devices 下是所有设备的真实对象,包括如视频卡和以太网卡等真实的设备,也包括 ACPI 等不那么显而易见的真实设备、还有 tty, bonding 等纯粹虚拟的设备;在其它目录如 class, bus 等中则在分类的目录中含有大量对 devices 中真实对象引用的符号链接文件。/sys/devices这是内核对系统中所有设备的分层次表达模型,也是 /sys 文件系统管理设备的最重要的目录结构/sys/dev这个目录下维护一个按字符设备和块设备的主次号码(major:minor)链接到真实的设备(/sys/devices下)的符号链接文件,它是在内核 2.6.26 首次引入;/sys/bus这是内核设备按总线类型分层放置的目录结构,devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的一部分;/sys/class这是按照设备功能分类的设备模型,如系统所有输入设备都会出现在 /sys/class/input 之下,而不论它们是以何种总线连接到系统。它也是构成 Linux 统一设备模型的一部分;/sys/block这里是系统中当前所有的块设备所在,按照功能来说放置在 /sys/class 之下会更合适,在 2.6.26 内核中已正式移到 /sys/class/block/sys/firmware这里是系统加载固件机制的对用户空间的接口,关于固件有专用于固件加载的一套API/sys/fs这里按照设计是用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点,但目前只有 fuse,gfs2 等少数文件系统支持 sysfs 接口,一些传统的虚拟文件系统(VFS)层次控制参数仍然在 sysctl (/proc/sys/fs) 接口中中;/sys/kernel这里是内核所有可调整参数的位置,目前只有 uevent_helper, kexec_loaded, mm, 和新式的 slab 分配器等几项较新的设计在使用它,其它内核可调整参数仍然位于 sysctl (/proc/sys/kernel) 接口中/sys/module这里有系统中所有模块的信息,不论这些模块是以内联(inlined)方式编译到内核映像文件(vmlinuz)中还是编译为外部模块(ko文件),都可能会出现在 /sys/module 中/sys/power这里是系统中电源选项,这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机、重启等。/sys/slab(内核2.6.24 以后移至 /sys/kernel/slab)SLAB 内存分配器的实现[root@ht8 include]# cat /proc/modulesedd 14503 0 - Live 0xffffffffc05ad000st 54238 0 - Live 0xffffffffc0a5a000lp 17759 0 - Live 0xffffffffc0a40000parport_pc 28205 0 - Live 0xffffffffc05a5000sch_netem 17204 0 - Live 0xffffffffc0a3a000nfnetlink_queue 18197 0 - Live 0xffffffffc0a34000nfnetlink_log 17892 0 - Live 0xffffffffc0a54000bluetooth 548787 0 - Live 0xffffffffc09ad000rfkill 22391 1 bluetooth, Live 0xffffffffc09a1000vsock_diag 12610 0 - Live 0xffffffffc099c000tcp_diag 12591 0 - Live 0xffffffffc0997000udp_diag 12801 0 - Live 0xffffffffc0992000inet_diag 18949 2 tcp_diag,udp_diag, Live 0xffffffffc0988000unix_diag 12601 0 - Live 0xffffffffc0983000af_packet_diag 12611 0 - Live 0xffffffffc097e000netlink_diag 12669 0 - Live 0xffffffffc0973000xt_multiport 12798 49 - Live 0xffffffffc0979000xt_set 18141 4 - Live 0xffffffffc096d000iptable_mangle 12695 1 - Live 0xffffffffc0968000iptable_raw 12678 1 - Live 0xffffffffc0963000ip_set_hash_ip 31658 2 - Live 0xffffffffc0956000ipip 13465 0 - Live 0xffffffffc092f000ip_set_hash_net 36021 2 - Live 0xffffffffc094c000tunnel4 13252 1 ipip, Live 0xffffffffc0947000ip_tunnel 25163 1 ipip, Live 0xffffffffc0927000binfmt_misc 17468 1 - Live 0xffffffffc0921000rpcsec_gss_krb5 35549 0 - Live 0xffffffffc0917000auth_rpcgss 59415 1 rpcsec_gss_krb5, Live 0xffffffffc0937000nfsv4 584056 2 - Live 0xffffffffc0887000dns_resolver 13140 1 nfsv4, Live 0xffffffffc081f000nfs 262005 2 nfsv4, Live 0xffffffffc0846000lockd 98048 1 nfs, Live 0xffffffffc082d000grace 13515 1 lockd, Live 0xffffffffc0828000fscache 64980 2 nfsv4,nfs, Live 0xffffffffc080e000veth 13458 0 - Live 0xffffffffc0809000xt_statistic 12601 14 - Live 0xffffffffc0804000xt_nat 12681 49 - Live 0xffffffffc07ff000xt_recent 18500 10 - Live 0xffffffffc07f5000ipt_REJECT 12541 37 - Live 0xffffffffc07f0000nf_reject_ipv4 13373 1 ipt_REJECT, Live 0xffffffffc07da000ip_set 45799 3 xt_set,ip_set_hash_ip,ip_set_hash_net, Live 0xffffffffc07e3000ip_vs 145458 0 - Live 0xffffffffc07b5000ip6table_nat 12864 0 - Live 0xffffffffc07b0000nf_conntrack_ipv6 18935 1 - Live 0xffffffffc07aa000nf_defrag_ipv6 35104 1 nf_conntrack_ipv6, Live 0xffffffffc079c000nf_nat_ipv6 14131 1 ip6table_nat, Live 0xffffffffc0793000ip6_tables 26912 1 ip6table_nat, Live 0xffffffffc0787000xt_comment 12504 454 - Live 0xffffffffc0782000xt_mark 12563 30 - Live 0xffffffffc077d000ipt_MASQUERADE 12678 4 - Live 0xffffffffc0773000nf_nat_masquerade_ipv4 13463 1 ipt_MASQUERADE, Live 0xffffffffc0778000nf_conntrack_netlink 36396 0 - Live 0xffffffffc0769000iptable_nat 12875 1 - Live 0xffffffffc0764000nf_conntrack_ipv4 15053 11 - Live 0xffffffffc075f000nf_defrag_ipv4 12729 1 nf_conntrack_ipv4, Live 0xffffffffc075a000nf_nat_ipv4 14115 1 iptable_nat, Live 0xffffffffc0751000xt_addrtype 12676 23 - Live 0xffffffffc074c000iptable_filter 12810 1 - Live 0xffffffffc0650000xt_conntrack 12760 10 - Live 0xffffffffc0744000nf_nat 26583 4 xt_nat,nf_nat_ipv6,nf_nat_masquerade_ipv4,nf_nat_ipv4, Live 0xffffffffc06e0000nf_conntrack 139264 9 ip_vs,nf_conntrack_ipv6,nf_nat_ipv6,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4,nf_nat_ipv4,xt_conntrack,nf_nat, Live 0xffffffffc0721000br_netfilter 22256 0 - Live 0xffffffffc0635000bridge 151336 1 br_netfilter, Live 0xffffffffc06fb000stp 12976 1 bridge, Live 0xffffffffc0630000llc 14552 2 bridge,stp, Live 0xffffffffc060a000dm_thin_pool 70389 13 - Live 0xffffffffc06e8000dm_persistent_data 75275 1 dm_thin_pool, Live 0xffffffffc063c000dm_bio_prison 18209 1 dm_thin_pool, Live 0xffffffffc0614000dm_bufio 28014 1 dm_persistent_data, Live 0xffffffffc0628000loop 28072 4 - Live 0xffffffffc05d7000vmw_vsock_vmci_transport 30620 1 - Live 0xffffffffc061f000vsock 36367 3 vsock_diag,vmw_vsock_vmci_transport, Live 0xffffffffc05cd000sunrpc 358543 8 rpcsec_gss_krb5,auth_rpcgss,nfsv4,nfs,lockd, Live 0xffffffffc0687000sb_edac 32114 0 - Live 0xffffffffc05c4000coretemp 13444 0 - Live 0xffffffffc060f000iosf_mbi 15582 0 - Live 0xffffffffc05fb000crc32_pclmul 13133 0 - Live 0xffffffffc05e9000ghash_clmulni_intel 13273 0 - Live 0xffffffffc05f0000aesni_intel 189456 0 - Live 0xffffffffc0657000lrw 13286 1 aesni_intel, Live 0xffffffffc061a000gf128mul 15139 1 lrw, Live 0xffffffffc05bf000ppdev 17671 0 - Live 0xffffffffc05e0000glue_helper 13990 1 aesni_intel, Live 0xffffffffc05f6000ablk_helper 13597 1 aesni_intel, Live 0xffffffffc0597000pcspkr 12718 0 - Live 0xffffffffc0572000cryptd 21190 3 ghash_clmulni_intel,aesni_intel,ablk_helper, Live 0xffffffffc0603000sg 40719 0 - Live 0xffffffffc058c000joydev 17389 0 - Live 0xffffffffc057e000i2c_piix4 22401 0 - Live 0xffffffffc0585000vmw_vmci 67168 1 vmw_vsock_vmci_transport, Live 0xffffffffc0560000vmw_balloon 18094 0 - Live 0xffffffffc03a9000parport 46395 3 lp,parport_pc,ppdev, Live 0xffffffffc05b2000ip_tables 27126 4 iptable_mangle,iptable_raw,iptable_nat,iptable_filter, Live 0xffffffffc059d000xfs 997768 14 - Live 0xffffffffc046b000libcrc32c 12644 5 ip_vs,nf_nat,nf_conntrack,dm_persistent_data,xfs, Live 0xffffffffc03a4000sr_mod 22416 0 - Live 0xffffffffc03d9000cdrom 42600 1 sr_mod, Live 0xffffffffc045f000ata_generic 12923 0 - Live 0xffffffffc039f000pata_acpi 13053 0 - Live 0xffffffffc0279000sd_mod 46281 3 - Live 0xffffffffc0392000crc_t10dif 12912 1 sd_mod, Live 0xffffffffc02ae000crct10dif_generic 12647 0 - Live 0xffffffffc038d000vmwgfx 291993 1 - Live 0xffffffffc0416000drm_kms_helper 186531 1 vmwgfx, Live 0xffffffffc03e7000syscopyarea 12529 1 drm_kms_helper, Live 0xffffffffc0388000sysfillrect 12701 1 drm_kms_helper, Live 0xffffffffc0306000sysimgblt 12640 1 drm_kms_helper, Live 0xffffffffc0301000fb_sys_fops 12703 1 drm_kms_helper, Live 0xffffffffc028e000ttm 96673 1 vmwgfx, Live 0xffffffffc03c0000crct10dif_pclmul 14307 1 - Live 0xffffffffc02b3000mptsas 62316 0 - Live 0xffffffffc03af000crct10dif_common 12595 3 crc_t10dif,crct10dif_generic,crct10dif_pclmul, Live 0xffffffffc03e2000drm 456166 4 vmwgfx,drm_kms_helper,ttm, Live 0xffffffffc0317000crc32c_intel 22094 1 - Live 0xffffffffc027e000ata_piix 35052 2 - Live 0xffffffffc026f000scsi_transport_sas 41224 1 mptsas, Live 0xffffffffc02f5000mptscsih 40150 1 mptsas, Live 0xffffffffc030c000libata 243094 3 ata_generic,pata_acpi,ata_piix, Live 0xffffffffc02b8000mptbase 106036 2 mptsas,mptscsih, Live 0xffffffffc0293000serio_raw 13434 0 - Live 0xffffffffc0289000vmxnet3 58104 0 - Live 0xffffffffc025f000drm_panel_orientation_quirks 17180 1 drm, Live 0xffffffffc0259000dm_mirror 22326 0 - Live 0xffffffffc0252000dm_region_hash 20813 1 dm_mirror, Live 0xffffffffc023f000dm_log 18411 2 dm_mirror,dm_region_hash, Live 0xffffffffc024c000dm_mod 124501 37 dm_thin_pool,dm_bufio,dm_mirror,dm_log, Live 0xffffffffc021f000

原文作者:首页 - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛

原文地址:linux设备管理之主/次设备号 - 圈点 - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛(版权归原文作者所有,侵权留言联系删除)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3