Erro de compilação do kernel com iw_ndis.c

1

Eu tenho um hp pavilion dm3t com gráficos Intel HD rodando o ubuntu 10.10 64 bit. Estou tentando compilar e instalar um kernel corrigido de acordo com isso, link

Então eu baixei o tarball daqui (linkado da página acima): link

Eu o untar em um diretório, entrei no diretório e fiz:

make defconfig

Eu não tenho certeza se é isso que eu deveria ter feito, mas foi bem-sucedido, então eu fiz:

make

que parecia funcionar bem até que deu esses erros:

ubuntu/ndiswrapper/iw_ndis.c:1966: error: unknown field ‘num_private’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1966: warning: initialization makes pointer from integer without a cast
ubuntu/ndiswrapper/iw_ndis.c:1967: error: unknown field ‘num_private_args’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1967: warning: excess elements in struct initializer
ubuntu/ndiswrapper/iw_ndis.c:1967: warning: (near initialization for ‘ndis_handler_def’)
ubuntu/ndiswrapper/iw_ndis.c:1970: error: unknown field ‘private’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1970: warning: initialization makes integer from pointer without a cast
ubuntu/ndiswrapper/iw_ndis.c:1970: error: initializer element is not computable at load time
ubuntu/ndiswrapper/iw_ndis.c:1970: error: (near initialization for ‘ndis_handler_def.num_standard’)
ubuntu/ndiswrapper/iw_ndis.c:1971: error: unknown field ‘private_args’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1971: warning: initialization from incompatible pointer type
make[2]: *** [ubuntu/ndiswrapper/iw_ndis.o] Error 1
make[1]: *** [ubuntu/ndiswrapper] Error 2
make: *** [ubuntu] Error 2

Como posso compilar e instalar este kernel com sucesso? Sou novo nisso e gostaria de receber ajuda.

    
por James 30.12.2010 / 22:44

2 respostas

2

Considerando sua última pergunta sobre o seu laptop backlight , você não precisa compilar o kernel para usar o patch. Você só precisa adicionar o PPA às fontes de software do seu sistema.

htorque explicou como proceder em seu comentário :

% bl0ck_qu0te%

Todo o processo já está detalhado na parte inferior da página que você vinculou .

    
por Maxime R. 30.12.2010 / 23:22
0

Os campos num_private e num_private_args são definidos apenas quando o CONFIG_WEXT_PRIV é definido durante a compilação do kernel, portanto, é necessário adicionar as linhas # ifdef / # endif aqui ao iw_ndis.c:

const struct iw_handler_def ndis_handler_def = {
    .num_standard   = sizeof(ndis_handler) / sizeof(ndis_handler[0]),
#ifdef CONFIG_WEXT_PRIV 
    .num_private    = sizeof(priv_handler) / sizeof(priv_handler[0]),
    .num_private_args = sizeof(priv_args) / sizeof(priv_args[0]),
#endif
    .standard   = (iw_handler *)ndis_handler,
#ifdef CONFIG_WEXT_PRIV 
    .private    = (iw_handler *)priv_handler,
    .private_args   = (struct iw_priv_args *)priv_args,
#endif  
    .get_wireless_stats = get_iw_stats,
};

No entanto, isso não é tudo. Você também obterá um erro ao compilar o wrapndis.c , para que você precise encontrar as linhas com a seguinte instrução if (na linha aproximada 1820) e envolvê-la em um # ifdef / # endif.

#ifdef CONFIG_WEXT_PRIV
if (wnd- > physical_medium == NdisPhysicalMediumWirelessLan) { net_dev- > wireless_handlers = & amp; ndis_handler_def; } #endif

Devo acrescentar que estou tentando compilar isso sozinho e não testei o ndiswrapper tendo feito isso para o YMMV.

O acima para o wrapndis está errado, parece que CONFIG_WIRELESS_EXT não está definido na (minha) configuração do kernel. Se fosse então eu não deveria receber este erro.

    
por RobS 23.03.2011 / 23:15