Come ottengo il codice sorgente del kernel?


25

Sto programmando di scrivere alcuni driver di dispositivo e ho bisogno di ottenere il sorgente del kernel Linux. La mia versione del kernel Linux è 3.2.0-23-generic-pae e ho scaricato l'immagine da questo . In molti degli articoli che ho letto, mi dice che ho bisogno di avere l'intero albero del kernel per iniziare a inserire nuovi moduli.

È sufficiente scaricare questa immagine e incollarla nella usr/src/cartella o devo fare qualcos'altro?


1
Di solito installo il pacchetto 'linux-source' da synaptic quando sto compilando su misura per una delle mie macchine, ma dato che stai facendo lo sviluppo potresti aver bisogno della versione più recente. Questo link potrebbe esserti utile: help.ubuntu.com/community/Kernel/Compile
Mark Paskal

Risposte:


27

Questo otterrà la fonte del kernel stock:

apt-get source linux-source

Puoi controllare quale versione del kernel è in esecuzione in questo modo:

uname -r

Che stamperà qualcosa del genere:

3.13.0-46-generic

È possibile trovare un elenco delle versioni correnti del pacchetto sorgente disponibili sul proprio sistema tramite:

apt-cache search linux-source

Per ottenere la versione upstream del kernel:

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

Nel link sopra, "fidato" è il nome in codice per la versione di Ubuntu. Puoi scoprire il nome in codice per la versione di Ubuntu che hai installato tramite:

cat /etc/lsb-release

Se uso git per clonare come posso specificare la versione. Inoltre, se clone, è sufficiente copiarlo nella cartella usr / src
Sab

Quel repository git è tenuto specificamente alla 3.2.0; segue ciò che è in Ubuntu Precise (12.04). Se vuoi una versione diversa cambia ubuntu-precise.git in ubuntu-quantal.git o altro. Dovrebbe andare bene solo copiare in usr / src.
Bryce,

Okay. Grazie- Ma come hai trovato quel link git?
Sab


E dove dovrei essere in grado di trovare l'albero dei sorgenti durante l'installazione con ... Accidenti, dovrei leggere meglio. La risposta dice di apt-get sourceno apt-get install. Quindi l'albero dei sorgenti finirà nel tuo percorso attuale .
Pro Backup

8
apt-get source linux

è il modo più semplice. Scaricherà la fonte dal tuo repository - e sarà la stessa della versione che stai eseguendo (supponendo che non l'abbia già personalizzata).

Ma se vuoi trovare dove viene mantenuta la fonte puoi eseguire:

apt-cache showsrc linux

Cerca l'attributo 'Vcs-' (sistema di controllo della versione). Di solito sarà un git (Vcs-Git) o ​​un repository mercuriale.

Nota: questi comandi funzionano con qualsiasi pacchetto. Sostituisci semplicemente 'linux' con il pacchetto che ti interessa. E nota anche che 'apt-get source' non ha bisogno dell'accesso sudo e scaricherà il sorgente nella tua directory corrente.


Ciò richiede che la macchina su cui stai scaricando corrisponda alla macchina di destinazione. Funziona davvero solo se hai una rete. La maggior parte dei lettori che atterrano su questa pagina non avrà una rete (quindi perché improvvisamente hanno bisogno della fonte). Ne ho bisogno come un tarball su una chiavetta USB e non ho un apt funzionante.
mckenzm,

Questo ha scaricato solo le intestazioni di Linux in /usr/src- non il sorgente completo del kernel - su Ubuntu 16.04
Pierz

4

Scarica la fonte direttamente da Launchpad

Stranamente tutti raccomandano apt-get source che non funziona la maggior parte delle volte se stai cercando una versione specifica del kernel:

Supponiamo che tu abbia bisogno del sorgente del kernel per 3.19.0-58:
apt-get source linux-image-3.19.0-58-genericotterrà il sorgente per l'ultimo kernel della serie: 3.19.0-80 in questo caso, che non è quello che hai chiesto.

Quindi hai due opzioni:

1) Rinuncia, installa il kernel 3.19.0-80 e usa apt-get source

2) Ottieni la fonte direttamente dal launchpad:

link

  • Inseriscili in una nuova directory, scompatta con dpkg-source -x *.dsc

Gli appunti:

  • Deve esserci un modo migliore.
  • Puoi ottenere la versione che desideri da git, ma sei pronto per un grande download. Vedi "Ottenere i sorgenti del kernel per una versione di Ubuntu usando git" nel codice sorgente del kernel Wiki di Ubuntu .

Grazie per averlo spiegato così chiaramente. Tuttavia, non riesco ancora a trovare l'origine per linux-image-4.15.0-39-generic. Questo processo è inutilmente complicato. Ho provato a cercarlo su Google, ma continuo a trovare pacchetti che sono solo pochi kilobyte. Qualche consiglio?
dimenticare anche il

3

Basta sceglierne uno da:

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

Se ti viene detto di fornire alcuni URL di "fonti" nel tuo sources.list, vai a modificare il /etc/apt/sources.listfile e rimuovere il commento dalla deb-srcriga desiderata , ad esempio (se stai eseguendo Xenial):

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

La rimozione di #quest'ultima riga abilita il download dei repository dei sorgenti, inclusi i sorgenti del kernel.

Osservazioni:

  • Usa strumenti moderni; evitare apt-get.
  • Questi comandi scaricano il codice sorgente per il tuo kernel corrente (nel mio caso 4.4.0-75-genericper esempio).
  • Quando scaricati nella directory di sistema, i file vengono archiviati /usr/src/linux-source-4.4.0/(ad esempio).

Non funziona per me (ma nemmeno la versione apt-get). Sto eseguendo Ubuntu 16.04.4, kernel 4.4.0-98-generico. Dice "Devi inserire alcuni URI" sorgente "nel tuo sources.list". Non ho idea di come farlo.
Andrew Bainbridge,

@AndrewBainbridge Ho aggiunto informazioni al riguardo. Va bene per te adesso?
Tim

Sì grazie. È stato un mio stupido commento. Avevo solo bisogno di google il messaggio di errore. Ad ogni modo, fai un voto per i tuoi sforzi.
Andrew Bainbridge,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.