01
sysfs文件系統控制外設(linux4.8開始廢棄)
眾所周知,linux下一切皆文件,那么應用層如何控制硬件層,同樣是通過 文件I/O的方式來實現的,那、么應用層控制硬件層通常有兩種方式:
1、/dev/ 目錄下為各設備節點,通過對這些設備文件的I/O操作可以實現對底層硬件的操作
2、sysfs 文件系統的主要功能是對系統設備進行管理,它可以產生一個包含所有系統硬件層次的視圖,而 sysfs 文件系統掛載在 /sys 目錄下
一、sys目錄架構
進入到 sys 目錄下,可以看到如下文件:
包括 block、bus、class、dev、devices、firmware、fs、kernel、
modules、power 等
二、sys 目錄介紹
sysfs 是一個基于內存的文件系統,同 devfs 、 proc 文件系統一樣,稱為虛擬文件系統;它的作用是將內核信息以文件的方式提供給應用層使用。
sysfs 文件系統的主要功能便是對系統設備進行管理,它可以產生一個包含所有系統硬件層次的視圖。
sysfs 文件系統掛載在 /sys 目錄下,
/sys/devices:
這是系統中所有設備存放的目錄,也就是系統中的所有設備在 sysfs 中的呈現、表達,也是 sysfs 管理設備的最重要的目錄結構。
/sys/block:
塊設備的存放目錄,這是一個過時的接口,按照 sysfs 的設計理念,系統所有的設備都存放在/sys/devices 目錄下,所以/sys/block 目錄下的文件通常是鏈接到/sys/devices 目錄下的文件。
/sys/bus:
這是系統中的所有設備按照總線類型分類放置的目錄結構,/sys/devices 目錄下每一種設備都是掛在某種總線下的,譬如 i2c 設備掛在 I2C 總線下。同樣,/sys/bus 目錄下的文件通常也是鏈接到了/sys/devices 目錄。
/sys/class:
這是系統中的所有設備按照其功能分類放置的目錄結構,同樣該目錄下的文件也是鏈接到了/sys/devices 目錄。按照設備的功能劃分組織在/sys/class 目錄下,譬如/sys/class/leds目錄中存放了所有的 LED 設備,/sys/class/input 目錄中存放了所有的輸入類設備。
/sys/dev:
這是按照設備號的方式放置的目錄結構,同樣該目錄下的文件也是鏈接到了/sys/devices 目錄。該目錄下有很多以主設備號:次設備號(major:minor)命名的文件,這些文件都是鏈接文件,鏈接到/sys/devices 目錄下對應的設備。
/sys/firmware:
描述了內核中的固件。
/sys/fs:
用于描述系統中所有文件系統,包括文件系統本身和按文件系統分類存放的已掛載點。
/sys/kernel:
這里是內核中所有可調參數的位置。
/sys/module:
這里有系統中所有模塊的信息。
/sys/power:
這里是系統中電源選項,有一些屬性可以用于控制整個系統的電源狀態。
td {white-space:nowrap;border:1px solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
block | 塊設備的存放目錄,這是一個過時的接口,按照sysfs的設計理念,系統所有的設備都存放在/sys/devides目錄下,所以/sys/block目錄下的文件通常是鏈接到/sys/devices目錄下的文件 |
bus | 這是系統中的所有設備按照總線類型分類放置的目錄結構,/sys/devices 目錄下每一種設備都是掛在某種總線下的,譬如 i2c 設備掛在 I2C 總線下。同樣,/sys/bus 目錄下的文件通常也是鏈接到了/sys/devices 目錄。 |
class | 這是系統中的所有設備按照其功能分類放置的目錄結構,同樣該目錄下的文件也是鏈接到了/sys/devices 目錄。按照設備的功能劃分組織在/sys/class 目錄下,譬如/sys/class/leds目錄中存放了所有的 LED 設備,/sys/class/input 目錄中存放了所有的輸入類設備。 |
dev | 這是按照設備號的方式放置的目錄結構,同樣該目錄下的文件也是鏈接到了/sys/devices 目錄。該目錄下有很多以主設備號:次設備號 (major:minor) 命名的文件,這些文件都是鏈接文件,鏈接到/sys/devices 目錄下對應的設備。 |
devices | 這是系統中所有設備存放的目錄,也就是系統中的所有設備在 sysfs 中的呈現、表達,也是 sysfs 管理設備的最重要的目錄結構。 |
firmware | 描述了內核中的固件。 |
fs | 用于描述系統中所有文件系統,包括文件系統本身和按文件系統分類存放的已掛載點。 |
kernel | 這里是內核中所有可調參數的位置。 |
module | 包含當前系統中已加載的模塊,包括編譯到內核和編譯成模塊(.ko)的驅動 |
power | 這里是系統中電源選項,有一些屬性可以用于控制整個系統的電源狀態。 |
上表顯示的便是 sysfs 文件系統中的目錄,包括 block 、 bus 、 class 、 dev 、 devices 、 firmware 、 fs 、 kernel 、 modules、 power 等,每個目錄下又有許多文件或子目錄,對這些目錄的說明如所示:
Linux 內核中為了盡量降低驅動開發者難度以及接口標準化,就出現了設備驅動框架的概念; Linux 針對各種常見的設備進行分類,譬如 LED 類設備、輸入類設備、 FrameBuffer 類設備、 video 類設備、 PWM 設備等等,并為每一種類型的設備設計了一套成熟的、標準的、典型的驅動實現的框架,這個就叫做設備驅動框架。設備驅動框架為驅動開發和應用層提供了一套統一的接口規范,譬如對 LED 類設備來說,內核提供了 LED 設備驅動框架,驅動工程師編寫 LED 驅動時,使用 LED 驅動框架來開發自己的 LED 驅動程序,這樣做的好處就在于,能夠對上層應用層提供統一、標準化的接口、同時又降低了驅動開發工程師的難度。
02
Libgpiod庫控制外設
包括字符設備文件和塊設備文件,設備文件便是各種硬件設備向應用層提供的一個接口,應用層通過對設備文件的 I/O 操作來操控硬件設備,譬如 LCD 顯示屏、串口、按鍵、攝像頭等等,所以設備文件其實是與硬件設備相互對應的。設備文件通常在/dev/ 目錄下,我們也把/dev 目錄下的文件稱為設備節點。
libgpiod是用于與linux GPIO交互的C庫和工具,從 linux 4.8 后,官方不推薦使用 GPIO sysfs 接口,libgpiod庫封裝了 ioctl 調用和簡單的API接口。
與sysfs方式相比,libgpiod可以保證所有分配的資源,在關閉文件描述符后得到完全釋放,并且擁有sysfs方式接口中不存在的功能(如時間輪詢,一次設置/讀取多個gpio值)。此外libgpiod還包含一組命令行工具,允許用戶使用腳本對gpio進行個性化操作。
目前有六個命令行工具可用
gpiodetect:列舉所有的gpio芯片以及它們名字,標簽和io數目
gpioinfo:列舉所有gpio芯片以及它們的名字,制造商,方向,激活狀態,附加標志等
gpioget:獲取特定gpio引腳的當前值
active-high是高電平 值為1 active-low是低電平 值為0
gpioset :設置特定的當前值
gpiofind :獲取gpiochip的name和offset eg:gpiofind GPIO26 是加上line的名字
gpiomon : 監視特定io上的特定事件
本文章源自奇跡物聯開源的物聯網應用知識庫Cellular IoT Wiki,更多技術干貨歡迎關注收藏Wiki:Cellular IoT Wiki 知識庫(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)
歡迎同學們走進AmazIOT知識庫的世界!
這里是為物聯網人構建的技術應用百科,以便幫助你更快更簡單的開發物聯網產品。
Cellular IoT Wiki初心:
在我們長期投身于蜂窩物聯網 ODM/OEM 解決方案的實踐過程中,一直被物聯網技術碎片化與產業資源碎片化的問題所困擾。從產品定義、芯片選型,到軟硬件研發和測試,物聯網技術的碎片化以及產業資源的碎片化,始終對團隊的產品開發交付質量和效率形成制約。為了減少因物聯網碎片化而帶來的重復開發工作,我們著手對物聯網開發中高頻應用的技術知識進行沉淀管理,并基于 Bloom OS 搭建了不同平臺的 RTOS 應用生態。后來我們發現,很多物聯網產品開發團隊都面臨著相似的困擾,于是,我們決定向全體物聯網行業開發者開放奇跡物聯內部沉淀的應用技術知識庫 Wiki,期望能為更多物聯網產品開發者減輕一些重復造輪子的負擔。
Cellular IoT Wiki沉淀的技術內容方向如下:
奇跡物聯的業務服務范圍:基于自研的NB-IoT、Cat1、Cat4等物聯網模組,為客戶物聯網ODM/OEM解決方案服務。我們的研發技術中心在石家莊,PCBA生產基地分布在深圳、石家莊、北京三個工廠,滿足不同區域&不同量產規模&不同產品開發階段的生產制造任務。跟傳統PCBA工廠最大的區別是我們只服務物聯網行業客戶。
連接我們,和10000+物聯網開發者一起 降低技術和成本門檻
讓蜂窩物聯網應用更簡單~~
哈哈你終于滑到最重要的模塊了,
千萬不!要!劃!走!忍住沖動!~
歡迎加入飛書“開源技術交流群”,隨時找到我們哦~
點擊鏈接如何加入奇跡物聯技術話題群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以獲取加入技術話題群攻略
Hey 物聯網從業者,
你是否有了解過奇跡物聯的官方公眾號“eSIM物聯工場”呢?
這里是奇跡物聯的物聯網應用技術開源wiki主陣地,歡迎關注公眾號,不迷路~
及時獲得最新物聯網應用技術沉淀發布
-
Linux
+關注
關注
87文章
11345瀏覽量
210386 -
內存
+關注
關注
8文章
3055瀏覽量
74327 -
文件系統
+關注
關注
0文章
287瀏覽量
19974
發布評論請先 登錄
相關推薦
評論