Como corrigir o kernel com um commit específico

2

Para um projeto em que estou trabalhando, eu preciso ter este commit no meu kernel:

link

Basicamente, são apenas algumas linhas de código. No passado eu sempre fui provido de um ambiente adequado para usar em projetos, exceto que desta vez este é um bug crítico em nosso projeto que precisa deste patch, e como ele está no kernel eu não tenho idéia de como lidar com isso. / p>

Devo compilar um novo kernel com este patch nele? Posso apenas substituir essas linhas de código em algum lugar no kernel do Linux, ou não há apenas um patcher que adiciona apenas essas linhas de código?

Eu não tentei fazer nada sozinho porque temo quebrar o kernel atual. Alguém poderia sugerir o melhor curso de ação? Foi-me dito no canal do IRC do Ubuntu que eu deveria publicá-lo no launchpad.net como um relatório de bug. O problema é que, se isso levar mais de uma semana, alguns prazos devem ser alterados e isso não é desejado.

Atualmente, estou executando a versão mais recente do Wiley Werewolf.

    
por Zimano 02.11.2015 / 17:05

2 respostas

2

Na maioria dos casos e provavelmente no seu caso, você precisará construir um kernel personalizado. Alguns módulos podem ser construídos separadamente, mas não tenho medo neste caso.

Mas construir um kernel não é tão difícil. A Ajuda da comunidade do Ubuntu e o Wiki têm um artigo útil que abrange todos, menos o aplicativo de patch:

  • Kernel / Compile
  • Crie seu próprio kernel

Você pode fazer isso e se referir aos recursos acima se estiver preso em algum lugar (eles tendem a ser mais detalhados):

  1. Instalar os pacotes necessários:

    sudo apt-get install git build-essential fakeroot kernel-package libncurses5-dev libssl-dev
    sudo apt-get build-dep linux-image-$(uname -r)
    

    Você pode precisar de alguns outros pacotes. Não me lembro da lista completa.

  2. Clone o repositório de código-fonte do kernel do Ubuntu:

    git clone git://kernel.ubuntu.com/ubuntu/ubuntu-wily.git
    

    Substitua wily pelo seu nome de lançamento do Ubuntu.

  3. Navegue no terminal até o diretório de origem.

    cd ubuntu-wily
    
  4. Encontre o arquivo que você precisa alterar e fazer alguma edição ou aplicar um patch.

    • Se os patches estiverem disponíveis como uma série de commits do Git, como neste caso, você pode "escolher-os" por seus IDs (depois de buscar o repositório de origem):

      git fetch git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
      git cherry-pick a6ad2a6b9cc1d9d791aee5462cfb8528f366f1d4
      
    • Caso contrário, baixe o arquivo de correção e diga ao Git para aplicá-lo (você pode fazer o download com o seu navegador da Web em vez de wget , se preferir):

      wget -O bluetooth-unpairing-fix.patch 'https://git.kernel.org/cgit/linux/kernel/git/bluetooth/bluetooth-next.git/patch/?id=a6ad2a6b9cc1d9d791aee5462cfb8528f366f1d4'
      git am bluetooth-unpairing-fix.patch
      
    • Se o arquivo de patch não estiver no formato "mailbox" (ou seja, ele não foi enviado (corretamente) para a lista de discussão do Kernel) use

      git apply bluetooth-unpairing-fix.patch
      

      em vez de git am .

    Se o patch não puder ser aplicado devido a alterações conflitantes, o patch é incompatível com a versão atual do kernel. Você pode tentar "mesclar" pequenos conflitos com as ferramentas do Git, mas geralmente você deve tentar encontrar uma versão do patch que deve funcionar com a sua versão do kernel.

  5. Executar fakeroot debian/rules clean

  6. Edite o arquivo debian/changelog . Você pode apenas adicionar algo à versão para ver a diferença com os kernels oficiais.

    Exemplo:

    linux (4.2.0-17.21) wily; urgency=low
    

    mude para:

    linux (4.2.0-17.21btpatch) wily; urgency=low
    

    Você verá este número de versão em debs e no Grub também.

  7. Construa o kernel

    fakeroot debian/rules DEB_BUILD_OPTIONS=parallel=5  binary-headers binary-generic
    

    parellel=5 é para uma CPU de 4 núcleos ou uma CPU de 4 segmentos. Seu número pode ser diferente. É o número de núcleos ou threads + 1.

    A criação de um kernel pode levar muito tempo - de 15 minutos a algumas horas, dependendo do desempenho do sistema!

  8. Você receberá os pacotes deb do seu kernel que podem ser instalados. Você pode removê-lo, se você não gosta de algo.

por Pilot6 02.11.2015 / 17:15
0

O patch é um arquivo de diferença entre duas versões do código do kernel. As linhas verdes nas quais os símbolos + estão lá são as que serão adicionadas e as linhas vermelhas com os símbolos - são as que serão removidas.

Você pode colocá-los em um arquivo .patch e usar o comando patch para percorrê-lo. Isso deve ajudá-lo a usar o comando patch: link

você deve adicioná-lo ao código fonte do kernel e depois recompilar o kernel: link

Se você tem medo de quebrar o kernel, faça um backup dos arquivos initrd e vmlinuz. Quando ele está quebrado, você pode usar o grub para inicializar a versão do kernel. Se você não deve rodar o kernel no PC de compilação e ele é destinado a um PC de destino, então você não deve fazer 'make install'.

    
por CS13 02.11.2015 / 17:18