CONFIG_TRIM_UNUSED_KSYMS 및 화이트리스트 파일의 올바른 사용법은 무엇입니까?

CONFIG_TRIM_UNUSED_KSYMS 및 화이트리스트 파일의 올바른 사용법은 무엇입니까?

최신 메인라인 소스에서 빌드된 커널을 사용하여 트리 외부 드라이버를 빌드하고 싶습니다. 내가 빌드할 때 사용하는 것으로 이해하면 localmodconfig시스템에서 사용 가능한 장치와 일치하도록 내보낸 모듈 및 커널 기호 수가 줄어듭니다. Out-of-tree 드라이버에는 커널의 다른 구성 요소에서 사용하지 않는 기호가 필요하므로 다음에 따라 수동으로 내보낼 기호를 지정해야 할 것 같습니다.TRIM_UNUSED_KSYMS 및 화이트리스트에 대한 대화입니다.

내 .config는 다음과 같습니다.

...
CONFIG_TRIM_UNUSED_KSYMS=y
CONFIG_UNUSED_KSYMS_WHITELIST="ksyms-whitelist"
...

ksyms-whitelist커널 소스 디렉터리의 루트에 파일을 만들었습니다 .

vb2_queue_init
vb2_dma_sg_memops
video_ioctl2
...

드라이버는 일반 커널을 사용할 때 문제 없이 구축할 수 있고 장치는 작동합니다. 하지만 소스에서 구축된 커널의 기호를 사용하여 트리 외부 드라이버를 구축하려면 어떻게 해야 합니까?

편집하다:내 전체 .config

답변1

나는 그것이 하는 일에 대해 약간의 오해가 있다고 생각합니다 TRIM_UNUSED_KSYMS.설명Kconfig다음과 같이:

커널과 일부 모듈은 다른 모듈과 변형에서 사용할 수 있는 많은 기호를 만듭니다 EXPORT_SYMBOL(). 커널 구성에서 선택한 모듈 세트에 따라 내보낸 많은 기호가 사용되지 않을 수도 있습니다.

이 옵션을 사용하면 빌드에서 사용되지 않은 내보낸 기호를 제거할 수 있습니다. 이는 결국 컴파일러에게 코드를 최적화하고 바이너리 크기를 줄일 수 있는 더 많은 기회(특히 LTO를 사용할 때)를 제공합니다. 이는 또한 몇 가지 보안상의 이점을 가질 수도 있습니다.

확실하지 않거나 트리 외부에 모듈을 구축해야 하는 경우 N을 선택하세요.

TRIM_UNUSED_KSYMS마지막 문장에 특별한 주의를 기울이십시오. 귀하의 시나리오에서는 활성화할 타당한 이유가 없는 한 비활성화해야 합니다 (그리고 결과를 처리해야 합니다).

기호를 제거하기 전에 커널에서 사용할 수 있는 전체 기호 세트는 빌드 구성에 따라 다릅니다. 특정 기능을 제외하는 구성의 커널에는 해당 기호가 없습니다. 귀하의 경우에는 을 .config포함하지 않습니다 VIDEO_V4L2. 즉, 빌드하는 커널에는 필요한 항목 과 필요한 항목이 전혀 없거나 video_ioctl2포함되지 않습니다 . 이러한 기호를 화이트리스트에 추가해도 도움이 되지 않습니다. 처음에 기호가 없으면 삭제하지 않고 기호를 추가할 수 없습니다.VIDEOBUF_V4L2vb2_init_queueVIDEOBUF2_DMA_SGvb2_dma_sg_memopsTRIM_UNUSED_KSYMS

빌드 트리 외부의 모듈을 지원하려면 먼저 이러한 모듈에 필요한 기호를 식별하고 이러한 기호를 사용할 수 있도록 빌드하는 커널에서 필요한 기능을 활성화해야 합니다. 나중에 기호 정리를 활성화하기로 결정한 경우 화이트리스트에 필요한 기호를 추가할 수 있지만 첫 번째 부분을 올바르게 설정하지 않으면 후자는 쓸모가 없습니다.

일반 배포 커널은 전부는 아니지만 대부분의 하위 시스템을 지원하므로 필요한 기능에 대한 사전 지식 없이도 트리 외부 모듈을 그 위에 구축할 수 있습니다.

관련 정보