Linux 3.14.52をimx6sxハードウェアプラットフォーム(NXP組み込みARM)で使用する。Linux、ARM:gpiochip <num>は、起動時にI2C GPIO Expanderが存在する場合にのみ作成されるのはなぜですか?
デバイスツリーで指定されたPCF8575 I2C GPIOエクスパンダは、カーネルブート中に存在しない限り、/ sys/class/gpio構造内のデバイスとしてインスタンス化されません。デバイスは/sys/bus/i2c/devices/i2c-1
(i2cバス1)構造体にリストされていますが、/sys/class/gpio
構造体にはgpiochipがありません。
これらのデバイスをシステムに追加すると、起動後にこれらのデバイスをgpiochipとして割り当てる方法はありますか?
以前の(PowerPC)プラットフォームでは、デバイスツリーにリストされているすべてのデバイスは、カーネルブート中にオンになっているかどうかにかかわらず、gpiochipに割り当てられました。しかし、ARMプラットフォームでは、カーネルの起動時にデバイスを使用できるようにする必要があります。私はカーネルのi2c/gpioオプション(.configを介して)をできるだけ以前のプラットフォームに近いものに変更しようとしましたが、これは効果がないようです。
カーネルのバージョンは変更されていますか?新しいカーネルは、デバイスが実際に探査されたときにsysfsエントリを作成するだけです。おそらくソースを調べて、GPIOエクスパンダのプローブ機能中に何が起こるかを確認してください。 – bodangly
はい、カーネルが変更されました。 PowerPCは2.6.37.6だったので、かなり異なったバージョンです。合意したことは、おそらく変更の理由です。私はカーネルソースを掘り下げようとするかもしれないが、プローブがどこにあるのかわからないと思う。おそらくgpiolib.c?カーネルを変更せずにこれを処理するポストブート方法があることを期待していました。 – Bruce
私の答えでわかるように、デバイスがプローブすれば追加されることを確認できます。 – bodangly