正如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
这些区域也可以作为 “系统内存” 的/proc/iomem
中找到:
$ grep "System RAM" /proc/iomem
00001000-0009d7ff : System RAM
00100000-1fffffff : System RAM
20200000-3fffffff : System RAM
40200000-c97e8fff : System RAM
因此,我能够通过dd
这些安全的存储区域执行多个命令,例如(对于20200000-3fffffff
):
dd if=/dev/mem of=Filename bs=230467520 count=1 skip=1 ibs=1075838980
(请注意,ibs
比内存区域的起始位置高几位,并且bs
比它的大小要小一些,因为正好获得所有“安全”区域,导致系统再次崩溃。)
UPDATE:
更新:我可以肯定地设置为 “系统内存”, “RAM缓存” 和 “保留” dd
内存区域。
[在unix.stackexchange.com上检查此网址](http://unix.stackexchange.com/a/119776/25786)。我认为'fmem'部分将成为 – ppeterka
@ppeterka立即尝试。谢谢 –
并行运行'tail -f/var/log/kern.log'和'tail -f/var/log/messages'来查看崩溃之前内核是否输出消息。然后,在重新启动后查看这些文件。另外,[更改内核的调试级别](https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks),以便更容易地查看问题所在。考虑在http://unix.stackexchange.com/或http://askubuntu.com/上提问。 –