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.