CONFIG_STRICT_DEVNEM
나는 프로젝트 중에 메모리에서 일부 용어를 덤프하고 검색해야 하기 때문에 을 비활성화한 사용자 정의 커널(4.2.0-36-generic)과 함께 최신 Ubuntu Linux를 사용하고 있습니다.
그러나 다음을 사용하는 경우:
dd if=/dev/mem
화면에 인쇄하려면dd if=/dev/mem of=/home/user/Documents/file.dump
파일로 저장하거나dd if=/dev/mem | hexdump -C | grep 'term'
내가 원하는 것을 직접 찾아보고,
프로세스가 진행되는 동안 시스템이 정지되고 재부팅됩니다.
확인해보니 df -h
디스크에 여유 공간이 충분합니다. 또한 프로세스는 8Gb RAM에서 2.1Gb를 2.5Gb로 쓴 후 4로 시작하는 주소에 도달하기 전에 항상 중지됩니다(차이가 있는 경우). 또한, 동결 전에는 관련 내용을 확인 /var/log/syslog
하고 표시하지 않습니다./var/log/kern.log
또한 매개변수를 사용하면 bs=1G count=2
처음 2GB의 메모리가 성공적으로 복사되지만 bs=1G count=2 skip=2
다음 2GB를 다시 가져오려고 하면 시스템이 정지됩니다.
전체 메모리를 덤프할 수 있는 솔루션이나 메모리에서 용어를 직접 검색할 수 있는 다른 방법을 제안하시겠습니까?
답변1
내 생각에는 PCI/ACPI 또는 일부 하드웨어에서 사용되는 일부 메모리 영역이 실행될 수 있다고 생각합니다. 액세스를 좋아하지 않는 메모리 매핑 장치가 있을 수 있습니다. 정확히 어떤 주소가 문제를 일으키는지는 알 수 없지만 일부 특수 영역에서는 4GB 제한 바로 아래에 위치하는 것이 일반적입니다.
4GB 메모리가 있는 한 시스템에서 커널은 부팅 시 다음을 인쇄합니다.
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)
사용 가능한 메모리의 일부가 에서 4GB 제한을 초과하고 와 0x100000000
사이에 구멍이 있는 것 같습니다 .0xcf700000
0xfec00000
"사용 가능한" 메모리에 해당하는 영역도 에 표시되며 /proc/iomem
"시스템 RAM"으로 표시됩니다. (파일에는 다른 메모리 영역에 대한 정보도 포함되어 있습니다.) 해당 영역에서 읽는 것이 더 안전할 수 있습니다.
$ grep "System RAM" /proc/iomem
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM