LINUX 6.18 · UAPI · CONTROL · BUFFER LIFETIME

커널 인터페이스 선택: 속도보다 먼저 정할 계약

제어 명령·이벤트·공유 버퍼·진단 속성을 나누고 기존 서브시스템의 ABI를 우선합니다.

전달할 데이터와 수명을 먼저 적습니다

새 통로를 만들기 전에 기존 서브시스템이 제공하는 ABI를 확인합니다. 구조화된 장치 제어에는 ioctl, 객체 속성에는 sysfs, 메시지·상태 덤프·이벤트에는 해당 Netlink family, 버퍼 접근에는 mmap이 사용될 수 있습니다. 이 목록은 속도 순위도, 서로 배타적인 선택지도 아닙니다.

분기와 관측 지점을 나눈 자체 개념도
  1. 제어 계약: 명령·권한·오류·호환성

  2. 데이터 계약: 버퍼 크기·소유권·완료 시점

  3. 수명 계약: 취소·프로세스 종료·장치 제거

명령과 비동기 이벤트를 구분합니다

ioctl은 명령 번호와 인수 형식도 ABI입니다. 고정 폭 자료형, 구조체 배치, 예약 필드, 32/64비트 호환성을 검토합니다. Netlink는 요청·응답, dump, multicast 알림을 지원할 수 있으므로 “항상 비동기”라고 부르지 않습니다. 사용할 family의 정책과 sequence·오류 처리를 확인해야 합니다.

Linux 6.18 ioctl 설계

Linux 6.18 Netlink 개요

mmap만으로 제어와 동기화가 해결되지는 않습니다

V4L2 MMAP streaming은 ioctl로 버퍼를 요청·조회·queue하고 mmap으로 데이터에 접근합니다. QBUF 뒤 드라이버가 관리하는 동안 애플리케이션이 내용을 마음대로 읽거나 쓰면 안 됩니다. DQBUF 완료를 확인하고 처리한 뒤 재사용하도록 돌려줍니다. 매핑에 성공했다고 해서 전 경로 무복사, 동기화, 장치를 제거할 때의 안전성이 자동으로 보장되지는 않습니다.

V4L2 MMAP의 queue 소유권

진단 파일과 안정 ABI를 혼동하지 않습니다

sysfs 속성은 간단한 텍스트 값과 객체 관계를 표현하는 데 맞춥니다. debugfs는 안정된 사용자 ABI를 보장하는 제품 인터페이스가 아닙니다. copy_to_user·copy_from_user는 커널 구현에서 사용자 메모리에 접근하는 helper이지 ioctl·Netlink와 나란한 별도의 다섯 번째 ABI가 아닙니다. 사용자 포인터를 받는 구현은 길이·권한·복사 결과와 동시 변경을 검토해야 합니다.

sysfs 속성 설계

debugfs의 ABI 제한

사용자 메모리 접근 helper