Linux NVMe PCI 드라이버 상세 분석 Linux 커널의 NVMe PCI 드라이버는 PCIe를 통해 NVMe 스토리지 디바이스와 통신하는 핵심 모듈입니다. 용어설명 - iod = I/O Descriptor: 각 I/O 명령마다 필요한 메타데이터 구조체 - cdev: 캐릭터 디바이스 -> /dev/nvme0이 캐릭터 디바이스 (컨트롤러 단위의 admin/passthru 명령을 ioctl (입출력제어를 위한 시스템콜, 장치 설정 변경/조회에 사용됨) 형태로 보내는데 사용됨), /dev/nvme0n1은 블록 디바이스로, read/write I/O가 이 블록 디바이스 경로를 통해 처리된다. NVMe PCI 드라이버의 주요 구조와 함수들을 다음과 같이 분류할 수 있습니다. 1. 드라이버 초기화 및 프로브(Probe) pci_driver 구조체 드라이버의 진입점은 다음과 같이 정의됩니다: c static struct pci_driver nvme_driver = { . name = "nvme" , . id_table = nvme_id_table , . probe = nvme_probe , . remove = nvme_remove , . shutdown = nvme_shutdown , . driver = { . pm = & nvme_dev_pm_ops , } , . err_handler = & nvme_err_handler , } ; 주요 함수들: nvme_probe() : 새로운 NVMe 디바이스가 시스템에 연결될 때 호출됩니다. 이 함수는 디바이스를 인식하고 드라이버를 해당 디바이스에 바인딩합니다. BAR(Base Address Register) 매핑 컨트롤러 리소스 할당 Admin 큐(Queue) 초기화 I/O 큐 설정 PRP Pool 설정 - nvme_setup_prp_pools(...