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 - 允許讀取引腳的當前值,該值可能

與上拉/下拉值不同,如果引腳正由使用者空間驅動