0

例 ドライバーの作成中に次のことを行います

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

デバイスに割り当てられたメモリに関する情報を取得します。

仮想アドレスを使用してこのメ​​モリを使用する必要がありますか

virt_base = ioremap(res->start, resource_size(res));

物理アドレス自体を使用してメモリをアドレス指定することはできませんか?

可能であれば、仮想メモリを使用する特定の利点はありますか、これはカーネルが望んでいる方法です...

4

1 に答える 1

1

はい、絶対に必要です。(x86 の場合) CPU でページングが有効になると、OS (ドライバー開発者) に見えるすべてのアドレスは仮想アドレスになります。つまり、読み取りまたは書き込みを行うアドレスは、CPU によって仮想アドレスとして解釈されます。次に、ページテーブル階層を通過して、最終的にバスに配置する物理アドレスに到達します。

物理アドレスは使用できません。それらはマップされないか、必要なもの以外にマップされます。ioremapこれが存在し、使用されなければならない理由です。

于 2013-03-21T06:19:42.267 に答える