2017-09-06 8 views
0

私はrequest_mem_region()とioremap()、および同じアドレスでioremap()を呼び出しますドライバD2を呼び出しますドライバD1を書いています。
この場合、どうなりますか?分割マップの呼び出し

+2

* "この場合はどうなりますか?" * - カーネルの規則に準拠していないと意図的に書かれたドライバがあります。さもなければ、システムはおそらく期待どおりに動作します。コード体系が貧弱です。コードは機能しますが、それを維持しなければならない人は苦しんでいます。私の疑問は、私がrequest_mem_regionとioremapを呼び出しますD1であり、d1は既に範囲をlokedとして私は、ioremap呼び出しますD2に、D2からioremapすることができます返信用 – sawdust

答えて

0

両方のドライバが正常に動作しますが、ioremap()の前にrequest_mem_region()を使用して、他のドライバがその物理メモリ領域に書き込みを行わないようにすることをお勧めします。

request_mem_regionは、あなたのドライバがrequest_mem_regionを通じて同じ領域への重複呼び出しを行うために他のドライバを防ぐことができますされ、I/Oアドレスのこの範囲を使用しようとしているカーネルに指示します。

このメカニズムはすべての種類のマッピングを行いません。純粋な予約メカニズムです。すべてのカーネルデバイスドライバはniceでなければならず、request_mem_regionを呼び出し、戻り値をチェックし、エラーの

したがって、あなたのコードはrequest_mem_region()なしで動作することは完全に論理的です。

+0

おかげで、すでにによってロックされ、同じ物理アドレスの仮想アドレスを取得することができます私も同じような状況があった@anikhan D1 – anikhan

+0

は、私の場合、第2のドライバでioremap()は罰金と読み、その仮想アドレスに書き込むことができ働いている、あなたはあなたのドライバですべての問題を発見したん? – Ash

関連する問題