获取内核模块中的根设备

时间:2016-09-04 16:53:42

标签: linux kernel-module

我为此做了一些网络搜索,但只能找到有关获取与设备节点关联的内核模块的结果。无论如何我可以获得当前系统根设备的主要和次要数量,如果适用,根设备的父设备(例如,https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIhhjGu76G...P0Gzu7B5aAnoYUd { "data": { "title": "notification_title", "body": "notification_body" }, "to" : "jh578_gsh....jhHGFJ76FH" } /dev/sda的“父”)?内核是否导出了一些用于获取此功能的函数,还是我需要间接获取它?

1 个答案:

答案 0 :(得分:0)

没有与设备节点关联的模块。可能你知道根目录是进程本地的东西(进程结构存储根目录的inode引用---这可以通过特权chroot(2)系统调用来更改)和当前工作目录(解决不以/开始的路径

如果您想知道负责根目录的设备,您有两个选择:

  • 您的流程尚未成为chroot(2)系统调用,因此您opendir("/")然后对其执行fstat(2)(或者您可以执行stat(2)系统调用在"/"目录上)。这将为根目录所在的设备提供st_dev返回的struct stat字段。它被格式化为dev_t个数字,其中一些位代表主要数字,一些代表次要数字。您可以使用MKDEV(ma,mi)中定义的MAJOR(dev)MINOR(dev)以及<linux/kdev_t.h>宏来访问主要和次要号码。要获取物理磁盘,只需使用0xf0屏蔽次要编号,您将获得整个磁盘的次要编号。

  • 您的进程已进行chroot(2)系统调用,因此您无权访问系统中的真实根目录。如果您可以访问/proc文件系统,那么可能您可以调用mount(1)命令来获取挂载表。您可以在该表中搜索/条目,然后获取/dev/sd<disk>条目。获得设备后,获取父设备很容易。您可以像在最后一点那样屏蔽该数字,以获取物理磁盘的次要编号。

您还可以访问/proc/diskstats文件,该文件显示每个块设备的统计信息。您将在每行的前三个字段中获取主要,次要和设备名称。

有些磁盘安排不允许分区,如RAID设备或卷管理器磁盘。在这些情况下,访问物理磁盘(或磁盘,因为可能有多个)更加困难。