Como gerar Module.symvers?

11

Eu recentemente passei por Descompactando rpm de origem do kernel fora do sistema ( OpenSuse)? ; e como isso levou > 10 h na minha máquina, imagine minha surpresa que depois de fazer o processo descrito lá, não encontro Module.symvers em qualquer lugar!

Quando eu procuro por "generate Module.symvers", eu entendo isso:

NOTE: "modules_prepare" will not build Module.symvers even if
CONFIG_MODVERSIONS is set; therefore, a full kernel build needs to be
executed to make module versioning work.
(Linux Kernel Documentation :: kbuild : modules.txt)

... mas eu realmente não entendi - o kernel não foi construído na etapa anterior (descrito no link acima? Eu sei que demorou 10 h para o CC gerar um monte de arquivos * .o, e LD para ligá-los, então algo deve ter sido construído. Mas, se assim for, onde está Module.symvers ?

Em termos mais explícitos, exatamente qual comando devo chamar para gerar Module.symvers? Eu sei que make prepare não vai funcionar - mas qual é o comando que vai?

    
por sdaau 16.11.2011 / 11:59

2 respostas

11

O Module.symvers é (re) gerado quando você (re) compila módulos. Execute make modules e você deve obter um arquivo Module.symvers na raiz da árvore do kernel.

Observe que, se você executou apenas make e não make modules , ainda não criou nenhum módulo. Os símbolos do próprio kernel ( vmlinux ou um dos formatos de imagem dependentes da arquitetura) estão em System.map .

    
por 16.11.2011 / 23:51
1

para as pessoas que encontraram esta pergunta pesquisando o aviso que você recebe ao compilar um dos LKMs de amostra de Derek Molloy: você pode simplesmente criar um vazio com touch Modules.symvers . Se o seu kernel não usa modversions (CRCs usados pelo sistema operacional para ajudar a garantir que os módulos combinem com o kernel) e seu módulo não tem nenhuma dependência em outros módulos, isso será bom o suficiente para suprimir o aviso.

WARNING: Symbol version dump ./Module.symvers
         is missing; modules will have no dependencies and modversions.

o arquivo vazio é tão bom quanto o gerado pelo gcc, que tem apenas os símbolos com o mesmo valor de 0x00000000 CRC, em um sistema sem modversions.

    
por 16.07.2017 / 04:47