Linux 核心 sys 檔案系統介紹3

2021-06-02 15:04:46 字數 4937 閱讀 2359

常見 sysfs 屬性的功能

使用 sysfs 的關鍵就是掌握這些 sysfs 屬性的用法,下面以一些常見的 sysfs 屬性來展示它的用法;

使用裝置(pci)的 sysfs 屬性檔案

# ps xfa |grep xorg

2001 tty1 ss+ 2:24 _ /usr/bin/xorg :0 -nr -verbose -auth

/var/run/gdm/auth-for-gdm-nprkzk/database -nolisten tcp vt1

# lsof -np -p 2001

xorg 2001 root mem reg 8,3 617732 231033

/usr/lib/xorg/modules/drivers/sis_drv.so

[...]

xorg 2001 root mem reg 0,0 134217728 5529

/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/resource0

xorg 2001 root mem reg 0,0 131072 5531

/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/resource1

[...]

xorg 2001 root 7u reg 0,0 256 5504

/sys/devices/pci0000:00/0000:00:00.0/config

xorg 2001 root 8u unix 0xdbe66000 0t0 8756 socket

xorg 2001 root 9u reg 0,0 256 5528

/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/config

注意到此 xorg 伺服器是以記憶體對映 (mem) 的形式開啟了 "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/resource0" 和 "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/resource1" ,同時以檔案讀寫形式 (7u,9u) 開啟了 "/sys/devices/pci0000:00/0000:00:00.0/config" 和 "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/config"

事實上, pci 裝置對應的 kobject 目錄下的 config 正是代表pci裝置的「配置空間」,對於普通 pci (非pci-e)裝置而言,其配置空間大小一般是 256位元組,這個空間可以使用十六進製制工具 dump 出來,如下。(有關 pci 裝置本身的三種位址空間,請參考附錄 ldd3)

#hexdump -c /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/config

00000000 39 10 30 63 03 00 30 02 00 00 00 03 00 00 00 80

|9.0c..0.........|

00000010 08 00 00 d8 00 00 00 e1 01 d0 00 00 00 00 00 00

|................|

00000020 00 00 00 00 00 00 00 00 00 00 00 00 19 10 30 1b

|..............0.|

00000030 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00

|....@...........|

00000040 01 50 02 06 00 00 00 00 00 00 00 00 00 00 00 00

|.p..............|

00000050 02 00 30 00 0b 02 00 ff 00 00 00 00 00 00 00 00

|..0.............|

00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

|................|

*00000100

這個空間正好是 256位元組大小,熟悉 pci 的人們還可以知道,從 pci 配置空間可以讀到有關此 pci 裝置的很多有用資訊,如廠商**,裝置**,irq 號碼等;前四個位元組 0x39 0x10 0x30 0x63 就是按小端(little endian)存放的2個短整數,因此其 pci 廠商號碼和 pci 裝置號碼分別是 0x1039 和 0x6330

# lspci -v -d 1039:6330

01:00.0 vga compatible controller: silicon integrated systems

[sis] 661/741/760 pci/agp

or 662/761gx pcie vga display adapter (prog-if 00 [vga controller])

subsystem: elitegroup computer systems device 1b30

flags: 66mhz, medium devsel

bist result: 00

memory at d8000000 (32-bit, prefetchable) [size=128m]

memory at e1000000 (32-bit, non-prefetchable) [size=128k]

i/o ports at d000 [size=128]

capabilities: [40] power management version 2

capabilities: [50] agp version 3.0

在 pci 裝置上除了有 config 是配置空間對使用者的介面以外,還有 resource 是資源空間,對應著 pci 裝置的可對映記憶體空間;此外 pci 裝置還提供了很多介面,全部列表如下:

# ls -lu /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/

總計 0

-rw-r--r-- 1 root root 4096 12-09 00:28 uevent

-r--r--r-- 1 root root 4096 12-09 00:27 resource

-r--r--r-- 1 root root 4096 12-09 00:27 vendor

-r--r--r-- 1 root root 4096 12-09 00:27 device

-r--r--r-- 1 root root 4096 12-09 00:28 subsystem_vendor

-r--r--r-- 1 root root 4096 12-09 00:28 subsystem_device

-r--r--r-- 1 root root 4096 12-09 00:27 class

-r--r--r-- 1 root root 4096 12-09 00:27 irq

-r--r--r-- 1 root root 4096 12-09 00:28 local_cpus

-r--r--r-- 1 root root 4096 12-09 00:28 local_cpulist

-r--r--r-- 1 root root 4096 12-09 00:28 modalias

-rw------- 1 root root 4096 12-09 00:28 enable

-rw-r--r-- 1 root root 4096 12-09 00:28 broken_parity_status

-rw-r--r-- 1 root root 4096 12-09 00:28 msi_bus

lrwxrwxrwx 1 root root 0 12-09 00:28 subsystem ->

../../../../bus/pci

drwxr-xr-x 2 root root 0 12-09 00:28 power

-rw-r--r-- 1 root root 256 12-08 23:03 config

-rw------- 1 root root 134217728 12-08 23:03 resource0

-rw------- 1 root root 134217728 12-09 00:28 resource0_wc

-rw------- 1 root root 131072 12-08 23:03 resource1

-rw------- 1 root root 128 12-09 00:28 resource2

-r-------- 1 root root 0 12-09 00:28 rom

可以看到很多其它屬性檔案,這些屬性檔案的許可權位也都是正確的,有 w 許可權位的才是可以寫入。其中大小為 4096位元組的屬性一般是純文字描述的屬性,可以直接 cat 讀出和用 echo 字串的方法寫入;其它非 4096位元組大小的一般是二進位制屬性,類似於上面的 config 屬性檔案;關於純文字屬性和二進位制屬性,在下文 程式設計實踐:新增sysfs支援 一節會進一步說明。

有了這乙個 pci 裝置的示例可以知道,有了乙個 pci 裝置的 /sys/devices/ 裝置物件,去訪問它的各項屬性和設定屬性都非常簡單。

Linux 核心 sys 檔案系統介紹5

使用 scsi host 的 scan 屬性 在具有使用 scsi 匯流排連線的主機上,與 pci類似的是也採用四個號碼作為一組來描述乙個裝置,其中位於最頂層的是 scsi host。我們從裝置類別 class 為起點來探索 ls lu sys class scsi host 總計 0 lrwxrw...

efi的sys檔案系統介面

在driver firmware efi efi.c 中通過subsys initcall efisubsys init 來初始化efisubsys static int init efisubsys init void error generic ops register if error got...

linux核心檔案系統燒寫

1.製作並燒寫檔案系統 1 busybox的安裝 把busybox的壓縮包放到linux系統下 解壓縮 make menuconfig make make後會在 install下生成bin linuxrc sbin usr,把這些資料夾放到根系統中 2 把root mkfs的壓縮包解壓,然後修改ro...