modpost.h: 12: 23: erro fatal: elfconfig.h: Nenhum arquivo ou diretório

0

Estou executando o Ubuntu:

#lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.4 LTS
Release:    12.04
Codename:   precise
Kernel info:

3.8.0-38-generic #56~precise1-Ubuntu SMP Thu Mar 13 16:23:47 UTC 2014 i686 i686 i386 GNU/Linux

A fonte que estou tendo é: linux-lts-raring-3.8.0

Quando estou tentando fazer meu primeiro driver, recebo os seguintes erros:

make -C /usr/linux-lts-raring-3.8.0 SUBDIRS=/home/drdr/Documents/drivers/first_driver modules
make[1]: Entering directory '/usr/linux-lts-raring-3.8.0'

  WARNING: Symbol version dump /usr/linux-lts-raring-3.8.0/Module.symvers
           is missing; modules will have no dependencies and modversions.

  Building modules, stage 2.
  MODPOST 1 modules
/bin/sh: 1: scripts/mod/modpost: not found
make[2]: *** [__modpost] Error 127
make[1]: *** [modules] Error 2
make[1]: Leaving directory '/usr/linux-lts-raring-3.8.0'
make: *** [default] Error 2

Depois fui para scripts / mod / no meu diretório fonte que eu digitei make:

root@drdr:/usr/linux-lts-raring-3.8.0/scripts/mod# make modpost
cc     modpost.c   -o modpost
In file included from modpost.c:18:0:
modpost.h:12:23: fatal error: elfconfig.h: No such file or directory
compilation terminated.
make: *** [modpost] Error 1

Atualizar Eu encontrei um arquivo relacionado mk_elfconfig.c. Existe uma maneira de gerar o elfconfig.h a partir disso;

root@drdr:/usr/linux-lts-raring-3.8.0/scripts/mod# ls -ld mk_elfconfig.c 
-rw-r--r-- 1 root root 1234 Feb 19  2013 mk_elfconfig.c

Por que estou recebendo esse erro? Eu acredito que a versão do código fonte e o que está sendo executado são os mesmos.

O Makefile e o código-fonte do driver são fornecidos aqui

Atualizar depois de copiar o config-from / boot para o meu código-fonte como .config: Eu fiz

root@drdr:/home/drdr/Documents/drivers/linux-lts-raring-3.8.0#make oldconfig 
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#

root@drdr:/home/drdr/Documents/drivers/linux-lts-raring-3.8.0# make prepare
scripts/kconfig/conf --silentoldconfig Kconfig
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_32.h
  HOSTCC  arch/x86/tools/relocs
  WRAP    arch/x86/include/generated/asm/clkdev.h
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
  GEN     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
root@drdr:/home/drd/Documents/drivers/linux-lts-raring-3.8.0# 

Mas ainda o mesmo erro na compilação do driver:

root@drdr:/home/drdr/Documents/drivers/first_driver# make
make -C /usr/linux-lts-raring-3.8.0 SUBDIRS=/home/drdr/Documents/drivers/first_driver modules
make[1]: Entering directory '/usr/linux-lts-raring-3.8.0'

  WARNING: Symbol version dump /usr/linux-lts-raring-3.8.0/Module.symvers
           is missing; modules will have no dependencies and modversions.

  Building modules, stage 2.
  MODPOST 1 modules
/bin/sh: 1: scripts/mod/modpost: not found
make[2]: *** [__modpost] Error 127
make[1]: *** [modules] Error 2
make[1]: Leaving directory '/usr/linux-lts-raring-3.8.0'
make: *** [default] Error 2 
    
por user2799508 22.04.2014 / 08:54

1 resposta

1

Eu não sei exatamente o que você descompactou em /usr/linux-lts-raring-3.8.0 , mas:

  • Provavelmente não é o que você precisa.
  • A localização é realmente estranha, você não deveria criar diretórios diretamente em /usr .

Para compilar um módulo do kernel, o que você precisa são os cabeçalhos e mais alguns arquivos produzidos pela compilação do kernel com a mesma configuração. Consulte Não é possível carregar module: Discorda sobre a versão do símbolo module_layout para uma explicação mais completa.

Remova este /usr/linux-lts-raring-3.8.0 e instale o pacote de cabeçalhos do kernel correspondente ao seu kernel em execução: por exemplo, se o seu kernel em execução for do pacote linux-image-3.8.0-38-generic , instale o pacote linux-headers-3.8.0-38-generic .

Para compilar um módulo contra uma versão do kernel Debian / Ubuntu /… como linux-headers-3.8.0-38-generic , vá ao diretório do módulo e execute

make -C /usr/src/linux-headers-3.8.0-38-generic M=$PWD

Para compilar um módulo contra o kernel em execução, certifique-se de que o pacote apropriado de cabeçalhos do kernel esteja instalado e rodando

make -C /lib/modules/'uname -r'/build M=$PWD

Eu recomendo ler kbuild/modules.tt na documentação do kernel.

    
por 23.04.2014 / 03:06