Configfs GPIO 模擬器¶
Configfs GPIO 模擬器 (gpio-sim) 提供了一種建立模擬 GPIO 晶片用於測試的方式。這些晶片暴露的引腳可以透過標準 GPIO 字元裝置介面訪問,也可以透過 sysfs 屬性進行操作。
建立模擬晶片¶
gpio-sim 模組註冊了一個名為 'gpio-sim' 的 configfs 子系統。有關 configfs 檔案系統的詳細資訊,請參閱 configfs 文件。
使用者可以建立 configfs 組和專案的層次結構,並修改暴露屬性的值。一旦晶片例項化,這個層次結構將被轉換為適當的裝置屬性。一般結構如下:
組: /config/gpio-sim
這是 gpio-sim configfs 樹的頂級目錄。
組: /config/gpio-sim/gpio-device
屬性: /config/gpio-sim/gpio-device/dev_name
屬性: /config/gpio-sim/gpio-device/live
這是一個表示 GPIO 平臺裝置的目錄。'dev_name' 屬性是隻讀的,允許使用者空間讀取平臺裝置名稱(例如 'gpio-sim.0')。'live' 屬性允許在裝置完全配置後觸發其實際建立。接受的值為:'1' 表示啟用模擬裝置,'0' 表示停用並拆除它。
組: /config/gpio-sim/gpio-device/gpio-bankX
屬性: /config/gpio-sim/gpio-device/gpio-bankX/chip_name
屬性: /config/gpio-sim/gpio-device/gpio-bankX/num_lines
該組表示頂級平臺裝置下的 GPIO 引腳組。 'chip_name' 屬性是隻讀的,允許使用者空間讀取該引腳組的裝置名稱。 'num_lines' 屬性允許指定該引腳組暴露的引腳數量。
組: /config/gpio-sim/gpio-device/gpio-bankX/lineY
屬性: /config/gpio-sim/gpio-device/gpio-bankX/lineY/name
該組表示偏移 Y 處的一個單獨引腳。'name' 屬性允許設定引腳名稱,如同 'gpio-line-names' 屬性所表示的那樣。
項: /config/gpio-sim/gpio-device/gpio-bankX/lineY/hog
屬性: /config/gpio-sim/gpio-device/gpio-bankX/lineY/hog/name
屬性: /config/gpio-sim/gpio-device/gpio-bankX/lineY/hog/direction
該項使得 gpio-sim 模組佔用關聯的引腳。'name' 屬性指定要使用的核心內部消費者名稱。'direction' 屬性指定佔用的方向,並且必須是以下之一:'input'(輸入)、'output-high'(高電平輸出)和 'output-low'(低電平輸出)。
在每個 bank 目錄下,有一組屬性可用於配置新晶片。此外,使用者可以在晶片目錄內 mkdir() 子目錄,這些子目錄允許為特定線路傳遞附加配置。這些子目錄的名稱必須採用以下形式:'line<offset>'(例如 'line0'、'line20' 等),因為模組將使用該名稱將配置分配給給定偏移處的特定線路。
配置完成後,必須將 'live' 屬性設定為 1 才能例項化晶片。可以將其設回 0 以銷燬模擬晶片。模組將同步等待新的模擬裝置成功探測,如果未發生,寫入 'live' 將導致錯誤。
模擬 GPIO 晶片也可以在裝置樹中定義。相容字串必須是:"gpio-simulator"。支援的屬性有:
"gpio-sim,label"- 晶片標籤
其他標準 GPIO 屬性(如 "gpio-line-names"、"ngpios" 或 "gpio-hog")也受支援。詳情請參閱 GPIO 文件。
一個定義 GPIO 模擬器的裝置樹程式碼示例
gpio-sim {
compatible = "gpio-simulator";
bank0 {
gpio-controller;
#gpio-cells = <2>;
ngpios = <16>;
gpio-sim,label = "dt-bank0";
gpio-line-names = "", "sim-foo", "", "sim-bar";
};
bank1 {
gpio-controller;
#gpio-cells = <2>;
ngpios = <8>;
gpio-sim,label = "dt-bank1";
line3 {
gpio-hog;
gpios = <3 0>;
output-high;
line-name = "sim-hog-from-dt";
};
};
};
操作模擬引腳¶
每個模擬 GPIO 晶片在其裝置目錄下為每個暴露的引腳建立一個獨立的 sysfs 組(例如 /sys/devices/platform/gpio-sim.X/gpiochipY/)。每個組的名稱形式為:'sim_gpioX',其中 X 是引腳的偏移量。每個組內有兩個屬性:
pull- 允許讀取和設定當前模擬的拉(pull)設定,寫入時,值必須是以下之一:
'pull-up'(上拉),'pull-down'(下拉)value- 允許讀取引腳的當前值,該值可能與上拉/下拉值不同,如果引腳正由使用者空間驅動