Доступ к /dev/mem приводит к зависанию Ubuntu

Доступ к /dev/mem приводит к зависанию Ubuntu

Я использую последнюю версию 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

Связанный контент