vnpu 개발기 #3 - 빈 NPU 디바이스를 꽂고 드라이버로 잡기
드라이버보다 디바이스를 먼저 만들었다. 드라이버가 probe할 대상이 없으면, 드라이버를 짜도 돌려 볼 방법이 없어서다. QEMU에서 PCI 디바이스를 만드는 건 PCI 설정 공간을 채우는 일부터 시작한다. 리눅스는 부팅할 때 PCI 버스를 훑으면서 장치마다 벤더 ID, 디바이스 ID, 클래스 코드를 읽고, 그 값에 맞는 드라이버를 찾아 붙인다. 벤더 ID는 QEMU가 자체 가상 장치에 쓰는 0x1234를 썼다. 디바이스 ID는 0x4e50으로 직접 골랐다. 0x1234 안에서 비어 있는 번호이고, ASCII로 읽으면 “NP"다. 클래스 코드는 처리 가속기를 뜻하는 0x1200이다. 리눅스에는 이 값의 이름(PCI_CLASS_ACCELERATOR_PROCESSING)이 있는데 QEMU에는 없어서, 같은 이름으로 하나 추가했다. ...