BIOS 데이터를 파일로 덤프하는 방법

BIOS 데이터를 파일로 덤프하는 방법

내 노트북의 BIOS 데이터를 파일로 덤프하고 싶습니다. 내가 찾은 유일한 해결책은 다음 명령입니다.

dd if=/dev/mem bs=X skip=Y count=1

XYBIOS 유형이 다르기 때문에 사람들은 서로 다른 솔루션을 제안합니다.

BIOS 데이터의 정확한 주소를 찾는 방법이 있습니까 /dev/mem? dmidecode메모리에서 BIOS를 찾는 데 사용할 수 있는 주소 범위가 있습니까? Linux는 모든 BIOS 데이터를 RAM에 덤프합니까, 아니면 그 중 특정 부분만 덤프합니까?

Linux가 BIOS 데이터를 RAM에 덤프할 수 있다면 루트도 BIOS에 직접 액세스할 수 있습니까?

답변1

를 사용해 볼 수 있습니다 biosdecode.

이는 BIOS 메모리를 구문 분석하고 알고 있는 모든 구조(또는 진입점)에 대한 정보를 인쇄하는 명령줄 유틸리티입니다. 다음과 같은 하드웨어에 대한 정보를 찾습니다.

  • IPMI 장치
  • 메모리 유형 및 속도
  • 섀시 정보
  • 온도 프로브
  • 냉각 장치
  • 전류 프로브
  • 프로세서 및 메모리 정보
  • 일련번호
  • BIOS 버전
  • PCI/PCIe 슬롯 및 속도

등.

고려해야 할 사항:

  • biosdecode분석하다바이오스모든 구조에 대한 정보를 메모리하고 인쇄합니다.
  • 디코딩바이오스데이터는 버려진 컴퓨터의 데이터와 동일합니다.DMI. 이것DMI 테이블현재 시스템이 무엇으로 구성되어 있는지를 주로 설명합니다.
  • 제공된 데이터 biosdecode는 사람이 읽을 수 있는 형식이 아닙니다.

화면에 표시된 내용 보기

dmidecode컴퓨터의 DMI(SMBIOS) 테이블 내용을 화면에 덤프하려면 명령을 사용해야 합니다 .

$ sudo dmidecode --type 0 

자세한 내용은 매뉴얼 페이지를 검색하십시오.

$ man dmidecode

예, 커널은 BIOS에 필요한 정보만 RAM에 보관합니다. 그러나 임베디드 ASM(어셈블리 코드) 등이 포함된 C 애플리케이션을 사용하여 루트 사용자로부터 라이브 BIOS 호출을 수행할 수 있습니다.

Linux 잡지의 다음 기사에서 Linux 커널 및 시스템 BIOS에 대한 자세한 내용을 읽을 수 있습니다.리눅스와 BIOS.

답변2

내 생각에 당신이 찾고 있는 것은flashrom. 시스템이 지원되는 경우 다음 명령을 실행하여 BIOS 내용을 읽을 수 있습니다.

# flashrom -r <outputfile>

소위 저장하고 싶다면CMOS 메모리(RTC에 대한 경고 등 구성을 저장하는 추가 바이트) 커널의 nvram드라이버 및 장치는 다음과 같은 데 도움이 될 수 있습니다.

config NVRAM
     tristate "/dev/nvram support"
     depends on ATARI || X86 || (ARM && RTC_DRV_CMOS) || GENERIC_NVRAM
     ---help---
       If you say Y here and create a character special file /dev/nvram
       with major number 10 and minor number 144 using mknod ("man mknod"),
       you get read and write access to the extra bytes of non-volatile
       memory in the real time clock (RTC), which is contained in every PC
       and most Ataris.  The actual number of bytes varies, depending on the
       nvram in the system, but is usually 114 (128-14 for the RTC).

       This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
       on Ataris. /dev/nvram may be used to view settings there, or to
       change them (with some utility). It could also be used to frequently
       save a few bits of very important data that may not be lost over
       power-off and for which writing to disk is too insecure. Note
       however that most NVRAM space in a PC belongs to the BIOS and you
       should NEVER idly tamper with it. See Ralf Brown's interrupt list
       for a guide to the use of CMOS bytes by your BIOS.

       On Atari machines, /dev/nvram is always configured and does not need
       to be selected.

       To compile this driver as a module, choose M here: the
       module will be called nvram.

답변3

다른 도구를 사용할 수 없거나 사용할 수 없는 경우 덤프할 메모리 영역을 추측하는 방법은 다음과 같습니다.

예를 들어 VirtualBox VM에서 다음을 수행하여 BIOS를 성공적으로 덤프했습니다.

$ grep ROM /proc/iomem # https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-firmware-memmap
000c0000-000c7fff : Video ROM
000e2000-000e2fff : Adapter ROM
  000f0000-000fffff : System ROM
# dd if=/dev/mem of=pcbios.rom bs=64k skip=15 count=1 # 15*64k + 64k

답변4

이것은 VirtualBox에서 저에게 효과적입니다.

$ grep ROM /proc/iomem

결과는 다음과 같습니다.
000c0000-000c7fff: 비디오 ROM
000e2000-000e2fff: 어댑터 ROM
000f0000-000fffff: 시스템 ROM

시스템 ROM은 000f0000(0xF0000)에서 시작합니다.

브라우저를 열고 다음으로 이동하세요.http://www.hexidecimaldictionary.com/hexadecimal/0xF0000. 이는 10진수 값 983040을 나타내며, 이를 1024로 나누면 킬로바이트 값 960이 제공되며, 이는 시작점이자 "건너뛰기" 값입니다.

끝번호는 0xFFFFF로 1048575로 1024보다 약간 작은 값이다. 1024~960은 64로 "count"의 값이다.

BIOS를 덤프하는 명령은 다음과 같습니다.

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64

관련 정보