Kernel-Hacking-Umgebung

22

Ich habe in Embedded-Betriebssystemen wie uCOS, ThreadX gearbeitet. Während ich Apps in Linux codiert habe, plane ich jetzt, Linux Kernel zu erlernen. Ich habe einige Fragen zur Umwelt.

  1. Welches ist die beste Distribution, die benutzerfreundliche Tools für die Kernel-Entwicklung bietet? (Bisher hatte ich RHEL und Fedora verwendet. Obwohl ich mit diesen vertraut bin, sieht es auch so aus, als ob Ubuntu eingebaute Skripte für die einfache Kernel-Kompilierung wie make_kpkgusw. hat.)

  2. Können Sie das beste Setup für das Kernel-Debugging beschreiben? Beim Debuggen anderer eingebetteter Betriebssysteme habe ich den seriellen Port verwendet, um Fortschritt, JTAG usw. zu sichern. Welche Art von Setup verwendet der Linux-Kernel-Entwickler? (Wird mein Test-PC mit serieller Schnittstelle für meine Anforderungen ausreichen? Wenn ja, wie konfiguriere ich den Kernel, um auf die serielle Schnittstelle zu sichern?) Ich plane, Kernelnachrichten an die serielle Konsole umzuleiten, die in meinem Laptop gelesen werden.

  3. Welches Tool eignet sich am besten zum Debuggen und Verfolgen von Kernel-Code? Wie bereits erwähnt, ist die serielle Konsole der einzige Weg? Oder gibt es eine IDE / JTAG-Schnittstelle für den PC?

rajaganesh87
quelle
3
Für # 1 verwendet Linus selbst Fedora, was möglicherweise etwas aussagt. Ich weiß nicht genug über dieses Thema, um wirklich eine Antwort zu geben, aber ich würde mich interessieren, was andere Leute sagen.
Jonescb
1
make_kpkg kommt von Debian, auf dem Ubuntu basiert, und meiner Lieblingsdistribution;)
Gelöschter Account

Antworten:

14

Mein persönlicher Geschmack für die Linux-Kernel-Entwicklung ist Debian. Nun zu deinen Punkten:

  1. Wie Sie wahrscheinlich vermutet haben, bringt Ubuntu nichts Neues in den Kernel, um die Entwicklung zu vereinfachen, abgesehen von dem, was bereits in Debian verfügbar ist. Zum Beispiel ist make_kpkg eine Debian-Funktion und nicht Ubuntu. Hier sind einige Links, die Ihnen den Einstieg in gängige Linux-Kernel-Entwicklungsaufgaben in Debian erleichtern:

  2. Der einfachste Weg zum Kernel-Debugging ist die Verwendung von QEMU und GDB. Einige Links zum Einstieg:

    Sie sollten sich jedoch darüber im Klaren sein, dass diese Methode für bestimmte Szenarien wie das Debuggen bestimmter Hardwareprobleme und solche, für die Sie physisches serielles Debuggen und echte Hardware besser verwenden sollten, nicht geeignet ist. Hierfür können Sie KGDB verwenden (es funktioniert auch mit Ethernet). KDB ist auch eine gute Wahl. Oh, und übrigens, die beide KGDB und KDB wurden verschmolzen in den Linux - Kernel. Mehr dazu hier . Eine andere coole Methode, die sich hervorragend für Probleme eignet, die nicht mit der Hardware zusammenhängen, ist die Verwendung des Linux-Kernels im Benutzermodus . Wenn Sie den Kernel wie jeden anderen Prozess im Benutzermodus ausführen, können Sie ihn wie jedes andere Programm debuggen ( Beispiele ). Mehr zu Linux im Benutzermodushier . UML ist seit 2.6.0 Teil des Linux-Kernels. Sie können daher jede darüber hinausgehende offizielle Kernel-Version in den UML-Modus versetzen, indem Sie die folgenden Schritte ausführen .

  3. Siehe Punkt 2. Leider gibt es hier keine ultimative beste Methode, da jedes Tool / jede Methode ihre Vor- und Nachteile hat.

Shinnok
quelle
Vielen Dank! für die ausführliche Antwort. Übrigens bin ich an fs und Bio-Subsystemen im Kernel interessiert. Welches Setup passt am besten zu mir?
Rajaganesh87
UML und QEMU sind wahrscheinlich der richtige Weg, da Sie problemlos und kostenlos mit Dateisystemen spielen können.
Shinnok
Sehr gute Links, nur eine Sache. Mein Favorit ist auch Debian, aber die Kernel-Entwicklung kann mit jeder Distribution durchgeführt werden. Vielleicht ist Slack der beste Weg, wenn Sie puristisch sind, da er einen Vanillekern verwendet, aber Configs sind keine schlechten Sachen, Sie werden Ihr Bestes finden.
D4RIO
6

Wenn Sie für eine Embedded-Plattform entwickeln, die nicht auf i386-Hardware basiert, müssen Sie eine Cross-Kompilierung durchführen. Das Emdebian- Projekt bietet Toolchains, die für viele Architekturen (ARM, m68k, MIPS und mehr) auf PCs (i386 oder amd64) entwickelt werden können. Das bedeutet, dass Sie unter Debian einfach die Repositorys hinzufügen und die Toolchain für die Ziele Ihrer Wahl passend installieren können.

Gilles 'SO - hör auf böse zu sein'
quelle
3

Es gibt zwar JTAG-Sonden, diese sind jedoch recht teuer (und die Unternehmen, die sie bauen, haben Exklusivverträge). Der beste Weg, um Kernel-Code zu debuggen, besteht darin, ihn in kvm oder qemu mit gdbserver innerhalb der Emulation zu starten.

Simon Richter
quelle
Verwenden Sie noch besser den Benutzermodus Linux. Linux als regulärer Userland-Prozess.
Vonbrand
0

Grundsätzlich sollte jede Hauptdistribution gut funktionieren (sie verwenden ihre eigene Distribution, um sich darauf zu hacken). Verwenden Sie alles, was sich angenehmer anfühlt.

vonbrand
quelle