iomem에서 사용하는 비디오 ROM 부분

iomem에서 사용하는 비디오 ROM 부분

일부 x86_64 Linux 기본 커널이 주어지면 PCI-E 확장 보드에 내장된 GPU를 실행하십시오.


cat-ing /proc/iomem, RAM에 일부 공간이 예약되어 있고 다음과 결합되어 있음을 알 수 있습니다.비디오 ROM.

  1. 이것이 문제를 처리하기 위한 BIOS(또는 이에 상응하는) 코드의 정확한 복사본일 뿐이라고 가정하는 것이 맞습니까?유산ISA 버스에 연결된 VGA 장치 또는 디코딩이 가능한 PCI 장치유산VGA IO 및/또는 MEM?
  2. 이 코드가 RAM에 복사되는 이유는 무엇입니까?
    액세스 시간을 더 빠르게 만들려면?
    보호 모드로 전환한 후에도 커널을 실행 가능하게 유지하려면?
  3. 나는 이 코드가오직커널의 전용 프레임버퍼 드라이버(fbcon, vgafb, vesafb...)가 우선하지 않는 한 사용할 수 있나요?
  4. 프레임버퍼 드라이버가 제공되는 경우 나중에 실행 중인 커널의 수명 동안 이 코드를 사용할 수 있습니까?
    그렇지 않다면 왜 Linux 커널은 사용되지 않은 메모리를 해제하지 않고 부팅 시 해당 영역을 삭제합니까?

답변1

  1. 완전한 것은 아니고. iomem항목은 물리적 주소의 사용을 설명합니다. 시스템 RAM은 이와 같이 표시되며, 다른 항목은 RAM에 사용되지 않는 주소 범위를 설명합니다. "비디오 ROM" 항목은 실제 ROM(실제로는 플래시 메모리)을 가리킵니다. x86에서는 UEFI를 통해 부팅하는 BIOS 또는 CSM을 사용하는 시스템에 매핑되지 않을 수 있습니다.

    x86에서는 항상 0xC0000에 매핑되는 것을 볼 수 있습니다.

    $ sudo cat /proc/iomem|grep "Video ROM"
    000c0000-000cfdff : Video ROM
    

    이곳은 항상 비디오 BIOS가 매핑되어 있는 곳이며, 다양한(이전) 소프트웨어에서는 이 곳이 필요합니다.

  2. 대개아니요RAM에 복사되었습니다. (예전에는 "섀도우 RAM"으로 들어가는 것이었지만 더 이상 그렇지 않습니다.)

  3. 현재 시스템에서는 이 코드가 사용되지 않습니다. (과거에는 제한된 수의 경우가 있었지만 제가 아는 한 더 이상 사용되지 않습니다.vesafb32비트 x86의 경우).

  4. 커널은 이를 제거할 필요가 없고 메모리를 차지하지 않으며 어떤 경우에도 무시되는 주소 범위에 있습니다(물리적 주소 공간의 하위 부분은 실제로 x86에서 사용되지 않습니다).

관련 정보