Primeiro, eu não sou um hacker do kernel, então peço desculpas se eu tiver termos termos errado e coisas do tipo.
Em segundo lugar, devo explicar nosso ambiente: Um pequeno computador de placa única (não, NÃO um Raspberry pi, mas estilo similar) que executa o Linux / Busybox com base em uma pilha SDK / dev fornecida por o (desinteressado) fabricante do SoC e basicamente hackeado por hordas de escravos do código Elboniano com suporte zero. Uma compilação do kernel antigo e o Busybox significa que não temos acesso a muitos dos mais comuns comandos / ferramentas do Linux, modprobe
sendo o mais relevante aqui.
Embora tenhamos feito o possível para exorcizar grandes faixas do WTFery, ainda é um trabalho em andamento.
O que me leva até onde estamos agora:
Em uma tentativa de limpar a compilação do kernel removendo / desabilitando coisas que não são necessárias, eu achei que se eu desabilitasse algo que podemos viver sem (por exemplo, CONFIG_DEBUG_FS), um monte de módulos não carrega (usando insmod
no processo de inicialização), por exemplo:
[ 16.490979] loop: disagrees about version of symbol set_blocksize
[ 16.497116] loop: Unknown symbol set_blocksize (err -22)
[ 16.503304] loop: disagrees about version of symbol ioctl_by_bdev
[ 16.509440] loop: Unknown symbol ioctl_by_bdev (err -22)
[ 16.515656] loop: disagrees about version of symbol set_user_nice
[ 16.521898] loop: Unknown symbol set_user_nice (err -22)
[ 16.527686] loop: disagrees about version of symbol add_disk
O problema é que o próprio kernel reside em uma partição do flash do dispositivo, e o sistema de arquivos do usuário (incluindo o Busybox e os módulos mencionados acima) residem em outra partição, junto com as ferramentas de atualização flash. A atualização dos downloads da rotina & pisca uma partição de cada vez.
Então, chegamos a uma situação difícil: Se atualizarmos a imagem do Kernel , corremos o risco de a placa não inicializar porque os módulos .ko no arquivo imagem do sistema ainda não está atualizada, mas se atualizarmos a imagem do sistema de arquivos, corremos o risco de o painel não inicializar porque o kernel ainda não está atualizado.
Embora haja algumas maneiras de contornar isso, eles correm o risco de dar aos clientes a oportunidade de bloquear o fórum ao não seguir as instruções (e, se possível, quebrá-lo, alguém irá gerenciá-lo).
Então, minha pergunta é:
(Como) podemos modificar o kernel (principalmente, removendo coisas) e / ou reconstruir os módulos de forma que possamos passar de uma construção de kernel + módulos etc. para um mais novo sem risco interino de ruptura e falha terríveis?
Tags kernel kernel-modules linux