Árvore de fontes de patch e desenvolvimento do kernel Linux

3

Estamos usando o linux3.12 e seu driver led possui um bug que foi corrigido na versão posterior do Linux. Nós vemos que a mudança de driver no Linux 3.15 veja Referência Cruzada do Linux

Agora, minha pergunta é: como posso encontrar um patch que induza essa alteração?

Outra questão é como posso obter acesso à árvore de código-fonte do kernel de desenvolvimento? kernel-3.14.18 tree?

    
por AnkurTank 18.09.2014 / 15:18

2 respostas

2

how can I find a patch which induced this change

Use cgit, vá aqui e clique em árvore . Navegue até o arquivo que você está procurando e clique em log . Você pode ver as alterações no arquivo.

link

Para baixar os fontes do kernel Linux, vá para o kernel.org e escolha sua versão.

A árvore de desenvolvimento instável está aqui: link

    
por 18.09.2014 / 15:35
2

obtendo a fonte do kernel

Clone a árvore do kernel estável:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Mude para ele:

cd linux-stable

Faça o check-out de uma tag em que o bug foi corrigido:

git checkout v3.15

Você conhece o arquivo que está atrás de drivers/leds/led-core.c e onde o bug está corrigido (3.15) e quebrado (3.12), portanto, há algumas maneiras de prosseguir aqui.

culpa

Você pode usar git blame drivers/leds/led-core.c , mas acho essa visualização confusa.

Eu prefiro tig , uma interface baseada em curses para git, então apenas:

tig blame drivers/leds/led-core.c

e veja cada linha do arquivo e os commits interativamente. Você pode subir e descer com as setas do teclado e entrar em um commit com Enter . Saia com q .

Você pode ver o patch ao qual você se vinculou no LXR nas Linhas 42 a 46:

2014-02-04 00:11 Stefan Sørensen 8d82fef         /* never on - just set to off */
2014-02-04 00:11 Stefan Sørensen 8d82fef         if (!delay_on) {
2014-02-04 00:11 Stefan Sørensen 8d82fef                 __led_set_brightness(led_cdev, LED_OFF);
2012-03-23 15:02 Bryan Wu        a403d93                 return;
2014-02-04 00:11 Stefan Sørensen 8d82fef         }

Então você está procurando por 8d82fef . Pressione Enter sobre qualquer uma dessas linhas e você abrirá o patch.

Isso é muito mais útil para arquivos maiores com muitos patches recentes.

log

Você precisa de um período, de modo que, pesquisando git log das tags "bom" e "ruim", as mesclagens 3.15 e 3.12 foram:

commit 1860e379875dfe7271c649058aeddffe5afd9d0d
Author: Linus Torvalds <[email protected]>
Date:   Sun Jun 8 11:19:54 2014 -0700

    Linux 3.15

e

commit 5e01dc7b26d9f24f39abace5da98ccbd6a5ceb52
Author: Linus Torvalds <[email protected]>
Date:   Sun Nov 3 15:41:51 2013 -0800

    Linux 3.12

Portanto, qualquer coisa entre 2 de novembro de 2013 e 8 de junho de 2014 é o seu patch.

Procure no log do arquivo em questão:

git log drivers/leds/led-core.c

O único patch que corresponde a esse período é o mais recente:

commit 8d82fef8bbee588d071372eb02439d2053b4bfe4
Author: Stefan Sørensen <[email protected]>
Date:   Tue Feb 4 00:11:42 2014 -0800

    leds: Turn off led if blinking is disabled

o patch

Agora você usou um desses métodos para encontrar a confirmação que corrige seu problema, obtenha o patch do commit, comparado ao seu ancestral, com:

git diff 8d82fef8^ 8d82fef8 drivers/leds/led-core.c

Você pode canalizar isso para um arquivo se quiser:

git diff 8d82fef8^ 8d82fef8 drivers/leds/led-core.c > led-blinking-fix.patch

Agora você tem um patch para aplicar na sua árvore de kernel interna.

    
por 07.10.2014 / 10:44