![Module.symvers 파일 생성의 논리는 무엇입니까?](https://linux55.com/image/183432/Module.symvers%20%ED%8C%8C%EC%9D%BC%20%EC%83%9D%EC%84%B1%EC%9D%98%20%EB%85%BC%EB%A6%AC%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내가 아는 한모듈.symvers파일은 내보낸 기호 목록을 제공합니다.모듈별라이센스와 함께 이러한 파일은 CRC(선택 사항)에 따라 내보낼 수 있습니다. 다른 모듈은 목적을 달성하기 위해 이러한 기호에 의존할 수 있으며 내 모듈이 일부 기호에 의존한다면 그것은 확실히 논리적입니다.모듈X, 이것모듈X적어도 건설되어야 하기 때문에정의상징이 필요해요.모듈.symvers그래서 그것은 온전한 점검으로 작동합니다. 그렇죠?
일부 기호가 왜 사용되는지 이해하기 어렵습니다.분명히debugfs_create_u32
내보내지 않은 모듈에 의존하지 않습니다. 예를 들어 함수를 사용하고 싶습니다 . 존재해야 하는 유일한 종속성은 이지만 CONFIG_DEBUG_FS
이 옵션을 활성화하면 선언된 기호의 작은 부분만 내보낼 수 있습니다 #include <linux/debugfs.h>
. 그래서 모듈을 컴파일하려고 할 때마다 정의되지 않은 기호에 대한 MODPOST 오류가 발생합니다. 내 해결책은 debugfs_create_u32
코드에서 실제로 기호를 사용하는 임의의 모듈을 찾아 커널을 컴파일하는 것이었습니다. 모듈에는 정의가 없으며 debugfs_create_u32
모듈의 기능을 사용하지도 않고 실제로 필요하지도 않습니다. 이 모듈이 나에게 유용한 유일한 점은 다음 줄을 추가하기만 하면 됩니다.모듈.symvers파일과 모든 것이 마술처럼 작동하기 시작했습니다. 나는 기호와 비슷한 문제가 있었고 모듈이 i8253_lock
필요하지 않았고 pcspkr
단지 원했지만 i8253_lock
그것을 얻으려면 pcspkr
어떤 이유로 컴파일해야했습니다.
여기서 중요한 걸 놓치고 있는 게 확실해서 너무 혼란스럽기 때문에 위의 상황을 어떻게 이해해야 할지, 세대의 논리는 무엇인지에 대한 설명을 부탁드립니다.모듈.symvers?
답변1
아직도 이 문제로 어려움을 겪고 계시는지 모르겠습니다. 조금 늦었다는 건 알지만 오늘 밤에도 같은 문제가 발생했습니다. 범인은 커널 구성의 다음 옵션입니다.
CONFIG_TRIM_UNUSED_KSYMS
https://cateee.net/lkddb/web-lkddb/TRIM_UNUSED_KSYMS.html
이 옵션이 활성화되어 있으면 비활성화하면 됩니다.
도움이 되었기를 바랍니다.