正如 ilkkachu 在unix.stackexchange.com上回答的那样,我试图访问 PCI/ACPI 或某些此类硬件使用的内存区域。因此我只需要访问“安全”的内存区域。
到目前为止,我可以安全地访问(usable)
如下所示的区域/var/log/kern.log
:
[ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000c97e8fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000c97e9000-0x00000000c9e81fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000c9e82000-0x00000000ca101fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000ca102000-0x00000000ca106fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000ca107000-0x00000000ca149fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000ca14a000-0x00000000cabb4fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000cabb5000-0x00000000caff1fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000caff2000-0x00000000caffffff] usable
这些区域也可以在以下位置作为“系统 RAM”找到/proc/iomem
:
$ grep "System RAM" /proc/iomem
00001000-0009d7ff : System RAM
00100000-1fffffff : System RAM
20200000-3fffffff : System RAM
40200000-c97e8fff : System RAM
因此,我能够dd
使用多个命令(例如(for 20200000-3fffffff
))来访问这些安全内存区域:
dd if=/dev/mem of=Filename bs=230467520 count=1 skip=1 ibs=1075838980
(请注意,它ibs
比内存区域的开头高几位,并且bs
比它的大小小一点,因为正好获得所有“安全”区域,导致系统再次崩溃。)
更新:
更新:我可以安全地dd
将内存区域设置为“系统 RAM”、“RAM 缓冲区”和“保留”。