답변:
Libusb는 curses가 텍스트 터미널과 상호 작용하는 라이브러리와 동일한 방식으로 USB 장치와 상호 작용하는 라이브러리이며 ALSA (보다 정확하게는 libasound 구성 요소)는 아우디 장치와 상호 작용하는 라이브러리입니다. 커널은 하드웨어 상호 작용을 처리합니다. 그것은 제공하는 장치 파일 응용 프로그램을 통해 하드웨어와 상호 작용하는 열 수 있습니다 read
, write
및 시스템 호출을 .ioctl
ioctl
시스템 호출 : 응용 프로그램 (사용자 레벨 코드)이 커널에 의해 처리되는 요청을 발행 할 수 있도록합니다.
Libusb를 통해 응용 프로그램은 장치에보고 할 무언가가있을 때 실행되는 콜백 기능을 등록 할 수 있습니다. 다음은 정보 흐름에 대한 대략적인 개요입니다.
read
, write
또는 ioctl
장치 파일에 시스템 호출 및 반환에 해당 시스템 호출을 발생합니다.libusb
여전히 장치에 액세스 할 수 있습니까?
/dev/ttyS*
. USB는 동일한 원리이며 더 빠르고 복잡합니다.
리눅스는 두 개의 링을 사용한다. 링 0은 커널 레벨, 링 3은 사용자 레벨이다. 사용자와 커널의 연결은 syscalls를 통해 (이미 말했듯이) 완료됩니다. 그 사이에는 사용자 영역에서 볼 수있는 라이브러리가 있습니다. 따라서 커널에 대한 가장 낮은 수준의 액세스는 안정성, 보안, 동기화, 저장 간격 등의 이유로 라이브러리에서 구현됩니다. 커널 드라이버는 사용자 공간에 다른 인터페이스를 제공합니다 : (ioctl, sysfs, 소켓, 문자 및 블록 장치 등) 사용자 공간 인터페이스 . 따라서 원하는 경우 라이브러리를 생략하여 커널 드라이버에 대한 액세스를 구현하거나 정적 링크 라이브러리로 바이너리를 훨씬 쉽게 컴파일 할 수 있습니다.
좋은 출발점은 libusb 소스를 읽는 것입니다.