unkown symbol

insmod 실행 시 unknown symbol 에러

가끔 모듈을 컴파일 하여 insmod로 추가할 때 unknown symbol 에러로 추가가 안 될 경우가 있다. xpad.c를 따라할 때 해당 함수를 찾아 지우고 했지만, 이번 sensehat을 사용하려는 기본 함수는 지울 수 없어 이유를 찾아야 했다.

[ 8890.395611] sensehat_core: loading out-of-tree module taints kernel.
[ 8890.395805] sensehat_core: Unknown symbol __devm_regmap_init_i2c (err -2)
[ 8903.630685] sensehat_core: Unknown symbol __devm_regmap_init_i2c (err -2)
[ 9094.432329] sensehat_core: Unknown symbol __devm_regmap_init_i2c (err -2)
[ 9232.390045] sensehat_core: Unknown symbol __devm_regmap_init_i2c (err -2)

결과적으로 devm_regmap_init_i2c를 사용하려면 먼저 regmap_i2c를 로딩해야 하는데, 이 작업을 하지 않아 그렇다. 부팅한 버전과 일치하는regmap-i2c.ko를 찾아 insmod regmap-i2c.ko로 먼저 로딩해야 한다.

어떤 모듈이 미리 필요한지 알기 위해서는 해당 모듈을 lib/modules/”부팅버전”에 복사하고 depmod -a로 의존성 확인을 먼저 해야 한다. modprobe로 내가 원하는 모듈을 로딩하면 의존성을 확인하여 같이 로딩한다.

매번 수정되는 드라이버를 modprobe로 로딩하기 귀찮으니, 해당 파일이 부팅 때 자동으로 로딩 되도록 수정한다.

pi@raspberrypi:/etc/modules-load.d $ pwd
/etc/modules-load.d
pi@raspberrypi:/etc/modules-load.d $ cat modules.conf 
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
#sensehat_core를 사용하기 위한 모듈 선 로딩
regmap_i2c

이제 sensehat을 가지고 놀 준비가 되었다.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.