← 목록
OS 2026-06-11 2KB 읽기 3분

CrownyOS virtio-input 베어메탈 입력 드라이버 (QEMU virt)

개요

베어메탈 aarch64(QEMU virt)에서 실제 마우스/키 입력을 받아 하늘나라셸이 클릭/멀티태스킹하도록 결선. virtio-input(virtio-mmio) 폴링 드라이버 신규 작성 + VM 이벤트 opcode(810/812/813/815) 실값 결선.

무엇을 했는지

  • 신규 hal/hal_input.h: virtio-mmio 32슬롯 스캔→virtio-input(DeviceID 18) 탐지→eventq(큐0) 사전충전→used링 폴링→EV_ABS/EV_REL/EV_KEY 디코드→전역 g_mouse_x/y/click/key_pressed 갱신 + 클릭 다운 엣지를 VM 이벤트큐(evq)로 push.
  • legacy v1 + modern v2 양쪽 지원: QEMU -M virt 기본 virtio-mmio 전송이 v1(legacy)이라 v2만 받으면 미탐지. v1=QueuePFN/QueueAlign 단일 연속 아레나, v2=Desc/Driver/Device 개별주소. 두 경로 모두 구현.
  • ABS(0~32767)→640x480 매핑. REL 누적+클램프.
  • crownyc_os.c: ramfb/kernel_gui 다음에 hal_input.h include, kernel_main에서 hal_input_init() 호출.
  • crownyc_vm_core.c 패치: 810=hal_input_poll+evq_pop(엣지 1건)→1/0, 812/813=클릭(or 호버) x/y, 815=키코드(1회성 소거), 814=1.
  • GIC-400(GICv2) SPI 활성화 코드 동봉(옵션, 현재는 폴링 경로).

검증 (QMP input-send-event 주입)

  • 장치 탐지: slot=30 ver=1 did=18 → [OK] virtio-input 결선 (기본 플래그)
  • 이동 8000/32767→(156,116), 24000→(468,350): 매핑 정확
  • 클릭 down→click=1, up→click=0
  • modern v2(force-legacy=false)도 init 정상. rpi5 등 비-virt 빌드 회귀 없음.

관련 파일

  • /Users/ef/CrownyOS/hal/hal_input.h (신규)
  • /Users/ef/CrownyOS/crownyc/crownyc_os.c (include + init)
  • /Users/ef/CrownyOS/crownyc/crownyc_vm_core.c (opcode 810/812/813/814/815)

잔여 이슈

  • 셀에 입력 비트맵(EV_KEY/EV_ABS bitmap config) 질의로 tablet/keyboard 구분 정교화 가능.
  • 현재 첫 virtio-input 슬롯 사용. 마우스+키보드 동시 결선 시 멀티 슬롯 루프로 확장.
  • 한선씨 동반: 드라이버 로직(슬롯스캔/4상 상태)을 하드웨어.한선 시뮬레이션으로 동반 작성 필요.