kmallocから返されるアドレスについて少し混乱しました。 仮想メモリマップ私が得ているアドレスは ffff880000000000
- ffffc7ffffffffff
つまり、「すべての物理メモリの直接マッピング」です。このマッピングはどのように機能しますか? kmallocが単に物理アドレスを返さないことは確かです。
回答:
回答№1の場合は3あなたが正しい、 kmalloc
物理アドレスではなく仮想アドレスを返しています。あなたがリンクしているメモリマップは、 バーチャル メモリマップではなく 物理的 メモリマップ
仮想アドレスは通常、に変換されます。アドレスにあるデータにアクセスするときのMMUによる物理アドレス。仮想アドレスの変換先は、カーネルによって指定されたメモリマップによって異なります。
リンクしたメモリマップは、Linuxがどのようにマッピングを行うのかを示しています。間に仮想アドレスがある場合は、 0xffff880000000000
そして 0xffffc7ffffffffff
物理メモリのどこかにマッピングされています(DMAを実行しているのでない限り、正確にどこにいるのかわからないし、気にしません)。