QNX RTOS: 7-2. Programming PCI Bus Devices

2025. 12. 26. 14:48운영체제/QNX

QNX에서 PCI Bus Device 프로그래밍 정리

1. QNX에서 PCI 장치 접근 구조

QNX에서는 PCI 장치를 커널이 직접 관리하지 않는다.
대신 pci-server라는 사용자 공간 프로세스가 모든 PCI 장치를 관리한다.

  • PCI 장치 접근 전제 조건: pci-server 실행
  • 애플리케이션(드라이버)은 PCI API를 통해 pci-server와 통신

즉, QNX의 PCI 구조는 서버 기반(Device Manager 모델)

 


2. PCI 서버 (pci-server)의 역할

pci-server는 다음을 담당한다.

  • 시스템에 존재하는 PCI 장치 탐색
  • Vendor ID / Device ID 관리
  • BAR(Base Address Register) 정보 관리
  • PCI Configuration Space 접근 중계
  • 인터럽트 정보 제공
  • DMA용 주소 변환 지원

3. PCI 장치 탐색

pci_device_find()

  • Vendor ID + Device ID 기반으로 PCI 장치 검색
  • 결과로 pci_bdf_t 구조체 반환

BDF (Bus / Device / Function)
→ PCI 장치를 식별하는 핵심 정보
→ 이후 모든 PCI API의 기준


4. PCI 장치 연결 (Attach)

pci_device_attach()

  • 특정 PCI 장치에 연결
  • 독점(exclusive) 접근 여부 설정 가능
  • pci-server가 해당 장치를 프로세스에 할당

 이 단계 이후부터 장치 제어 가능


5. PCI 장치 제어 API

장치 관리

  • pci_device_reset()
    → 장치 리셋
  • pci_device_detach()
    → 사용 종료 및 자원 반환

PCI Configuration Space 접근

  • pci_device_read_*()
  • pci_device_write_*()

용도:

  • BAR 설정
  • 인터럽트 설정
  • 장치 기능 제어

6. BAR(Base Address Register) 정보

pci_device_read_ba()

  • 장치가 제공하는 BAR 정보 조회
  • BAR 정보에는 다음이 포함됨:
    • 메모리/IO 타입
    • 크기
    • 주소 영역

 BAR는 이후 mmap()을 통해 MMIO 접근에 사용됨


7. 주소 변환 (DMA / Bus Mastering)

pci_device_map_as()

  • CPU 주소 ↔ PCI 장치 주소 변환
  • DMA를 사용하는 장치에서 필수

이유:

  • CPU 가상 주소는 PCI 장치가 직접 이해하지 못함
  • DMA 수행 시 PCI 장치가 접근 가능한 주소로 변환 필요

8. 인터럽트 정보

  • BDF 기반으로 인터럽트 정보 획득 가능
  • Legacy INTx / MSI / MSI-X 여부 확인
  • 이후 QNX 인터럽트 등록 API와 연계

9. PCI 장치 사용 흐름 요약

pci-server 실행
   ↓
pci_device_find()
   ↓
pci_device_attach()
   ↓
pci_device_read_ba()
   ↓
mmap() (MMIO 접근)
   ↓
pci_device_map_as() (DMA 필요 시)
   ↓
장치 제어
   ↓
pci_device_detach()

10. 핵심 정리

  • QNX PCI는 서버 기반 사용자 공간 관리
  • PCI 장치 식별자는 BDF
  • BAR → mmap → MMIO 접근
  • DMA 사용 시 pci_device_map_as() 필수
  • 모든 PCI API는 QNX Help → PCI_device 문서 참고

한 줄 요약

QNX에서 PCI 장치는 pci-server를 통해 탐색, 연결, 설정, 메모리 매핑, DMA 주소 변환까지 사용자 공간에서 일관되게 관리된다.

'운영체제 > QNX' 카테고리의 다른 글

QNX RTOS: 7-3. Handling Interrupts 실습  (0) 2025.12.26
QNX RTOS: 7-3. Handling Interrupts  (0) 2025.12.26
QNX RTOS: 7-1. Hardware I/O  (0) 2025.12.26
QNX RTOS: 6-2. IPC 선택 기준  (0) 2025.12.15
QNX RTOS: 6-1. IPC Methods  (0) 2025.12.15