Co přináší následující:
cat /dev/mem | wc
Chápu:
cat: /dev/mem: Operation not permitted
1908 11791 1048576
Takže pro mě se to zastaví na 1 MB.
Všimněte si, že cat používá open, nikoli mmap, takže to není identický test.
Jste si jisti, že čtete více než 1 MB?
-
Ano, máte pravdu, /dev/mem vám umožňuje namapovat jakoukoli fyzickou adresu, včetně IO namapovaných na non-RAM paměť. To může být užitečné pro rychlý a špinavý hack pro přístup k některému hardwarovému zařízení bez psaní ovladače jádra.
-
CONFIG_STRICT_DEVMEM kontroluje adresy jádra v /dev/mem pomocí
devmem_is_allowed()
varch/x86/mm/init.c
a komentář v něm vysvětluje:* 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.
vaše adresa
0xFFFF0000
je docela pravděpodobné, že to není RAM, protože BIOSy obvykle dávají IO paměť těsně pod 4 GB, takže to je důvod, proč ji můžete mapovat i pomocí STRICT_DEVMEM.