Como compilar um ISO com um patch de kernel para outro computador?

2

Comprei recentemente um HP Stream, que é um laptop elegante e barato que eu pretendia instalar no Xubuntu. Infelizmente, tenho tido problemas devido à sua unidade eMMC.

Eu achei que parece ser impossível instalar qualquer versão do Linux (eu tentei as famílias Ubunbtu, Debian e Arch) sem aplicar este correção do kernel.

Embora eu esteja familiarizado com o Linux como um sistema operacional, nunca precisei aplicar um patch de kernel, e não tenho certeza de como fazer isso para atender aos meus propósitos. Tutoriais que encontrei ainda estão longe para usuários avançados que procuram atualizar seu sistema operacional atual.

A partir da minha leitura, é possível compilar o kernel em uma máquina diferente, desde que tenha a mesma arquitetura. (Ambos os computadores são x64) e possuem os drivers necessários.

Minhas perguntas são:

Como posso aplicar este patch do kernel?

Como posso instalá-lo na minha máquina (ISO?)

Eu entendo que isso é potencialmente um longo e detalhado Q & A, mas tenho um pouco de falta de ideias.

    
por Alexander Lozada 20.12.2014 / 13:52

1 resposta

2

Eu acho que não é super fácil, se houvesse alguma opção de inicialização do kernel que pudesse ajudar a inicializar a HP com um kernel padrão (como noapic, nomodeset, etc) eu tentaria primeiro.

Algumas instruções são muito longas & variou para postar aqui [ link ], mas uma página realmente parece quase razoável, se você está compilando para o mesmo arquitetura & Lançamento do Ubuntu.

Estes passos são para compilar um kernel em sua máquina atual, se é o mesmo "tipo" x64 e rodando a mesma versão do Ubuntu que pode funcionar. [Do link ]:

Obtendo a fonte para um lançamento do Ubuntu

Ou

  • apt-get source linux-image-$(uname -r)
  • ou git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release codename>.git
    Por exemplo, para obter a árvore precisa:
    git clone git://kernel.ubuntu.com/ubuntu/ubuntu-precise.git

Construir Ambiente

Se você não criou um kernel em seu sistema antes, existem alguns pacotes necessários para que você possa construir com sucesso. Você pode obter estes instalados com:

sudo apt-get build-dep linux-image-$(uname -r)

Modificando a configuração

[Aqui está a parte em que você aplicaria seu patch. Esse link parece que o patch apenas modifica drivers/mmc/card/block.c , para que o arquivo esteja nos arquivos de origem baixados. Parece que apenas adiciona um pouco a uma linha, por isso, se quiser editar manualmente a linha com copy & colar que deve funcionar, apenas remove as linhas iniciais " - " e adiciona as linhas iniciais " + ". Ou usando o programa patch com patch --verbose -p1 <the_patch_file (talvez sem o -p1 , se não funcionar, controla como ele encontra o arquivo a ser corrigido, veja man patch para informações). Se você não está fazendo outras alterações, eu pular o resto, como as instruções sugerem. ]

Esta etapa pode ser ignorada se nenhuma alteração de configuração for desejada. O processo de compilação usará uma configuração que é reunida a partir de vários arquivos de subconfiguração. A maneira mais simples de modificar qualquer coisa aqui é executar:

chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs

Isto leva a configuração atual para cada arquitetura / sabor suportado e chama o menuconfig para editar seu arquivo de configuração. O chmod é necessário porque a forma como o pacote fonte é criado perde os bits executáveis nos scripts.

O apt-get tentará "atualizar" o kernel para a compilação / versão do kernel do Ubuntu se você construir um kernel customizado sem anexar uma string extra ao final da sua versão do kernel. Para evitar que o apt-get liste o kernel do Ubuntu como atualizável quando você digita apt-get upgrade, você deve (a partir da documentação do kernel) acrescentar uma string extra ao final da sua versão do kernel. Isso aparecerá quando você digitar uname, por exemplo.

Para evitar isso, no menu Configuração do Kernel, navegue e modifique:

  1. Configuração geral --- >
  2. () Versão local - anexar ao lançamento do kernel

Construindo o kernel

Construir o kernel é muito fácil. Altere seu diretório de trabalho para a raiz da árvore de origem do kernel e digite os seguintes comandos:

fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic

Se a compilação for bem sucedida, um conjunto de três arquivos de pacotes binários .deb será produzido no diretório acima do diretório raiz da compilação. Por exemplo, depois de construir um kernel com a versão "2.6.38-7.37" em um sistema amd64, esses três (ou quatro) pacotes .deb seriam produzidos:

cd ..
ls *.deb
    linux-headers-2.6.38-7_2.6.38-7.37_all.deb
    linux-headers-2.6.38-7-generic_2.6.38-7.37_amd64.deb
    linux-image-2.6.38-7-generic_2.6.38-7.37_amd64.deb

em versões posteriores, você também encontrará um pacote linux-extra-package que também deverá ser instalado, se presente.

Testando o novo kernel

Instale o conjunto de três pacotes (em seu sistema de compilação ou em um sistema de destino diferente) com dpkg -i e, em seguida, reinicialize:

sudo dpkg -i linux*2.6.38-7.37*.deb
sudo reboot

Sobre a parte de instalação, eu não me incomodaria em construir um ISO (com algo como remastersys) que provavelmente é apenas mais uma dor de cabeça;)

Se você pudesse simplesmente copiar os arquivos para o disco rígido que possa funcionar. Eu normalmente sugiro um live cd / usb do linux, mas se o Ubuntu não inicializar ... talvez uma distro diferente com um kernel diferente, ou use o windows para copiar os arquivos, ou uma imagem de partição e um equivalente no windows dd ferramenta?

    
por 20.12.2014 / 15:32