Como alterar o kernel sem quebrar .ko modules / symbols

0

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?

    
por John U 01.08.2017 / 15:23

0 respostas