Não é possível compilar o kernel do Linux

5

Estou tentando atualizar meu kernel para o 4.5 no Linux Mint 17.3, mas recebo o seguinte erro:

Makefile:666: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler

  LD      /var/lib/dkms/ndiswrapper/1.59/build/built-in.o
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/crt_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/hal_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ndis_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ntoskernel_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ntoskernel_io_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/rtl_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/usb_exports.h
  MKSTUBS /var/lib/dkms/ndiswrapper/1.59/build/win2lin_stubs.h
  CC [M]  /var/lib/dkms/ndiswrapper/1.59/build/crt.o

gcc: error: unrecognized command line option ‘-fstack-protector-strong’
make[1]: *** [/var/lib/dkms/ndiswrapper/1.59/build/crt.o] Error 1
make: *** [_module_/var/lib/dkms/ndiswrapper/1.59/build] Error 2
make: Leaving directory '/usr/src/linux-headers-4.5.0-040500-generic'

Eu tenho a versão 4.8.4 do GCC.

A seguir está o erro após atualizar o gcc para 4.9. Eu li em algum lugar que isso é um bug?

DKMS make.log for ndiswrapper-1.59 for kernel 4.5.0-040500-generic (x86_64)

make: Entering directory '/usr/src/linux-headers-4.5.0-040500-generic'
  LD      /var/lib/dkms/ndiswrapper/1.59/build/built-in.o
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/crt_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/hal_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ndis_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ntoskernel_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ntoskernel_io_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/rtl_exports.h
  MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/usb_exports.h
  MKSTUBS /var/lib/dkms/ndiswrapper/1.59/build/win2lin_stubs.h
  CC [M]  /var/lib/dkms/ndiswrapper/1.59/build/crt.o
  CC [M]  /var/lib/dkms/ndiswrapper/1.59/build/hal.o
  CC [M]  /var/lib/dkms/ndiswrapper/1.59/build/iw_ndis.o
  CC [M]  /var/lib/dkms/ndiswrapper/1.59/build/loader.o
/var/lib/dkms/ndiswrapper/1.59/build/loader.c: In function ‘load_sys_files’:
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:157:4: error: implicit declaration of function ‘__vmalloc’ [-Werror=implicit-function-declaration]
    __vmalloc(load_driver->sys_files[i].size,
    ^
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:156:19: warning: assignment makes pointer from integer without a cast
   pe_image->image =
                   ^
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:207:5: error: implicit declaration of function ‘vfree’ [-Werror=implicit-function-declaration]
     vfree(driver->pe_images[i].image);
     ^
/var/lib/dkms/ndiswrapper/1.59/build/loader.c: In function ‘add_bin_file’:
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:298:2: error: implicit declaration of function ‘vmalloc’ [-Werror=implicit-function-declaration]
  bin_file->data = vmalloc(driver_file->size);
  ^
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:298:17: warning: assignment makes pointer from integer without a cast
  bin_file->data = vmalloc(driver_file->size);
                 ^
/var/lib/dkms/ndiswrapper/1.59/build/loader.c: In function ‘wrapper_ioctl’:
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:789:15: warning: assignment makes pointer from integer without a cast
   load_driver = vmalloc(sizeof(*load_driver));
               ^
/var/lib/dkms/ndiswrapper/1.59/build/loader.c: In function ‘wrapper_ioctl_compat’:
/var/lib/dkms/ndiswrapper/1.59/build/loader.c:884:11: warning: assignment makes pointer from integer without a cast
   kdriver = vmalloc(sizeof(*kdriver));
           ^
cc1: some warnings being treated as errors
make[1]: *** [/var/lib/dkms/ndiswrapper/1.59/build/loader.o] Error 1
make: *** [_module_/var/lib/dkms/ndiswrapper/1.59/build] Error 2
make: Leaving directory '/usr/src/linux-headers-4.5.0-040500-generic'
    
por agyeya 20.03.2016 / 05:45

2 respostas

5

Não tenho certeza se você ainda está procurando por uma resposta, mas eu estava correndo para o mesmo problema tentando atualizar para o kernel 4.5.3. Eu encontrei o meu sistema tinha gcc-5 instalado e comutação para que resolveu o primeiro problema (-fstack-protector-strong). Eu então recebi o segundo conjunto de erros que você listou sobre ndiswrapper / 1.59. Eu acredito que este é um bug no software, mas a solução que encontrei foi modificar o código ndiswrapper adicionando duas linhas a um dos arquivos de origem. Isso permitiu compilar com sucesso. Adicione estas linhas imediatamente antes da linha existente #include "ndiswrapper.h" in /usr/src/ndiswrapper-1.59/loader.h :

#define strnicmp strncasecmp // ndis.c fails to compile without this
#include <linux/vmalloc.h>   // loader.c fails to compile without this

Ou aqui está um script simples para fazer a atualização para você (se você recortar / colar corretamente):

if ! grep -q strncasecmp /usr/src/ndiswrapper-1.59/loader.h; then
  sed -i -e '/ndiswrapper.h/i \
#define strnicmp strncasecmp \
#include <linux/vmalloc.h>' /usr/src/ndiswrapper-1.59/loader.h
fi
    
por 14.05.2016 / 23:49
2

CONFIG_CC_STACKPROTECTOR_STRONG é uma opção de configuração do kernel adicionada no 3.14 que é compilada com -fstack-protector-strong , que requer o GCC 4.9. Você precisa atualizar o GCC para 4.9 ou parar de construir o kernel com CONFIG_CC_STACKPROTECTOR_STRONG (o primeiro seria melhor). Há algumas informações básicas em este artigo do LWN .

    
por 20.03.2016 / 05:54