Obtenha fonte do kernel: apt-get install vs fonte do apt-get

4

Estou ansioso para baixar um kernel Linux para saber como modificá-lo e compilá-lo.

Estou usando a distribuição Debian e estou interessado no Kernel Linux modificado do Debian, e não no formulário Kernel do vanilla kernel.org .

Fazendo algumas pesquisas, descobri que existem basicamente duas maneiras de alcançar esse objetivo:

  • Instale o pacote fonte (por exemplo, apt-get instalar linux-source-3.19)
  • Baixar fonte do pacote binário (por exemplo, apt-get origem linux-image-3.19.0-trunk-amd64)

A primeira opção fará o download do tarball de origem em /usr/src/linux-source-3.19.tar.xz e o último baixará um tarball de origem (linux_3.19.1.orig.tar.xz), um patch (linux_3 .19.1-1 ~ exp1.debian.tar.xz) e um arquivo de descrição (linux_3.19.1-1 ~ exp1.dsc). O último também descompactará e extrairá tudo em um diretório 'linux-3.19.1'.

No começo eu pensei que ambas as versões resultariam com o mesmo código, já que elas têm a mesma versão do kernel e nível de patch (baseado no relatório do comando apt-cache). No entanto, o comando diff relatou diferenças ao comparar o código-fonte descompactado do apt-get install com o código-fonte descompactado do apt-get source (para código com patches e sem patches).

Ao comparar o apt-get install com o apt-get source :

$ diff -rq apt-get-install/ apt-get-source/ | wc -l
253

$ diff -rq apt-get-install/ apt-get-source/ | grep "Only in"
Only in apt-get-install/arch/arm/boot/dts: sun7i-a20-bananapro.dts
Only in apt-get-install/arch/s390/include/asm: cmb.h.1
Only in apt-get-install/drivers/dma-buf: reservation.c.1
Only in apt-get-install/drivers/dma-buf: seqno-fence.c.1
Only in apt-get-install/drivers/gpu/drm/i915: i915_irq.c.1
Only in apt-get-install/drivers/scsi: constants.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_acm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_ecm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_obex.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_serial.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_subset.c.1
Only in apt-get-install/include/linux: reservation.h.1
Only in apt-get-install/kernel: sys.c.1
Only in apt-get-install/lib: crc32.c.1
Only in apt-get-install/sound/soc: soc-cache.c.1

E ao comparar o apt-get install com o apt-get source (+ patch) :

$ diff -rq apt-get-install/ apt-get-source+patch/
Only in apt-get-install/arch/s390/include/asm: cmb.h.1
Only in apt-get-source+patch/: debian
Only in apt-get-install/drivers/dma-buf: reservation.c.1
Only in apt-get-install/drivers/dma-buf: seqno-fence.c.1
Only in apt-get-install/drivers/gpu/drm/i915: i915_irq.c.1
Only in apt-get-install/drivers/scsi: constants.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_acm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_ecm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_obex.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_serial.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_subset.c.1
Only in apt-get-install/include/linux: reservation.h.1
Only in apt-get-install/kernel: sys.c.1
Only in apt-get-install/lib: crc32.c.1
Only in apt-get-source+patch/: .pc
Only in apt-get-install/sound/soc: soc-cache.c.1

Encontrei alguns links em que os dois métodos são mencionados, mas não consegui esclarecer nada a partir disso:

link link (Opção B versus opção alternativa B)

Eu realmente apreciaria se alguém pudesse me dizer as diferenças e me avisar qual é a opção preferida. Obrigado.

    
por poinu 11.03.2015 / 17:38

1 resposta

4

Na terminologia do Debian, quando você executa

apt-get source linux-image-3.19.0-trunk-amd64

(ou o equivalente apt-get source linux ), você está realmente baixando e extraindo o pacote fonte . Isto contém o código upstream (o código-fonte do kernel baixado do kernel.org) e todo o pacote Debian, incluindo os patches adicionados ao kernel pela equipe do kernel da Debian.

Quando você corre

apt-get install linux-source-3.19

você está atualizando a instalação de um pacote binário que contém o código-fonte do kernel do Linux com os patches Debian aplicados e nenhuma das infra-estruturas de empacotamento do Debian.

O nome do pacote de origem é apenas linux ; apt-get source converterá qualquer nome de pacote binário que for fornecido no nome do pacote de origem correspondente.

A propósito, como os pacotes experimental não são atualizados automaticamente, você deve atualizar sua cópia de linux-source-3.19 e reextraá-la antes de comparar; o arquivo .dts que você está vendo no seu diff foi apresentado na última atualização. Todos os pacotes atualmente no arquivo contêm este arquivo.

As diferenças restantes são praticamente normais: como foi indicado nos comentários, debian contém todo o pacote e está apenas no pacote de origem, .pc é usado por quilt para acompanhar os arquivos originais modificado por patches, e também é somente no pacote fonte, e os .1 files são gerados manpages, provavelmente um efeito colateral da construção do kernel, e portanto somente aparecem no pacote binário (mas eles não deveriam estar lá) ).

O pacote de referência é o pacote de origem, conforme obtido por apt-get source . Isso constrói todos os pacotes binários do kernel, incluindo linux-source-3.19 que você instala com apt-get install . Este último é fornecido como uma conveniência para outros pacotes que podem precisar da fonte do kernel; É garantido que estará no mesmo lugar o tempo todo, ao contrário do pacote fonte que acabou de ser baixado no diretório atual no momento em que apt-get source é executado.

No que diz respeito à documentação, eu seguiria a documentação Debian no manual do kernel (seção 4.5). Reconstruir todo o kernel do Debian como documentado na seção 4.2, ao qual você se conectou, leva muito tempo, porque ele constrói um número de variantes.

    
por 11.03.2015 / 23:28