以下は何をもたらしますか:
cat /dev/mem | wc
私は得る:
cat: /dev/mem: Operation not permitted
1908 11791 1048576
したがって、私にとっては 1MB で止まります。
cat は mmap ではなく open を使用するため、同一のテストではないことに注意してください。
本当に 1MB を超えて読んでいますか?
<オール>
はい、その通りです。 /dev/mem を使用すると、非 RAM メモリ マップ IO を含む任意の物理アドレスをマップできます。これは、カーネル ドライバーを作成せずにハードウェア デバイスにアクセスするための簡単で汚いハックに役立ちます。
CONFIG_STRICT_DEVMEM は、カーネルが /dev/mem のアドレスを devmem_is_allowed()
でチェックするようにします arch/x86/mm/init.c
で 、そしてそこにあるコメントは次のように説明しています:
* On x86, access has to be given to the first megabyte of ram because that area
* contains bios code and data regions used by X and dosemu and similar apps.
* Access has to be given to non-kernel-ram areas as well, these contain the PCI
* mmio resources as well as potential bios/acpi data regions.
あなたの住所 0xFFFF0000
通常、BIOS は IO メモリを 4GB のすぐ下に配置するため、RAM 以外である可能性が非常に高いため、STRICT_DEVMEM を使用してもマッピングできます。