Meine persönliche Vorliebe für die Linux-Kernel-Entwicklung ist Debian. Nun zu Ihren Punkten:
-
Wie Sie wahrscheinlich schon erraten haben, bringt Ubuntu nichts Neues in den Kernel, um die Entwicklung afaik zu vereinfachen, abgesehen von dem, was bereits in Debian verfügbar ist. Für z.B. make_kpkg ist eine Debian-Funktion und nicht Ubuntu. Hier sind einige Links, die Ihnen den Einstieg in allgemeine Linux-Kernel-Entwicklungsaufgaben in Debian erleichtern:
- Kapitel 4 - Allgemeine Kernel-bezogene Aufgaben des Debian Linux Kernel Handbook
- Kapitel 10 – Debian und der Kernel der Debian GNU/Linux FAQ
-
Der einfachste Weg zum Kernel-Debugging ist die Verwendung von QEMU und GDB. Einige Links für den Einstieg:
- http://files.meetup.com/1590495/debugging-with-qemu.pdf
- http://www.cs.rochester.edu/~sandhya/csc256/assignments/qemu_linux.html
Sie sollten sich jedoch darüber im Klaren sein, dass diese Methode für bestimmte Szenarien wie das Debuggen bestimmter Hardwareprobleme und dergleichen nicht geeignet ist, für die Sie besser das physische serielle Debugging und echte Hardware verwenden würden. Dafür können Sie KGDB verwenden (es funktioniert auch mit Ethernet). KDB ist auch eine gute Wahl. Oh, und übrigens, sowohl KGDB als auch KDB wurden in den Linux-Kernel integriert. Mehr zu diesen beiden hier. Eine andere coole Methode, die wunderbar für nicht-hardwarebezogene Probleme funktioniert, ist die Verwendung des Linux-Kernels im Benutzermodus. Wenn Sie den Kernel im Benutzermodus wie jeden anderen Prozess ausführen, können Sie ihn wie jedes andere Programm (Beispiele) debuggen. Mehr zu Linux im Benutzermodus hier. UML ist seit 2.6.0 Teil des Linux-Kernels, daher können Sie jede offizielle Kernel-Version darüber in den UML-Modus einbauen, indem Sie diesen Schritten folgen.
-
Siehe Punkt 2. Leider gibt es hier keine ultimative beste Methode, da jedes Tool/Methode seine Vor- und Nachteile hat.
Wenn Sie für eine eingebettete Plattform entwickeln, die nicht auf i386-Hardware basiert, müssen Sie crosskompilieren. Das Emdebian-Projekt bietet Toolchains zur Entwicklung für viele Architekturen (ARM, m68k, MIPS und mehr) auf PCs (i386 oder amd64). Das bedeutet, dass Sie unter Debian einfach die Repositories hinzufügen und apt-get die Toolchain für das/die Ziel(e) Ihrer Wahl installieren können.
Es gibt JTAG-Sonden, aber diese sind ziemlich teuer (und die Unternehmen, die sie bauen, haben Exklusivverträge). Der beste Weg, Kernel-Code zu debuggen, besteht darin, ihn in kvm oder qemu mit gdbserver innerhalb der Emulation zu starten.