在imx6sx硬件平臺(恩智浦嵌入式ARM)上使用Linux 3.14.52。Linux,ARM:爲什麼gpiochip <num>僅在引導時存在I2C GPIO擴展器時才創建?
問題是,設備樹中指定的PCF8575 I2C GPIO擴展器沒有實例化爲/ sys/class/gpio結構中的設備,除非它們在內核引導期間存在。這些器件列在/sys/bus/i2c/devices/i2c-1
(I2C總線1)結構中,但沒有在/sys/class/gpio
結構中給出GPIO芯片。
有沒有辦法讓這些設備在啓動後被指定爲gpiochip,一旦它們被添加到系統中?
在以前的(PowerPC)平臺上,設備樹中列出的所有設備都分配了gpiochip,無論它們在內核引導期間是否打開。但是通過我們的ARM平臺,這些設備在內核啓動時必須可用。我試過儘可能地將內核i2c/gpio選項(通過.config)更改爲儘可能接近前一個平臺,但這似乎沒有效果。
你的內核版本有變化嗎?當設備被實際探測時,較新的內核可能只是簡單地創建sysfs條目。也許查看源代碼,看看GPIO擴展器的探測功能發生了什麼。 – bodangly
是的,內核已經改變。 PowerPC是2.6.37.6所以完全不同的版本。同意這可能是改變的原因。我想我可以嘗試深入研究內核源碼,但不知道探針的位置;也許gpiolib.c?希望有一個後啓動的方式來處理這個,而不用改變內核。 – Bruce
正如您在我的答案中所看到的,我可以確認只有在設備探測時纔會添加它。 – bodangly