Que considerações devem ser feitas ao escolher a versão do kernel para um dispositivo embarcado?

3

Eu usei buildroot para criar com êxito um kernel, sistema de arquivos raiz e cross-compilers para permitir que eu escrevesse o código do aplicativo para ser executado em um dispositivo incorporado. Atualmente, não tenho necessidade de gravar drivers de dispositivo e atualmente não tenho a menor idéia de como fazê-lo, mas é bem provável que, no futuro, eu precise fazer isso. Da minha pesquisa, cheguei a entender que a API do kernel pode mudar entre as versões e que escrever um driver de dispositivo é específico para uma versão do kernel, ao contrário de escrever um aplicativo no nível do usuário. Basicamente eu gostaria de saber:

  1. O código acima está correto?
  2. Quais fatores precisam ser considerados ao decidir sobre qual versão do kernel deve ser usada?

A razão pela qual eu pergunto é que, de toda a literatura que li sobre o assunto (e a participação em um curso linux embutido) lida com os kernels da versão 2.6.x. Eu estou construindo por sistema embarcado usando um kernel 3.6.11, mas estou me perguntando por que o curso e a literatura parecem lidar com esses kernels mais antigos. Existem aspectos benéficos para usar um kernel antigo, ou há desvantagens em usar versões mais recentes?

    
por mathematician1975 07.05.2013 / 12:14

3 respostas

2

3.x é apenas a continuação do 2.x - em determinado momento, Linus decidiu que a parte "x" da versão é muito grande. Geralmente você provavelmente quer um kernel razoavelmente recente, provavelmente marcado como "longo prazo" . Também depende muito da sua aplicação - enquanto falhas de segurança remotas no kernel são bastante escassas, os problemas locais são muito mais comuns.

    
por 07.05.2013 / 12:47
2

Escolher um kernel é um problema de restrição:

    O
  1. kernel deve ser novo o suficiente para suportar de forma confiável o hardware no qual você está executando (por exemplo, drivers de NIC)
  2. O
  3. kernel deve ser novo o suficiente para suportar de maneira confiável os recursos de software que você está planejando usar (por exemplo, iptables)
  4. O
  5. kernel deve ser novo o suficiente para eliminar o máximo de vulnerabilidades possíveis
  6. O
  7. kernel deve ter idade suficiente para ser comprovadamente confiável (existe algo como 'borda de ponta')
  8. O
  9. kernel deve ser de série que receberá atualizações de longo prazo (a menos que seja um sistema que, uma vez implantado, não tenha chance de ser atualizado, então não importa, mas você deve colocar mais peso em # 4 e # 3)

Depois de percorrer essa lista, a lista de kernels que realmente atende às suas necessidades tende a ser muito pequena, então a solução tende a ficar clara.

    
por 07.05.2013 / 15:50
0

Você não pode simplesmente usar o kernel estável mais recente? Se você tem código-fonte antigo para drivers de dispositivos, acho que tudo que você deve verificar é que os nomes dos dispositivos coincidem (como /dev/eth0 is /dev/enp2s0f0 - > ainda não sei por que isso é bom).

    
por 08.05.2013 / 12:20