384k 에 접근할 방법이 없는가요??

z0172982의 이미지


리눅스에서

640kb 말고 384k 안 내용엔 비디오 바이오스를

읽어오려 합니다.

DOS에서는 포인터로 읽기 가능한데 리눅스에선 세그먼테이션 폴트 뜨네요..

읽을수 있는 방법이 없을까요??

bushi의 이미지

$ cat /proc/iomem | grep 'Video ROM'
000c0000-000ce7ff : Video ROM
 
$ sudo dd if=/dev/mem of=vgabios.bin bs=1k count=64 skip=768
64+0 records in
64+0 records out
65536 bytes (66 kB) copied, 0.000476618 s, 138 MB/s
 
$ file vgabios.bin 
vgabios.bin: BIOS (ia32) ROM Ext. IBM comp. Video (116*512)
[bushi@rose imgs]$ 

꼭 포인터로 읽어내야 할 이유가 있다면,
/dev/mem 을 open(O_RDONLY) 해서 offset 0xc0000 로 mmap(PROT_READ)을 64KiB 만큼 하면 포인터로 접근하실 수 있습니다.

VGA/VESA 에 대해 지식이 있으시다면,
/sys/bus/pci/devices/ 를 뒤져서 VGA class 에 대한 각 장치들의 io address 를 알아낸 다음,
/dev/mem 을 통해 그 주소에 접근하면 보드에 장착된 모든 VGA 의 bios 를 읽어낼 수 있습니다.

z0172982의 이미지

정말 유용한 가르침 감사드립니다.