Der Zugriff auf /dev/mem friert Ubuntu ein

Der Zugriff auf /dev/mem friert Ubuntu ein

Ich verwende das neueste Ubuntu Linux mit einem benutzerdefinierten Kernel (4.2.0-36-generic), in dem ich deaktiviert habe CONFIG_STRICT_DEVNEM, da ich während eines Projekts einige Begriffe im Speicher ausgeben und suchen muss.

Bei Verwendung von:

  • dd if=/dev/memum es auf dem Bildschirm auszudrucken,
  • dd if=/dev/mem of=/home/user/Documents/file.dumpum es als Datei zu speichern, oder
  • dd if=/dev/mem | hexdump -C | grep 'term'um direkt zu finden, was ich suche,

Während des Vorgangs friert das System ein und startet neu.

Ich habe es mit überprüft df -hund meine Festplatte hat genügend freien Speicherplatz. Außerdem stoppt der Vorgang immer, nachdem 2,1 GB bis 2,5 GB aus einem 8 GB RAM geschrieben wurden und bevor Adressen erreicht werden, die mit 4 beginnen (falls diese einen Unterschied machen). Außerdem zeigt das Überprüfen von /var/log/syslogund /var/log/kern.logvor dem Einfrieren nichts Relevantes an.

Außerdem werden durch die Verwendung von Parametern bs=1G count=2die ersten 2 GB des Speichers erfolgreich kopiert, doch der anschließende Versuch, bs=1G count=2 skip=2auf die nächsten 2 GB zuzugreifen, führt zum erneuten Einfrieren des Systems.

Können Sie eine Lösung vorschlagen, mit der der gesamte Speicher ausgelesen werden kann, oder eine andere Möglichkeit, direkt im Speicher nach Begriffen zu suchen?

Antwort1

Ich glaube, Sie stoßen möglicherweise auf einen Speicherbereich, der von PCI/ACPI oder ähnlicher Hardware verwendet wird. Möglicherweise gibt es ein speicherzugeordnetes Gerät, auf das nicht zugegriffen werden kann. Ich kann nicht genau sagen, welche Adresse das Problem verursacht, aber es ist üblich, dass einige spezielle Bereiche knapp unter der 4-GB-Grenze liegen.

Auf einer Maschine mit 4 GB Arbeitsspeicher gibt der Kernel beim Booten Folgendes aus:

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)

Ein Teil des nutzbaren Speichers liegt bei über der 4-GB-Grenze und zwischen und 0x100000000scheint es Lücken zu geben .0xcf7000000xfec00000

Die dem „verwendbaren“ Speicher entsprechenden Bereiche werden ebenfalls in angezeigt und /proc/iomemals „System-RAM“ gekennzeichnet. (Die Datei enthält auch Informationen zu den anderen Speicherbereichen.) Möglicherweise sind Sie auf der sicheren Seite, wenn Sie nur aus diesen Bereichen lesen.

$ grep "System RAM" /proc/iomem 
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM

verwandte Informationen