前情
基於 linux gpio 會在 /sys/class/gpio 目錄下會產生 export, unexport 檔案,當然也有 gpiochipx 檔案,gpiochipx 是對引腳的管理,如某一個 chip 可能控制著一定數量的引腳,在相應目錄下 ngpio 是控制的數量。
執行 echo 4 > /sys/class/gpio/export 的時候會在 /sys/class/gpio 目錄下產生 gpio4 目錄,在這個目錄下會有 如 value, edge, direction 等相關檔案,value 是當前值, edge 是引腳觸發方式,direction 是引腳輸入,輸出方式。但是 echo 之後如何產生這個的呢。 過程掃描 在一開始的初始化過程中有函數 gpiolib_dev_init 被匯出為 core_initcall (gpio/gpiolib.c) 此函數調用 bus_register 註冊 gpio ,對應產生 /sys/bus/gpio 目錄 再調用 alloc_chrdev_region 再進行gpiochip 的設定 gpiochip_setup_devs 這會對總數量 的 gpiochip 進行處理,對每個調用 gpiochip_sysfs_register,檔案到了 gpiolib-sysfs.c 中 調用 device_create_wtih_groups來建立 gpiochip%d 此函數對應的參數為 gpio_class 即一個 class 類 此 class 定義的名稱是 gpio, 同時定義了 attr attr 包括 export - export _store, unexport - unexport_store 前者是屬性名稱,後者是函數 也就是 echo 動作為觸發 export_store 函數 此函數 調用 gpio_request 準備引腳 再調用 gpiod_export 在此函數中調用 device_create_with_groups 來建立 gpio%d,以及其它事項 備忘 當然這裡還有很多細節尚不清楚,只是一個概覽,後期再來補充