Linuxでデバイスドライバーがどのように機能するかを理解しようとしています。
次のようなデバイス ノードがあります (メジャー番号 89、デバイス名 i2c-0)
crw-r--r-- 1 0 0 89, 0 Sep 29 01:36 /dev/i2c-0
名前の付いた i2c ドライバーがあり、起動時
i2c.ko
に実行します。insmod i2c.ko
driver では、初期化中に次の関数が呼び出されます。
register_chrdev(89, "i2c", &i2chtv_fops)<0 // not "i2c-0"
私の質問は次のとおりです。ユーザーが呼び出すときopen("/dev/i2c-0", O_RDWR)
、カーネルはどのドライバーを使用するかをどのように認識しますか? デバイス名は ですi2c-0
が、登録されているデバイス名はi2c
です。カーネルが正しいドライバーを使用できるのは、それらが同じメジャー番号を使用しているからですか?