![장치별 커널 드라이버가 로드되지 않은 경우 Hidraw는 장치를 찾을 수 없습니다.](https://linux55.com/image/222723/%EC%9E%A5%EC%B9%98%EB%B3%84%20%EC%BB%A4%EB%84%90%20%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84%EA%B0%80%20%EB%A1%9C%EB%93%9C%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EA%B2%BD%EC%9A%B0%20Hidraw%EB%8A%94%20%EC%9E%A5%EC%B9%98%EB%A5%BC%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
Bluetooth HID가 포함된 장치를 만들려고 합니다(구체적으로는Wii 리모컨.
hid-wiimote
커널 모듈을 로드한 후 다음을 사용할 수 있습니다.히다피백엔드 가 있는 라이브러리는 linux-static-hidraw
장치와 직접 통신하지만 커널 드라이버는 주기적으로 폴링하고 운영 모드를 자주 변경합니다. 컨트롤러의 모듈을 블랙리스트에 등록하면 /etc/modprobe.d
컨트롤러의 LED가 계속 깜박이고 라이브러리에서 다음 오류를 반환합니다.
요청한 VID/PID가 있는 HID 장치를 시스템에서 찾을 수 없습니다.
권한이 올바르게 설정되어 있다고 확신합니다 udev
. 다음은 맞춤 규칙 파일입니다.
KERNEL=="hidraw*", KERNELS=="0005:057E:*.*", MODE="0666"
참고로 다음은 최소한의 Rust 예입니다.
/**
* [dependencies]
* hidapi = { version = "2.4.0", default-features = false, features = ["linux-static-hidraw"] }
*/
use hidapi::HidApi;
fn main() {
let hid = HidApi::new().unwrap();
let wiimote = hid.open(0x057e, 0x0306).unwrap(); // error if `hid-wiimote` isn't loaded
}
답변1
알고보니 잘못된 API를 사용하려고 했던 것이었습니다. hid_wiimote
커널 모듈을 로드한 후 Hidraw를 통해 Wii Remote와 통신할 수 있지만 기본 통신 방법은 다음과 같습니다 .블루투스 L2CAP, 처럼WiiBrew 페이지설명하다.