Não há como trocar dois Kernels completos. Tenho certeza que você pode entender o significado de um kernel monolítico como o Linux e por que isso impossibilita a substituição.
O mais próximo que você pode chegar é de um processo de patch ao vivo usando o Ksplice . Ele converte as atualizações do Kernel em calços mágicos que podem obstruir um Kernel em execução, permitindo que você mantenha o computador indefinidamente sem precisar de uma reinicialização. Para seus propósitos, ele também permite reverter as alterações.
É gratuito para as edições do Ubuntu Desktop, para que você possa brincar com ele, mas precisa pagar uma assinatura por servidores (onde esse tipo de coisa é mais necessário).
Acabei de ver sua edição. O Ksplice provavelmente não ajudará se você estiver hackeando manualmente e construindo seus próprios Kernels para depuração, pois "o serviço" é que eles fornecem atualizações especiais e não são algo que você pode gerar sozinho.
Se você está apenas construindo coisas contra um kernel oficial, ele ainda pode funcionar.
Mais uma ideia: virtualização. Você pode criar seu novo kernel e trocar as coisas na sua VM e reiniciar. Ainda vai demorar o tempo necessário para reiniciar, mas você pode tornar a VM muito mais leve que a sua máquina de desenvolvimento (baseie-a no Ubuntu Server, largue o servidor X se não precisar, etc.).
Como Oli mencionou, sua melhor chance é provavelmente virtualização.
Dito isso, se você estiver mexendo no hardware, a virtualização pode não ser o ideal para você; nesse caso, você pode usar
kexec
para trocar o kernel em execução sem uma reinicialização completa.Retirado da página do ArchWiki
kexec
:Observe que o descrito acima ainda reiniciará todos os serviços , incluindo o sistema init, o servidor de exibição, a rede etc. No entanto, se você usar um sistema init rápido o suficiente
systemd
, poderá iniciar o novo kernel em 2 a 3 segundos, pois você está ignorando o BIOS / UEFI e o carregador de inicialização.Uma descrição semelhante pode ser encontrada na página Wiki do RapidReboot Ubuntu .
fonte
Eu acho que essas respostas precisam ser atualizadas.
Há kpatch agora , o que é mais do que nativo ksplice et al.
Porém, ele não pode alterar as estruturas de dados no kernel, por razões óbvias, por isso é útil principalmente para hotpatches de segurança.
O problema geral sempre é: Os processos em execução ainda mantêm as estruturas de dados do kernel, esperando que as funções do kernel os esperem e os devolvam. E sem que esses processos sejam feitos para isso, não é realmente possível saber se é esse o caso. Portanto, você não pode alterá-los até que todos os processos que os usem sejam reiniciados. Exigiria o patch ao vivo de todos esses programas também.
E eu nem mencionei mudanças de driver, quando o hardware está em um estado especial. (O mesmo problema do kexec .)
fonte