読み取り/書き込みのためにファイルを開く際の私の理解は次のとおりです。
アプリケーション層では、fopen()
関数を呼び出すことができます。
関数はfwrite()
システム コールを呼び出しますopen()
。
OS がopen()
呼び出しを受け取ると、コマンドが VFS (仮想ファイル システム) に渡されます。
VFS は、必要なディレクトリを含むファイル名を検索し、必要なアクセス チェックを行います。
これが RAM キャッシュにある場合、ディスク アクセスは必要ありません。そうでない場合、VFS は、おそらく EXT4 である特定のファイル システムに読み取り要求を送信します。
次に、EXT4 ファイル システム ドライバーは、そのディレクトリが配置されているディスク ブロックを特定します。次に、読み取りコマンドをディスク デバイス ドライバーに送信します。
それでは、ボードに接続されたi2c デバイス Aを読み取りたいとしましょう。ファイルディレクトリは/dev/i2c/A です
すべてのデバイスにメジャー番号はありますか? たとえば、Linux OS は USB のメジャー番号として 180 を設定します。デバイス側では、各 USB デバイスにメジャー番号 180 はありますか?
最初の質問に対する答えが「いいえ」の場合、Linux OS はデバイス A のタイプをどのように判断できますか?それは単にファイル ディレクトリによるものですか?
おそらく2番目の質問への答えだと思います:ブート初期化段階で、export()のようなものを使用してそのポートをファイルシステムにすでにマウントしている特定のコードがいくつかありますか?実際には、起動段階の直後に、ファイルディレクトリ/dev/i2c/Aがそこに存在し、i2c デバイスのメジャー番号がバインドされています。そのため、dev/i2c/A を開きたい場合、OS は SPI または USB ドライバーではなく、適切な i2c ドライバーを見つけます。この部分についてはよくわかりません。これに関する詳細情報が必要です。
上記の状況は、起動段階の直後にデバイスがファイル システムにマウントされたときに発生します。USB を使用している場合、この USB をプラグインした後、正しいメジャー番号 180 でファイル システムにマウントするにはどうすればよいでしょうか。そして、マウント段階が始まる前にUSBが差し込まれたときにirqがあると思いますか?