Como obtenho o código fonte do kernel?

25

Estou planejando escrever alguns drivers de dispositivo e preciso obter a fonte do kernel do Linux. Minha versão do kernel do Linux é 3.2.0-23-generic-pae e baixei a imagem disso . Em muitos dos artigos que li, ele me diz que preciso ter toda a árvore do kernel para começar a inserir novos módulos.

É o suficiente se eu baixar esta imagem e colá-la na usr/src/pasta ou preciso fazer outra coisa?

Sab
fonte
1
Normalmente, apenas instalo o pacote 'linux-source' da synaptic quando estou compilando personalizado para uma de minhas máquinas, mas, como você está desenvolvendo, pode precisar da versão mais recente. Este link pode ser útil para você: help.ubuntu.com/community/Kernel/Compile
Mark Paskal

Respostas:

27

Isso obterá a fonte do kernel padrão:

apt-get source linux-source

Você pode verificar qual versão do kernel está executando assim:

uname -r

O que imprimirá algo como:

3.13.0-46-generic

Você pode encontrar uma lista das versões atuais do pacote de origem disponíveis no seu sistema através de:

apt-cache search linux-source

Para obter a versão upstream do kernel:

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

No link acima, 'confiável' é o codinome da versão do Ubuntu. Você pode descobrir o codinome da versão do Ubuntu que você instalou via:

cat /etc/lsb-release
Bryce
fonte
Se eu usar o git para clonar, como especifico a versão. Também Se eu Clone é o suficiente se um copio pate-lo para o usr / src pasta
Sab
Esse repositório git é mantido no 3.2.0 especificamente; segue o conteúdo do Ubuntu Precise (12.04). Se você quer uma versão diferente, mude o ubuntu-precision.git para o ubuntu-quantal.git ou qualquer outra coisa. Deve ser bom copiar apenas para usr / src.
Bryce
Ok.Thanks- Mas como você encontrou esse link git?
Sab
E onde devo encontrar a árvore de origem ao instalar com ... Droga, eu deveria ler melhor. A resposta diz que apt-get sourcenão apt-get install. Então a árvore de origem terminará no seu caminho atual .
Pro Backup
8
apt-get source linux

é a maneira mais fácil. Ele fará o download da fonte do seu repositório - e será igual à versão que você está executando (supondo que você ainda não a tenha customizado).

Mas se você quiser descobrir onde a fonte é mantida, você pode executar:

apt-cache showsrc linux

Procure o atributo 'Vcs-' (sistema de controle de versão). Geralmente será um repositório git (Vcs-Git) ou mercurial.

Nota - esses comandos funcionam com qualquer pacote. Apenas substitua 'linux' pelo pacote em que você está interessado. E também observe que 'apt-get source' não precisa de acesso ao sudo e irá despejar a fonte no seu diretório atual.

Brendan McGrath
fonte
Isso requer que a máquina que você está baixando corresponda à máquina de destino. Realmente só funciona se você tiver uma rede. A maioria dos leitores que chegam nesta página não tem uma rede (por isso, de repente, precisam da fonte). Eu preciso dele como um tarball em um pen drive e não tenho um apt funcionando.
Mckenzm
Isso só baixou os linux-headers para /usr/src- não a fonte do kernel completo - no Ubuntu 16.04
Pierz
4

Baixar fonte diretamente do Launchpad

Estranhamente, todo mundo recomenda o apt-get source que não funciona na maioria das vezes, se você estiver procurando por uma versão específica do kernel:

Digamos que você precise da fonte do kernel para 3.19.0-58:
apt-get source linux-image-3.19.0-58-genericobterá a fonte para o kernel mais recente da série: 3.19.0-80 nesse caso, que não é o que você solicitou.

Então você tem duas opções:

1) Desista, instale o kernel 3.19.0-80 e use apt-get source

2) Obtenha a fonte diretamente da barra de ativação:

ligações

  • Coloque-os em um novo diretório, descompacte dpkg-source -x *.dsc

Notas:

  • Deve haver uma maneira melhor.
  • Você pode obter a versão que deseja do git, mas deseja fazer um grande download. Consulte "Obtendo as fontes do kernel para uma versão do Ubuntu usando git" no Código-fonte do Kernel Wiki do Ubuntu .
limões
fonte
Obrigado por explicar isso tão claramente. No entanto, ainda não consigo encontrar a fonte do linux-image-4.15.0-39-generic. Este processo é desnecessariamente complicado. Eu tentei pesquisar no Google, mas continuo encontrando pacotes com apenas alguns kilobytes. Alguma dica?
2141818
3

Basta escolher um dentre:

sudo apt install linux-source  # downloads into system directory
sudo apt source linux-source  # downloads into working directory

Se você for solicitado a fornecer URLs de 'fontes' no seu sources.list, vá editar seu /etc/apt/sources.listarquivo e descomente a deb-srclinha desejada , por exemplo (se você estiver executando o Xenial):

deb http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted
# deb-src http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted

A remoção #desta última linha permite repositórios de fontes para download, incluindo fontes de kernel.

Observações:

  • Use ferramentas modernas; evitar apt-get.
  • Esses comandos baixam o código fonte do seu kernel atual (no meu caso, 4.4.0-75-genericpor exemplo).
  • Quando baixados no diretório do sistema, os arquivos são armazenados em /usr/src/linux-source-4.4.0/(por exemplo).
Tim
fonte
Não funciona para mim (mas nem a versão apt-get). Estou executando o Ubuntu 16.04.4, kernel 4.4.0-98-genérico. Ele diz: "Você deve colocar alguns URIs 'de origem' em seu sources.list". Não tenho ideia de como fazer isso.
Andrew Bainbridge
@AndrewBainbridge Adicionei informações sobre isso. Tudo bem para você agora?
Tim
Sim obrigado. Foi um comentário estúpido da minha parte. Eu só precisava pesquisar no Google a mensagem de erro. De qualquer forma, tenha um voto positivo pelo seu esforço.
Andrew Bainbridge