usb 키보드 포팅 관련 질문 있습니다.
입력장치가 없는 개발보드에 usb 키보드를 붙이려고 하는데요.
보드는 리눅스 커널 2.6.18을 사용중이구요.
개발은 우분투가 깔린 컴퓨터에서 보드에 미니컴을 통해서 통신하고 있습니다.
usb 키보드를 사용하기 위해 컴파일 옵션에서 usb 키보드 관련부분들은 전부 추가해주었습니다.
usb를 꼽으면 바로
usb 4-1: new low speed USB device using brcm-ohci-1 and address 4
usb 4-1: configuration #1 chosen from 1 choice
input: HID 0566:3107 as /class/input/input4
input: USB HID v1.10 Keyboard [HID 0566:3107] on usb-ohci-brcm-1
input: HID 0566:3107 as /class/input/input5
input: USB HID v1.10 Device [HID 0566:3107] on usb-ohci-brcm-1
이런식의 메세지가 뜨면서 장치 인식은 잘 하는것 같습니다.
그런데
mknod /dev/input/event0 c 13 64 이런식으로 장치파일을 만들고
cat /proc/input/event0 이렇게 해놓고 키보드로 입력을 하면
화면에는 제가 입력한 값이 아닌 이상한 값들이 출력됩니다.
샘플 프로그램으로 /dev/input/event0 를 open해서 read를 해보면 글자를 한개만 입력해도 32바이트를 읽은것으로 나옵니다.
무엇이 문제일까요?
커널 소스트리에서
커널 소스트리에서 Documentation/input/input.txt 파일의 맨 마지막 부분 "5. Event interface" 절을 참고하세요.
OTL
답변 감사합니다.
알려주신 문서를 대충 읽어봤는데요.
struct input_event 구조체 형식으로 입력값이 기록된다는 뜻인가요?
그리고 이걸 적절히 해석해서 사용해야 하는건가요?
좀 더 편리하게 입력을 받고 그걸 읽어볼 수는 없을까요?
굉장히
굉장히 게으르시군요. 매우 긍정적인 자세죠 :)
busybox 를 사용하고 계시다면 showkey 라는 놈이 있는지 찾아보세요.
없다면 http://ftp.altlinux.org/pub/people/legion/kbd/ 에서 다운로드해서 직접 컴파일하시고요.
+
오해하실까봐 추가합니다.
이건 evdev 와는 아무 관계 없이 콘솔에서 키코드를 읽습니다.
키보드가 발생시킨 이벤트를 직접 얻는 것이 아니라 그 이후에 콘솔의 input handler(drivers/char/keyboard.c::kbd_event()) 가 처리한 결과를 얻습니다.
OTL
일반 pc 처럼 기본 입력으로 설정하려면 어떻게 해야되나요?
장치파일 열어서 읽고 쓰지 않고, 일반 pc처럼 기본 입력으로서 쉘에서 키보드를 치면 바로 에코되게 하려면 어떻게 해야 되나요?
댓글 달기