Wie bekomme ich den Kernel-Quellcode?

25

Ich plane, einige Gerätetreiber zu schreiben, und ich muss die Linux-Kernelquelle beschaffen. Meine Linux-Kernel-Version ist 3.2.0-23-generic-pae und ich habe das Image von diesem heruntergeladen . In vielen der Artikel, die ich gelesen habe, heißt es, dass ich den gesamten Kernelbaum haben muss, um neue Module einzufügen.

Reicht es aus, wenn ich dieses Bild herunterlade und es in den usr/src/Ordner einfüge oder muss ich etwas anderes tun?

Sab
quelle
1
Normalerweise installiere ich das 'linux-source'-Paket nur von synaptic, wenn ich eine benutzerdefinierte Kompilierung für einen meiner Computer durchführe, aber vorausgesetzt, Sie führen die Entwicklung durch, benötigen Sie möglicherweise die neueste Version. Dieser Link könnte für Sie nützlich sein: help.ubuntu.com/community/Kernel/Compile
Mark Paskal

Antworten:

27

Dies wird die Quelle des Aktienkerns erhalten:

apt-get source linux-source

Sie können überprüfen, welche Version des Kernels wie folgt ausgeführt wird:

uname -r

Welches druckt so etwas wie:

3.13.0-46-generic

Eine Liste der aktuellen Quellpaketversionen, die auf Ihrem System verfügbar sind, finden Sie unter:

apt-cache search linux-source

So rufen Sie die Upstream-Version des Kernels ab:

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

Im obigen Link ist 'trusty' der Codename für die Ubuntu-Version. Den Codenamen für die von Ihnen installierte Ubuntu-Version finden Sie unter:

cat /etc/lsb-release
Bryce
quelle
Wenn ich Git zum Klonen benutze, wie gebe ich die Version an? Auch wenn ich es klone, ist es genug, wenn ich es in den Ordner usr / src kopiere
Sab
Dieses Git-Repository wird speziell auf 3.2.0 eingestellt. Es folgt, was in Ubuntu Precise (12.04) enthalten ist. Wenn Sie eine andere Version wünschen, ändern Sie ubuntu-exact.git zu ubuntu-quantal.git oder was auch immer. Es sollte in Ordnung sein, einfach in usr / src zu kopieren.
Bryce
Okay. Danke. Aber wie hast du diesen Link gefunden?
Sab
Und wo sollte ich in der Lage sein, den Quelltextbaum zu finden, wenn ich mit ... installiere? Verdammt, ich sollte besser lesen. Die Antwort sagt apt-get sourcenicht apt-get install. Dann endet der Quelltextbaum in Ihrem aktuellen Pfad .
Pro Backup
8
apt-get source linux

ist der einfachste Weg. Der Quellcode wird aus Ihrem Repository heruntergeladen - und entspricht der von Ihnen ausgeführten Version (vorausgesetzt, Sie haben ihn noch nicht angepasst).

Wenn Sie jedoch herausfinden möchten, wo sich die Quelle befindet, können Sie Folgendes ausführen:

apt-cache showsrc linux

Suchen Sie nach dem Attribut 'Vcs-' (Versionskontrollsystem). Es wird normalerweise ein Git (Vcs-Git) oder ein Quecksilber-Repository sein.

Hinweis - Diese Befehle funktionieren mit jedem Paket. Ersetzen Sie einfach 'linux' durch das Paket, an dem Sie interessiert sind. Beachten Sie auch, dass 'apt-get source' keinen sudo-Zugriff benötigt und die Quelle in Ihrem aktuellen Verzeichnis ablegt.

Brendan McGrath
quelle
Dies setzt voraus, dass der Computer, auf den Sie herunterladen, mit dem Zielcomputer übereinstimmt. Wirklich funktioniert nur, wenn Sie ein Netzwerk haben. Die meisten Leser, die auf dieser Seite landen, haben kein Netzwerk (daher benötigen sie plötzlich den Quellcode). Ich brauche es als Tarball auf einem USB-Stick und ich habe kein funktionierendes Apt.
McKenzm
Dies lud nur die Linux-Header in /usr/src- nicht die vollständige Kernel-Quelle - auf Ubuntu 16.04
Pierz
4

Laden Sie die Quelle direkt vom Launchpad herunter

Seltsamerweise empfiehlt jeder, apt-get source was die meiste Zeit nicht funktioniert, wenn Sie nach einer bestimmten Kernelversion suchen:

Angenommen, Sie benötigen eine Kernel-Quelle für 3.19.0-58: Sie
apt-get source linux-image-3.19.0-58-genericerhalten die Quelle für den neuesten Kernel der Serie: 3.19.0-80 in diesem Fall. Dies ist nicht das, wonach Sie gefragt haben.

Sie haben also zwei Möglichkeiten:

1) Gib auf, installiere den Kernel 3.19.0-80 und benutze apt-get source

2) Holen Sie sich die Quelle direkt vom Launchpad:

links

  • Legen Sie sie in ein neues Verzeichnis, entpacken Sie mit dpkg-source -x *.dsc

Anmerkungen:

  • Es muss einen besseren Weg geben.
  • Sie können die gewünschte Version von git erhalten, aber Sie werden sie gerne herunterladen. Siehe "Beziehen der Kernel-Quellen für eine Ubuntu-Veröffentlichung mit git" im Quellcode des Ubuntu-Wiki-Kernels .
Zitronenpresse
quelle
Vielen Dank, dass Sie dies so deutlich erklärt haben. Ich kann die Quelle für linux-image-4.15.0-39-generic jedoch immer noch nicht finden. Dieser Vorgang ist unnötig kompliziert. Ich habe versucht, danach zu googeln, aber ich finde immer wieder Pakete, die nur ein paar Kilobyte groß sind. Irgendwelche Tipps?
Vergessen Sie auch den
3

Wählen Sie einfach eine aus:

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

Wenn Sie aufgefordert werden, einige Quell-URLs in Ihrer Datei anzugeben sources.list, bearbeiten Sie Ihre /etc/apt/sources.listDatei und kommentieren Sie die gewünschte deb-srcZeile aus, z. B. (wenn Sie Xenial ausführen):

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

Wenn Sie die #letzte Zeile entfernen , können Quell-Repositorys heruntergeladen werden, einschließlich Kernel-Quellen.

Bemerkungen:

  • Verwenden Sie moderne Werkzeuge. meide apt-get.
  • Diese Befehle laden den Quellcode für Ihren aktuellen Kernel herunter (in meinem Fall 4.4.0-75-genericzum Beispiel).
  • Beim Herunterladen in ein Systemverzeichnis werden Dateien beispielsweise in gespeichert /usr/src/linux-source-4.4.0/.
Tim
quelle
Funktioniert bei mir nicht (aber die apt-get-Version auch nicht). Ich verwende Ubuntu 16.04.4, Kernel 4.4.0-98-generic. Es heißt: "Sie müssen einige 'Quell'-URIs in Ihre sources.list einfügen". Ich habe keine Ahnung, wie das geht.
Andrew Bainbridge
@ AndrewBainbridge Ich habe Infos dazu hinzugefügt. Ist das für dich jetzt in Ordnung?
Tim
Ja dank. Es war ein dummer Kommentar von mir. Ich musste nur die Fehlermeldung googeln. Wie auch immer, haben Sie eine positive Bewertung für Ihre Bemühungen.
Andrew Bainbridge