Module.symvers 파일 생성의 논리는 무엇입니까?

Module.symvers 파일 생성의 논리는 무엇입니까?

내가 아는 한모듈.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

이 옵션이 활성화되어 있으면 비활성화하면 됩니다.

도움이 되었기를 바랍니다.

관련 정보