Linux 核心 sys 檔案系統介紹5

2021-06-02 15:04:46 字數 3537 閱讀 6412

使用 scsi_host 的 scan 屬性

在具有使用 scsi 匯流排連線的主機上,與 pci類似的是也採用四個號碼作為一組來描述乙個裝置,其中位於最頂層的是 scsi_host。

我們從裝置類別 /class/為起點來探索:

# ls -lu /sys/class/scsi_host

總計 0

lrwxrwxrwx 1 root root 0 12-13 01:59 host0 ->

../../devices/pci0000:00/0000:00:02.5/host0/scsi_host/host0

lrwxrwxrwx 1 root root 0 12-13 01:59 host1 ->

../../devices/pci0000:00/0000:00:02.5/host1/scsi_host/host1

注意這是 2.6.27 核心的最新變化,在 /sys/class/ 下的都改為符號鏈結,真實的 kobject 都存在於 /sys/devices/ 中;我們這裡探索其中的 host0 這個 scsi 控制器:

# readlink -f /sys/class/scsi_host/host0

/sys/devices/pci0000:00/0000:00:02.5/host0/scsi_host/host0

# ls -lu /sys/devices/pci0000:00/0000:00:02.5/host0/scsi_host/host0

總計 0

-rw-r--r-- 1 root root 4096 12-13 02:02 uevent

lrwxrwxrwx 1 root root 0 12-13 02:02 subsystem ->

../../../../../../class/scsi_host

lrwxrwxrwx 1 root root 0 12-13 02:02 device -> ../../../host0

-r--r--r-- 1 root root 4096 12-13 02:02 unique_id

-r--r--r-- 1 root root 4096 12-13 02:02 host_busy

-r--r--r-- 1 root root 4096 12-13 02:02 cmd_per_lun

-r--r--r-- 1 root root 4096 12-13 02:02 can_queue

-r--r--r-- 1 root root 4096 12-13 02:02 sg_tablesize

-r--r--r-- 1 root root 4096 12-13 02:02 unchecked_isa_dma

-r--r--r-- 1 root root 4096 12-13 02:02 proc_name

--w------- 1 root root 4096 12-13 02:02 scan

-rw-r--r-- 1 root root 4096 12-13 02:02 state

-rw-r--r-- 1 root root 4096 12-13 02:02 supported_mode

-rw-r--r-- 1 root root 4096 12-13 02:02 active_mode

-r--r--r-- 1 root root 4096 12-13 02:02 prot_capabilities

-r--r--r-- 1 root root 4096 12-13 02:02 prot_guard_type

drwxr-xr-x 2 root root 0 12-13 02:02 power

對這些屬性檔案解釋如下:

有四個 scsi 特有的可寫引數: scan,state,supported_mode,active_mode;可以向其中寫入不同的引數來控制此 scsi 控制器的各種狀態;

其它一些可讀屬性用於讀取這個 scsi 控制器的一些當前值;

其中的 scan 屬性檔案在除錯一些 scsi 硬體驅動時很有用,它是只寫的,可以寫入三個至四個以空格分開的整數,用於分別指定對應的 host, channel, id, lun 進行重新搜尋。且這個 scan 屬性支援以"-"作為萬用字元,如以下命令可以執行讓整個 scsi_host 進行重新搜尋,這個功能用於除錯某些對熱挺拔實現不完善的 scsi 驅動程式很有用:

# echo '- - -' >/sys/devices/pci0000:00/0000:00:02.5

/host0/scsi_host/host0/scan

核心模組中的 sysfs 屬性檔案

以乙個 8139too 模組為例解釋在這個 kboject 下每乙個屬性的用途;

# find /sys/module/8139too/ -ls

6408 0 -r--r--r-- 1 root root 4096 12月 13 02:17

/sys/module/8139too/version

6412 0 drwxr-xr-x 2 root root 0 12月 13 02:17

/sys/module/8139too/sections

6433 0 drwxr-xr-x 2 root root 0 12月 13 02:17

/sys/module/8139too/notes

6434 0 -r--r--r-- 1 root root 36 12月 13 02:17

/sys/module/8139too/notes/.note.gnu.build-id

6486 0 drwxr-xr-x 2 root root 0 12月 13 02:17

/sys/module/8139too/drivers

6487 0 lrwxrwxrwx 1 root root 0 12月 13 02:17

/sys/module/8139too/drivers/pci:8139too ->

../../../bus/pci/drivers/8139too

其中的屬性檔案都是唯讀的,用於提供資訊。從 version, srcversion 上可以了解到這個模組所宣告的版本號,原始碼版本號, refcnt 是模組引用計數, sections 屬性組中有一些模組載入至記憶體的相應節資訊, drivers/ 目錄中是對所提供的驅動的鏈結;

因為模組是核心驅動程式設計的最佳選擇,而乙個模組有可能提供多個驅動程式,因而在未知乙個裝置在用哪乙個驅動的情況下可以先從 /sys/module/ 查詢相應模組的情況,再從 drivers/ 發現出真正的驅動程式。或者也可以完全反過來利用這些資訊,先用 lspci/lshw 等工具找到 /sys/devices/ 下的裝置節點,再從其裝置的 driver 鏈結找到 /sys/bus/*/drivers/ 下的 device_driver, 再從 device_driver 下的 module 鏈結找到 /sys/module/*/,這樣就可以得到已載入模組中空間是哪乙個模組在給乙個裝置提供驅動程式。

Linux 核心 sys 檔案系統介紹3

常見 sysfs 屬性的功能 使用 sysfs 的關鍵就是掌握這些 sysfs 屬性的用法,下面以一些常見的 sysfs 屬性來展示它的用法 使用裝置 pci 的 sysfs 屬性檔案 ps xfa grep xorg 2001 tty1 ss 2 24 usr bin xorg 0 nr verb...

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...