2012-03-08 1 views
2

나는 약간의 애호가 운영체제 개발을 골머리를 앓고 있는데, 나는 메모리 매핑 된 I/O 주소에 약간 혼란 스럽다. 전체 메모리 매핑 된 I/O 개념을 이해하지만 개발자가 주소를 가져 와서 하드웨어를 조작하는 방법을 파악하려고합니다.메모리 매핑 I/O addres는 어디서 오는가?

하드웨어 공급 업체가 지정한 주소입니까? 아니면 모든 컴퓨터의 표준 주소입니까? 예를 들어, 텍스트 인쇄를위한 VGA 메모리는 주소 0xB8000에서 시작합니다. 모든 x86 시스템의 표준입니까? 그렇다면 누구가 표준을 설정 했습니까? 예를 들어 이더넷 카드와 이야기하고 싶다면 커뮤니케이션에 사용하는 주소 나 포트를 어떻게 알 수 있습니까?

미리 감사드립니다.

답변

1

누가 주소를 설정했는지 100 % 확신 할 수는 없지만 하드웨어 공급 업체는 원하는대로 메모리 맵을 설정할 수 있습니다.

00000000-0000ffff : reserved 
00010000-0009f3ff : System RAM 
0009f400-0009ffff : reserved 
000a0000-000bffff : PCI Bus 0000:00 
    000a0000-000bffff : Video RAM area 
000c0000-000c7fff : Video ROM 
000ca000-000cbfff : reserved 
    000ca000-000cafff : Adapter ROM 
000cc000-000cffff : PCI Bus 0000:00 
000d0000-000d3fff : PCI Bus 0000:00 
000d4000-000d7fff : PCI Bus 0000:00 
000d8000-000dbfff : PCI Bus 0000:00 
000dc000-000fffff : reserved 
    000f0000-000fffff : System ROM 
00100000-3fedffff : System RAM 
    01000000-01536143 : Kernel code 
    01536144-017c007f : Kernel data 
    01875000-0194bfff : Kernel bss 
3fee0000-3fefefff : ACPI Tables 
.... 
+0

온라인 또는 서점에 나열된 항구의 확실한 목록을 알고 계신가요? – QAH

+0

최신 리눅스 커널을 다운로드했다면, 일부 아키텍쳐는'arch/XXX/mach-XXX' 디렉토리에 선언 된 장치를 가지고 있습니다. 또한, QEMU는 repo의'hw /'디렉토리에 수동으로 선언 된 풍부한 매핑을 가지고 있습니다. 그러나 나는 이것이 어떤 방식 으로든 권위 있고 현실적이라는 것을 확신하지 못합니다. 자세한 정보는 PCI 또는 SCSI와 같은 다양한 버스 프로토콜에서 매핑 검색 기능이 있는지 확인하십시오. – Alex

+0

도 실수로 당신을 버리지는 않습니다. ioports가 아니라 iomem입니다. 내 잘못이야. – Alex

1

당신은 PCI 버스 스캔, USB 및 ACPI 같은 일부 하드웨어 검색 메커니즘 포트를 얻을 : 그것은 가치가 무엇인지에 대한

리눅스는 메모리가 현재 cat /proc/iomem을 수행하여 컴퓨터에 매핑하는 방법을 볼 수 있습니다 . 예를 들어 PCI에서 지원되는 디스플레이 카드를 찾은 경우 해당 BAR (기본 주소 레지스터)을 쿼리하고 실제 주소 및/또는 IO 포트 기본 및/또는 IRQ 번호를 얻습니다. NIC 및 다른 카드와 동일합니다.

어떤 버스에도없는 것, 예를 들면. ps/2 컨트롤러를 사용하는 경우 검색이 어려우며 ACPI 테이블을 구문 분석해야합니다.