Linux – sysfs

Loading

幾天前公司同事遇到一個怪問題就是使用 ethtool 看網卡的資訊時卻讀不出來相關的資訊.不過很奇怪的事直接看 /sys/class/net/eth0 目錄下網卡的相關資訊還是存在的,但 /sys/ 目錄資料有點多這邊做一下簡介.

從核心 Linux 2.6.15 版後,Linux 全面採用 sysfs 取代過去的 devfs

sysfs – 核心 2.6 後的新檔案系統,裝置名稱還是存放在 /dev/ 目錄下但是多了一個 /sys/ 的目錄 (該目錄是可瀏覽的),裡面存放當前硬體相對應的基本資訊.udev 則是透過 /sys/ 目錄的資訊創建出相對應的硬體設備節點 /dev/.

udev – 是管理目錄 /dev 的新方法,傳統的方式需要在 /dev/ 預先產生可能用不到的裝置名稱,udev 主要是依賴於 sysfs 提供的資訊與用戶提供的規則(Rule) 來創建相對應於系統中存在的 /dev 設備節點名稱.

首先先來看看 /proc 和 /sys 的異同

  • /proc
    這個目錄下的資訊都是和核心相關的資料.如 CPU 以及其他硬體的相關設定值.
  • /sys
    從 2.6 核心開始硬體的系統資訊以更階層式目錄的架構來存放,檔案內容類似於 /proc .

目前新版的 Linux 作業系統都是採用 kernel 2.6 的架構,所以如果想要查詢系統狀態都可以在 /sys 目錄下找到,我們來看一下 /sys 目錄的架構吧!!

  • /sys/block
    所有 block 的裝置都顯示在此,不過他只是個連結真正會對應到 /sys/devices/ 等相對應的裝置下.
  • /sys/bus
    以 bus 來區分系統裝置,如 PCI Express 就會儲存在 /sys/bus/pci_express ,但缺點是裝置皆以數字來排列順序. 我們可以在 /sys/bus/pci_express/devices/0000:00:01.0:pci00 … 之類的資料. 比較不好查詢,需要搭配 #lspci 使用.
  • /sys/class
    子目錄下以功能區分,如網卡裝置就存放在/sys/class/net
  • /sys/dev
    雖然區分成 block 和 char 裝置,但實際上也只是個連結,最終是連結至 /sys/devices 下.
  • /sys/devices
    系統上所有的裝置都可以在此找到.
  • /sys/firmware
    ??
  • /sys/fs
    Linux 的檔案系統所使用到的裝置
  • /sys/hypervisor
    與虛擬化 XEN 相關的裝置.
  • /sys/kernel
    kexec 與 kdump 相關的目錄.
  • /sys/module
    目前有使用到的 modules.
  • /sys/power
    和電源管理相關的. .

很多基本上我也還沒搞清楚,不過要找系統資料時通常最常使用的是 /sys/class 和 /sys/devices/system 這兩個目錄.關於 udev 的詳細介紹請參考 https://benjr.tw/10632

沒有解決問題,試試搜尋本站其他內容

4 thoughts on “Linux – sysfs

  1. 您好,我現在環境上沒有/sys的filesys ,
    想請問如何將/sys加入filesys到環境中
    感謝

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料