私は方法を知りたいi2cLinuxでは、バス番号はどのように割り当てられますか?私たちのレガシー開発ボードの一つにi2cスレーブユニットが接続されています。プロービングデバイスを使用すると、次のようにi2cdetect
表示されます。/dev/i2c1そして/dev/i2c3。
どうしたの?i2c0そしてi2c1存在する/開発者?この番号はどのように割り当てられますか?誰でもこれについて洞察力を与えることができますか?
ノート:始めるたびに0と1ではなく、1と3だけが見えることを観察しました。これはすべてのリリースで変更されません。 i2c1とi2c3をi20とi2c1にシンボリックリンクすることは可能ですか?
答え1
私のシステムでは、i2cバスはデバイス/dev/i2c-0
などです。これはアダプターと呼ばれ、カーネル文書ファイルの説明に従って動的に割り当てられます。i2c/dev インターフェイス:
これを確認するには、/sys/class/i2c-dev/ を確認するか、「i2cDetect -l」を実行する必要があります。アダプタ番号は動的に割り当てられているため、これについてあまり想定できません。あるブートから別のブートに変更することもできます。
sudo i2cdetect -l
どのバスがリストされているタスクを実行しているか、または次のことがわかります /sys/class/i2c-dev/
。
$ sudo i2cdetect -l|sort
i2c-0 i2c i915 gmbus ssc I2C adapter
i2c-1 i2c i915 gmbus vga I2C adapter
i2c-2 i2c i915 gmbus panel I2C adapter
...
$ head /sys/class/i2c-dev/i2c-*/name
==> /sys/class/i2c-dev/i2c-0/name <==
i915 gmbus ssc
==> /sys/class/i2c-dev/i2c-1/name <==
i915 gmbus vga
...
ノート:i2c バス番号は通常動的に割り当てられますが、一部のプラットフォームでは、Linux がデバイスツリーの情報を使用して i2c アダプタに特定の番号を割り当てます。おそらく、一部のマザーボードには、ハードウェアレイアウトをよりよく表現するために特定のバス番号を要求するプラットフォームドライバが似ている場合があります。カーネル呼び出しはi2c_add_numbered_adapter()
。