Disponibiliza módulos do kernel que foram desativados no Fedora

6

Editar : eu transformei o Cristians em um script que faz tudo automaticamente: link

Eu preciso de alguns módulos do kernel que estão disponíveis no Linux, mas que foram desativados no Fedora 20 e eu me pergunto qual é a maneira mais fácil e mais avançada de disponibilizá-los. (ou seja, net / CAN suport resultando em alguns módulos can_ *)

  • existem fedora-repos / rpms que disponibilizam módulos desativados?
  • ou preciso compilar esses módulos manualmente?
  • neste caso - existe algum mecanismo para automatizar isso no caso de uma atualização do kernel ou eu tenho que compilá-los repetidamente?

Eu já segui este HowTo (e há muitos mais muito parecidos por aí) mas o " build Um módulo apenas "seção parece funcionar apenas para módulos que não foram desativados porque nesse caso até mesmo as fontes do módulo estão faltando.

Aqui está o que eu tentei seguindo o tutorial mencionado:

Primeiro tentei seguir a seção Fora dos Módulos de Árvore , mas naquela árvore de código-fonte enviada com kernel-devel até mesmo as fontes para suporte a CAN estão faltando. Então eu tento construir os módulos a partir do src.rpm:

$ yumdownloader --source kernel
$ sudo yum-builddep kernel-3.14.8-200.fc20.src.rpm
$ rpm -Uvh kernel-3.14.8-200.fc20.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=$(uname -m) kernel.special
$ cd ~/rpmbuild/BUILD/<kerneldir>/<linuxdir>
$ <configure the kernel using menuconfig>
$ make prepare

Então eu construo e recebo alguns avisos:

$ make -C /lib/modules/'uname -r'/build M='pwd'/net/can modules
make: Entering directory '<rpmbuild-BUILD-kernel-linux-dir>'

  WARNING: Symbol version dump <rpmbuild-BUILD-kernel-linux-dir>/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/bcm.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/gw.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/raw.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/af_can.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/proc.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.o
  Building modules, stage 2.
  MODPOST 4 modules
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.ko
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.ko
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.ko
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.ko
make: Leaving directory '<rpmbuild-BUILD-kernel-linux-dir>'

$ sudo make -C /lib/modules/'uname -r'/build M='pwd'/net/can modules_install
make: Entering directory '<rpmbuild-BUILD-kernel-linux-dir>'
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.ko
Can't read private key
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.ko
Can't read private key
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.ko
Can't read private key
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.ko
Can't read private key
  DEPMOD  3.14.8
make: Leaving directory '<rpmbuild-BUILD-kernel-linux-dir>'

Eu não recebo o primeiro aviso quando acabo de executar make modules , mas isso me custa cerca de uma hora.

No entanto, após a instalação, os arquivos .ko estão localizados no diretório errado ( /usr/lib/modules/3.14.8 em vez de /usr/lib/modules/3.14.8-200.fc20.x86_64 ) e depois de depmod -a e modprobe can eu obtenho

modprobe: ERROR: could not insert 'can': Exec format error

O que estou fazendo de errado?

    
por frans 18.06.2014 / 14:46

2 respostas

6

Acho que consegui, embora esteja longe de ser perfeito.

  1. Prepare o código-fonte executando

    rpmbuild -bp --target=$(uname -m) kernel.spec
    
  2. Vá para o diretório de criação, por exemplo, por:

    cd ~/rpmbuild/BUILD/kernel-3.14.fc20/linux-3.14.8-200.fc20.x86_64
    
  3. Edite Makefile e defina EXTRAVERSION para algo como:

    EXTRAVERSION = -200.fc20.x86_64
    
  4. Ativar os módulos. Sugiro começar com o arquivo correspondente abaixo do diretório configs (usei kernel-3.14.8-x86_64.config ).

  5. Prepare o kernel para os módulos:

    make modules_prepare
    
  6. Construa o módulo:

    make M=drivers/net/can
    
  7. Lucro! Insira o módulo:

    insmod can-dev.ko
    
por 23.06.2014 / 21:02
0

Por questão de integridade, aqui está uma lista completa de etapas que você precisa fazer os módulos CAN (ou qualquer outro módulo) disponíveis que foram desabilitados no Fedora (removendo as fontes, portanto, apenas usando a abordagem kernel-devel não faz isso).

Esse procedimento pode não ser perfeito, mas funciona para mim e ativa peak_usb e vcan , bem como os módulos CAN básicos no Fedora.

Melhorias são apreciadas e serão honradas, já que terei que fazer isso com muita frequência.

  1. você pode querer atualizar seu kernel agora para não ter que fazer isso duas vezes

    sudo yum update
    reboot
    
  2. prepare, obtenha e instale a árvore de código-fonte do kernel do Fedora

    rpmdev-setuptree
    yumdownloader --source kernel
    sudo yum-builddep kernel-3.14.8-200.fc20.src.rpm
    rpm -Uvh kernel-3.14.8-200.fc20.src.rpm
    cd ~/rpmbuild/SPECS
    rpmbuild -bp --target=$(uname -m) kernel.spec
    
  3. Edite Makefile e defina EXTRAVERSION para algo como:

    cd ~/rpmbuild/BUILD/kernel-3.14.fc20/linux-3.14.8-200.fc20.x86_64
    EXTRAVERSION = -200.fc20.x86_64
    
  4. Configure o kernel primeiro buscando uma configuração básica, por exemplo,

    cp /boot/config-3.14.8-200.fc20.x86_64 .config
    

    ou

    cp configs/kernel-3.14.8-x86_64.config .config
    

    e configure-o ativando os módulos necessários, por exemplo,

    make menuconfig
    
  5. Construa os módulos

    make modules_prepare
    make M=net/can modules
    make M=drivers/net/can modules
    
  6. Instalar e carregar

    sudo make M=net/can modules_install
    sudo make M=drivers/net/can modules_install
    sudo depmod -a
    sudo modprobe can
    
por 24.06.2014 / 12:03