Onde / qual é a fonte real do kernel?

8

Estou seguindo isso para aprender a compilar o kernel. eu usei

apt-get source linux-image-$(uname -r)

para baixar o código fonte do kernel Linux que estou usando atualmente.

Após executar o comando acima, os seguintes arquivos (e diretórios) foram baixados.

user $ ls -l
total 130972
drwxrwxr-x 27 sps sps      4096 Oct 16 03:10 linux-lts-vivid-3.19.0
-rw-rw-r--  1 sps sps  10980684 Oct  5 10:54 linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz
-rw-rw-r--  1 sps sps      7396 Oct  5 10:54 linux-lts-vivid_3.19.0-30.34~14.04.1.dsc
-rw-rw-r--  1 sps sps 123115155 May  6 21:35 linux-lts-vivid_3.19.0.orig.tar.gz
user $ 

Na mesma página é mencionado:

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

Mas não sei qual é a "raiz da árvore de fontes do kernel".

É o diretório atual (onde eu corri apt-get source ...e onde tenho os arquivos listados acima)?

Ou é o diretório:

drwxrwxr-x 27 sps sps      4096 Oct 16 03:10 linux-lts-vivid-3.19.0

ou, devo extrair o tarball

-rw-rw-r--  1 sps sps 123115155 May  6 21:35 linux-lts-vivid_3.19.0.orig.tar.gz

Saída para uname -r:

user $ uname -r
3.19.0-30-generic
user $ 
sps
fonte

Respostas:

8

No Debian Wiki :

Os pacotes de origem fornecem todos os arquivos necessários para compilar ou criar a parte de software desejada.

Consiste, em sua forma mais simples, em três arquivos:

  • O tarball upstream com finalização .tar.gz

  • Um arquivo de descrição com finalização .dsc. Ele contém o nome do pacote, tanto no nome do arquivo quanto no conteúdo (após a fonte: palavra-chave).

  • Um tarball, com quaisquer alterações feitas na fonte upstream, além de todos os arquivos criados para o pacote Debian.

    • Isso tem um arquivo .debian.tar.gz (formato de origem: 3.0)
    • ou um final de .diff.gz (formato de origem: 1.0)

É o mesmo para o Ubuntu, e no seu caso:

  • "linux-lts-vivid-3.19.0": o kernel atual , corrigido a partir do tarball upstream "linux-lts-vivid_3.19.0.orig.tar.gz" com as modificações listadas em "linux-lts-vivid_3.19.0 -30,34 ~ 14.04.1.diff.gz ";
  • "linux-lts-vivid_3.19.0-30.34 ~ 14.04.1.diff.gz": um arquivo tar, com quaisquer alterações feitas na fonte upstream, além de todos os arquivos criados para o pacote Debian;
  • "linux-lts-vivid_3.19.0-30.34 ~ 14.04.1.dsc": um arquivo de descrição ".dsc" que termina. Ele contém o nome do pacote, tanto no nome do arquivo quanto no conteúdo (após a fonte: palavra-chave);
  • "linux-lts-vivid_3.19.0.orig.tar.gz": o tarball upstream com o final ".tar.gz" (lembre-se de que na minha experiência nem sempre é um arquivo ".tar.gz", ele pode estar em formatos diferentes, como ".tar.xz");

Quando você executa apt-get source linux-image-$(uname -r), o tarball upstream é automaticamente corrigido com as modificações listadas em "linux-lts-vivid_3.19.0-30.34 ~ 14.04.1.diff.gz" em "linux-lts-vivid-3.19.0":

% apt-get source linux-image-$(uname -r)
# ...
dpkg-source: info: extracting linux in linux-3.19.0
dpkg-source: info: unpacking linux_3.19.0.orig.tar.gz
dpkg-source: info: applying linux_3.19.0-30.34.diff.gz
# ...
kos
fonte
4

A raiz de sua árvore do kernel é o anuário linux-lts-vivid-3.19.0.

Sobre os outros arquivos:

No tarball, linux-lts-vivid_3.19.0.orig.tar.gzvocê pode encontrar o kernel "vanilla", como lançado a montante; para esse kernel, os desenvolvedores do Ubuntu adicionaram patches, drivers, coisas alteradas que são coletadas nas diffquais são compactadas linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz.

Rmano
fonte
4

Hummm. Quando você executa o comando

apt-get source linux-image-`uname -r`

o comando deve extrair automaticamente os tarballs de origem e corrigi-los para criar um diretório chamado após o seu kernel. No seu caso, parece que se chama 'linux-lts-vivid-3.19.0' - está lá na sua listagem de diretórios.

Portanto, esse é o diretório de origem, você deve executar:

cd linux-lts-vivid-3.19.0

e continue seguindo as instruções

Nick Veitch
fonte