[완료] 드라이버 모듈 빌드시 Unknown symbol BIT_MASK ?
Stowaway keyboard driver (시리얼 키보드 드라이버)를 사용해서, IR 드라이버로 만들고 있습니다.
처음엔 포기할까 생각도 하긴 했는데, 다행히도
bushi님의 도움으로 IR의 키코드가 콘솔에 찍히는걸 확인했습니다.
이제 키보드쪽으로만 전달이 된다면, OK일것 같습니다.
인터럽트도 잘 뜨고, 인터럽트코드에 프로토콜도 어느정도는 맞추었구요.
그런데, 모듈로 빼서 kbd driver 를 build했는데요.
build할때 아래와 같은 에러 메세지가 나오네요.
● 에러내용
kbd.c: In function 'skbd_connect':
kbd.c:185: warning: implicit declaration of function 'BIT_MASK'
WARNING: "BIT_MASK" [/home/driver/kbd/kbd.ko] undefined!
실제로 185번줄 코드에 가보면, 아래와같습니다.
● kbd driver
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
여기서, BIT_MASK매크로인지, 함수인지가 없어서 그런것 같은데요.
모듈을 build하고 insmod 하면, 아래처럼 언노운 심볼에러가 나옵니다.
● 실행
# insmod kbd.ko
kbd: Unknown symbol BIT_MASK
insmod: cannot insert 'kbd.ko': unknown symbol in module
#
이럴땐 어떻게 해줘야 하는지요?
BIT_MASK빼고 BUILD하면 모듈은 잘 올라갑니다.
모듈에 Kernel에 있는 BIT_MASK를 찾아서 넣어줘야 하는것인지,
EXPORT_SYSBOL을 해주어야 하는것인지...
위의 방법으로 해보긴 했는데,, 잘 안되서요...
아니면, 어떤 다른 방법이 있는지...
답변좀 부탁드리겠습니다.
행복한 하루 되세요~
제가 갖고 있는
제가 갖고 있는 커널헤더엔 없고, 상기 드라이버가 있던 커널 코드에 포함되 있군요.
코드는 다음과 같습니다.
linux/include/linux/bitops.h 파일에
#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
좀더 검색해봤더라면...질문 안했을텐데...
결국 드라이버 코드에 BIT_MASK 가 포함 안되서 그런거 였네요...
포함되어 있는데 드라이버에서 포함 못시킨게 아니고..
이거 찾는데 1루걸린 1인 -_-;;;;
공부하자!
댓글 달기