문서에 따라 드라이버를 컴파일합니다. 하지만 내가 그들을 통해로드하려고하면
insmod onebox_wlan_nongpl.ko
, 다음과 같은 오류 메시지가 나타납니다.
insmod: 오류: 모듈 onebox_wlan_nongpl.ko: 모듈에 알 수 없는 기호를 삽입할 수 없습니다.
나는 이것이 파일 로딩 순서가 잘못되었기 때문이라는 것을 알고 있지만 .ko
어떤 모듈에 의존하는지 알려주지는 않습니다. 먼저 로드해야 하는 모듈을 파일화하려면 어떤 기호가 알려지지 않았는지 알고 싶습니다.
답변1
를 사용하여 dmesg에서 누락된 기호를 간단히 확인할 수 있습니다 dmesg | tail
. 기호가 실제로 기호 테이블에 있는지 확인하려면 cat /proc/kallsyms | grep <function_name>
유사한 문제를 사용하여 확인하세요.
https://ubuntuforums.org/showthread.php?t=1360950
답변2
실제로 누락된 기호를 확인하려면 dmesg
. 정확한 기호가 표시됩니다. 커널 모듈을 직접 작성했고 예를 들어 장치 매핑 프레임워크와 같은 프레임워크에 의존하는 경우 종속성을 먼저 로드해야 합니다. 내가 만난 예는 다음과 같습니다.
나는 썼다장치 매퍼, 이는 장치 매핑 프레임워크에 따라 다릅니다. 삽입 시 다음과 같은 일이 발생합니다.
$ sudo insmod some-module.ko
insmod: ERROR: could not insert module some-module.ko: Unknown symbol in module
커널 로그를 검사합니다.
$ sudo dmesg
[ XX.XXXXXX] some-module.ko: Unknown symbol dm_per_bio_data (err -2)
[ XX.XXXXXX] some-module.ko: Unknown symbol dm_put_device (err -2)
...
로드된 모듈을 검사합니다.
$ lsmod | grep dm
<NOTHING>
장치 매핑 대상 드라이버를 삽입합니다.
$ sudo modprobe dm_mod
$ lsmod | grep dm
dm_mod 184320 0
이제 원래 모듈을 삽입하면 오류가 해결됩니다.