Was ergibt Folgendes:
cat /dev/mem | wc
Ich bekomme:
cat: /dev/mem: Operation not permitted
1908 11791 1048576
Für mich hört es also bei 1 MB auf.
Beachten Sie, dass cat open verwendet, nicht mmap, also ist es kein identischer Test.
Sind Sie sicher, dass Sie mehr als 1 MB lesen?
-
Ja, Sie haben Recht, /dev/mem ermöglicht es Ihnen, jede physische Adresse zuzuordnen, einschließlich Nicht-RAM-Speicher zugeordnete IO. Dies kann für einen schnellen und schmutzigen Hack nützlich sein, um auf ein Hardwaregerät zuzugreifen, ohne einen Kerneltreiber zu schreiben.
-
CONFIG_STRICT_DEVMEM veranlasst den Kernel, Adressen in /dev/mem mit
devmem_is_allowed()
zu prüfen inarch/x86/mm/init.c
, und der Kommentar dort erklärt:* 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.
Ihre Adresse
0xFFFF0000
ist sehr wahrscheinlich Nicht-RAM, da BIOS normalerweise IO-Speicher knapp unter 4 GB setzen, deshalb können Sie ihn sogar mit STRICT_DEVMEM abbilden.