Por que eu preciso re-compilação vmware kernel do módulo depois de um kernel Linux atualizar?

StackOverflow https://stackoverflow.com/questions/827862

Pergunta

Depois de um kernel Linux atualizar, meu servidor VMWare não pode começar até usando vmware-config.pl para fazer algum trabalho re-config (incluindo construir alguns módulos do kernel).

Se eu atualizar meu windows host VMware com o mais recente do Windows Service Pack, eu geralmente não precisa fazer nada para executar VMWare.

Por VMWare funciona de forma diferente entre Linux e Windows? Será que esta ação re-compilação traz nenhum benifits na plataforma Linux sobre o Windows?

Foi útil?

Solução

Vá ler O Linux Kernel Driver Interface .

Isto está sendo escrito para tentar explicar por que Linux não tem uma interface de binário do kernel, nem tem uma interface do kernel estável. Por favor, perceber que este artigo descreve as interfaces do _Em kernel_, não o kernel para interfaces de espaço do usuário. O kernel para interface de espaço do usuário é a que programas de aplicação usar, a interface syscall. Essa interface é _very_ estável ao longo do tempo, e não vai quebrar. Eu tenho programas antigos que foram construídos em um kernel 0.9something pre que ainda funciona muito bem na última versão 2.6 do kernel. Esta interface é a que usuários e programadores de aplicativos podem contar com a estável.

Ele reflete a visão de uma grande parte dos desenvolvedores do kernel Linux: a liberdade de mudança no kernel detalhes de implementação e APIs a qualquer momento permite-lhes desenvolver muito mais rápido e melhor.

Sem a promessa de interfaces tendo em-kernel idênticas de versão para versão, não há nenhuma maneira para um módulo do kernel binário como VMWare de trabalhar de forma confiável em vários núcleos.

Por exemplo, se algumas estruturas mudar em uma nova versão do kernel (para melhor desempenho ou mais recursos ou qualquer outro motivo), um módulo VMWare binário pode causar danos catastróficos usando o layout antiga estrutura. Compilando o módulo novamente a partir do código irá capturar o novo layout estrutura, e, assim, uma melhor chance de trabalhar -. Embora ainda não 100%, em campos de caso foram removidos ou renomeados ou dado finalidades diferentes

Se uma função muda a sua lista de argumentos, ou é renomeado ou de outra forma já não está disponível, nem mesmo recompilar a partir do mesmo código fonte irá funcionar. O módulo terá que se adaptar ao novo kernel. Já que todo mundo (deve) ter fonte e (pode encontrar alguém que) é capaz de modificá-lo para se adequar. "Push trabalho para o final de nós" é uma idéia comum, tanto em rede e software livre: uma vez que os recursos [na periferia] / [dos desenvolvedores fora do kernel Linux] são maiores do que os recursos limitados [do backbone] / [dos desenvolvedores Linux], o trade-off para fazer o antigo não mais do trabalho é aceito.

Por outro lado, a Microsoft tomou a decisão que eles devem preservar a compatibilidade driver binário, tanto quanto possível - eles não têm escolha, como eles estão jogando em um mundo próprio. De certa forma, isso torna muito mais fácil para desenvolvedores externos que já não o rosto de um alvo em movimento, e para os usuários finais que nunca tem que mudar nada. Em contrapartida, este forças da Microsoft para manter a compatibilidade com versões anteriores, o que é (na melhor das hipóteses) demorado para desenvolvedores da Microsoft e (no pior dos casos) é ineficiente, provoca erros, e impede o progresso para diante.

Outras dicas

Linux não tem um kernel estável ABI - coisas como o layout interno do datastructures, etc muda de versão para versão. VMWare precisa ser reconstruído para utilizar o ABI no novo kernel.

Por outro lado, o Windows tem um kernel muito estável ABI que não muda de service pack para o Service Pack.

Para adicionar a resposta de bdonlan, compatibilidade ABI é um saco misturado. Por um lado, ele permite que você para distribuir módulos binários e motoristas que trabalham com versões mais recentes do kernel. Por outro lado, ele força os programadores de kernel para adicionar um monte de código cola para manter a compatibilidade com versões anteriores. Como o Linux é open-source, e porque os desenvolvedores do kernel, mesmo se eles estão sequer autorizados , o capacidade de distribuir módulos binários não é considerado tão importante. No lado positivo, os desenvolvedores Linux Kernel não tem que se preocupar com a compatibilidade ABI ao alterar datastructures para melhorar o kernel. No longo prazo, isso resulta em código do kernel mais limpa.

É uma consequência do Linux e Windows a ser desenvolvido em diferentes ambientes culturais e expectativas: http: // www.joelonsoftware.com/articles/Biculturalism.html . Em suma:. Windows foi projetado para ser adequado para usuários, enquanto evolui Linux para ser adequado para desenvolvedores de código aberto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top