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 |