A criação de Module.symvers
tem várias etapas. Essas etapas usam MODVERDIR
(geralmente .tmp_versions
no diretório de compilação) que contém .mod
files,
Depois que os módulos são compilados e os arquivos .o
correspondentes são gerados, a origem é enviada pelo pré-processador C com -D__GENKSYMS__
e a saída resultante é canalizada para scripts/genksyms
. genksyms
implementa seu próprio analisador de código (relativamente simples) para gerar assinaturas de símbolos e seus CRCs correspondentes. Foram as limitações deste analisador que impediram que genksyms
analisasse corretamente a fonte ao usar o gcc 6.3 no kernel 3.4. (Eu resolvi meu problema retrocedendo o kernel 4.12 genksyms
). genksyms
produzirá um arquivo .mod.c
para cada módulo que contenha todos os CRCs de símbolo. Isso é então compilado para produzir .mod.o
arquivos.
A etapa final envolve a análise de todos os arquivos *.mod
em MODVERDIR
, examinando-os para todos os arquivos .ko
que compõem os módulos e passando a lista correspondente de .mod.o
arquivos, juntamente com vmlinux
para %código%. scripts/modpost
analisa os arquivos de objeto e gera scripts/modposts
.