Я использую последнюю версию Ubuntu Linux с кастомным ядром (4.2.0-36-generic), в котором я отключил CONFIG_STRICT_DEVNEM
, поскольку мне нужно выгружать и искать некоторые термины в памяти во время проекта.
Однако при использовании:
dd if=/dev/mem
чтобы распечатать его на экране,dd if=/dev/mem of=/home/user/Documents/file.dump
сохранить его как файл, илиdd if=/dev/mem | hexdump -C | grep 'term'
чтобы напрямую найти то, что я ищу,
в процессе система зависает и перезагружается.
Я проверил df -h
, и на моем диске достаточно свободного места. Кроме того, процесс всегда останавливается после записи 2,1 Гб на 2,5 Гб из 8 Гб ОЗУ и до достижения адресов, начинающихся с 4 (если это имеет значение). Кроме того, проверка /var/log/syslog
и /var/log/kern.log
не показывает ничего существенного перед заморозкой.
Кроме того, использование параметров bs=1G count=2
успешно копирует первые 2 ГБ памяти, но попытка bs=1G count=2 skip=2
получить следующие 2 ГБ снова приводит к зависанию системы.
Можете ли вы предложить какое-либо решение, позволяющее сбросить всю память или какой-либо другой способ прямого поиска терминов в памяти?
решение1
Я думаю, вы можете столкнуться с областью памяти, используемой PCI/ACPI или каким-то подобным оборудованием. Возможно, есть устройство отображения памяти, которое не любит, когда к нему обращаются. Я не могу сказать, какой именно адрес вызывает проблему, но обычно некоторые специальные области располагаются чуть ниже предела в 4 ГБ.
На одной машине с 4 ГБ памяти ядро при загрузке выводит следующее:
BIOS-e820: 0000000000000000 - 000000000009e400 (usable)
BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf690000 (usable)
BIOS-e820: 00000000cf690000 - 00000000cf6e0000 (reserved)
BIOS-e820: 00000000cf6e0000 - 00000000cf6e3000 (ACPI NVS)
BIOS-e820: 00000000cf6e3000 - 00000000cf6f0000 (ACPI data)
BIOS-e820: 00000000cf6f0000 - 00000000cf700000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
Часть доступной памяти превышает предел в 4 ГБ, 0x100000000
и, по-видимому, имеются пробелы между 0xcf700000
и 0xfec00000
.
Области, соответствующие «используемой» памяти, также показаны в /proc/iomem
, помеченные как «Системная оперативная память». (Файл также содержит информацию о других областях памяти.) Возможно, будет безопаснее просто читать из этих областей.
$ grep "System RAM" /proc/iomem
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM