Linux에서 시스템 BIOS 주소를 찾는 방법

Linux에서 시스템 BIOS 주소를 찾는 방법

AMD Ryzen Embedded Platform에서 Embedded Linux의 BIOS와 상호 작용하고 싶습니다.

메인 툴은 flashrom플래시 메모리 칩을 읽고 쓸 수 있는 툴인 것 같아요.

dd메모리에 있는 칩의 주소를 안다면 비슷한 방법을 사용하여 플래시 ROM에 데이터를 쓰는 것도 가능할까요?

시스템 BIOS를 찾는 올바른 방법입니까?

root@device:~/bios# grep ROM /proc/iomem
    000c0000-000cd3ff : Video ROM
  000f0000-000fffff : System ROM

도구를 사용하여 ROM을 찾으면 flashrom다음과 같은 결과가 나타납니다.

root@device:~/bios# flashrom -p internal --flash-name
flashrom v1.2 on Linux 5.4.199 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found chipset "AMD FP4".
Enabling flash write... OK.
Found Winbond flash chip "W25Q64.W" (8192 kB, SPI) mapped at physical address 0x00000000ff800000.
vendor="Winbond" name="W25Q64.W"

그래서 iomem칩이 들어갔다고 000f0000-000fffff하고 flashrom칩이 들어갔다고 합니다.0x00000000ff800000

어느 것이 정확합니까, 아니면 더 나은 것은 왜 동일하지 않습니까?

답변1

어느 것이 정확합니까, 아니면 더 나은 것은 왜 동일하지 않습니까?

그것들은 다르기 때문에 다릅니다. 둘 다 "옳다"는 것이 아닙니다.

출력은 flashrom물리적 플래시 IC의 주소입니다.

iomem은 메모리 공간에서 메모리의 일부가 매핑되는 위치를 보고합니다. 이는 플래시 IC의 일부 메모리일 수 있습니다. (어쩌면 를 통해 쿼리하는 메모리일 수도 있지만 flashrom -p internal초기 하드웨어 초기화 중에 복사되거나 매핑되었을 가능성이 더 높습니다) RAM 메모리의 일부 .

"BIOS", "비디오 ROM"...은 IBM PC 개념이며 본질적으로 오늘날의 하드웨어 작동 방식에는 전혀 적용되지 않는다는 점을 깨달아야 합니다. 그러므로 만약 있다면완전한 모방.

따라서 "AMD Ryzen의 임베디드 Linux BIOS와 상호 작용"이라고 말하면 실제로 "프로세서에서 실행되는 펌웨어가 에뮬레이트되는 38년 된 API와 대화하고 싶습니다"라고 말하는 것입니다. 누가 무엇을 에뮬레이트하고 있는지 쉽게 판단할 수 있고 "글꼴이 포함된 칩인 비디오 ROM과 비디오 BIOS 프로그램이 있습니다"처럼 간단하지만 이는 분명히 그래픽 하드웨어가 작동하는 방식이 아닙니다. BIOS에도 마찬가지입니다. 마더보드와 CPU를 초기화하는 것은 일부 IBM PC-BIOS 파생 소프트웨어가 아니라 UEFI 프로그램과 Linux를 포함한 마더보드와 CPU의 펌웨어입니다. BIOS 인터페이스는 실제로 펌웨어에서 선택적으로 제공되는 몇 가지 추가 API입니다.

관련 정보