Frage

Ich war immer in der Welt der Kernel zieht Hacking und Embedded-Systeme.
Hat jemand gute Tutorials (+ leicht verfügbare Hardware) auf mit solchen Sachen zu verwirren beginnen?
So etwas wie Kits für das Schreiben von Treibern usw., die mit einer guten Dokumentation kommen und sind erschwinglich?

Danke!

War es hilfreich?

Lösung

Wenn Sie ganz neu sind zur Kernel-Entwicklung, würde ich nicht mit Hardware-Entwicklung beginnen vorschlagen und gehen auf einige „Software-only“ Kernel-Module wie proc file / sysfs oder für komplexere Beispiele Dateisystem / Netzwerk-Entwicklung, die Entwicklung auf einem uml / vmware / virtualbox / ... Maschine abstürzt, damit Ihre Maschine nicht so viel :) für Embedded-Entwicklung wird weh tun Sie für ein kleines ARM Development Kit oder eine kleine Via C3 / C4-Maschine oder jeden alten PC gehen konnten, das Sie brennen mit Homebrew USB / PCI / was auch immer Gerät.

Ein guter Anfang ist wahrscheinlich Kernelnewbies.org - die viele Links und nützliche Informationen für Kernel-Entwickler hat, und verfügt auch über eine Liste von einfachen Aufgaben zu implementieren für Anfänger zu bewältigen.

Einige Bücher zu lesen:

das Verständnis der Linux Kernel - eine sehr gute Referenz detailliert die Gestaltung der Kernel-Subsysteme

Linux Device Drivers - geschrieben wird, eher wie ein Tutorial mit vielen Beispielcode, wobei der Schwerpunkt auf erhalten Sie die wichtigsten Aspekte des linux-Kernels zu gehen und zu erklären. Er führt den Build-Prozess und die Grundlagen der Kernel-Module.

Linux Kernel Module Programming Guide - einige weitere einführendes Material

Wie bereits vorgeschlagen, auf dem Linux-Code sucht, ist immer eine gute Idee, vor allem als Linux Kernel-APIs sind in der Regel recht häufig ändern ... LXR viel mit einer sehr schönen Browsing-Schnittstelle hilft - lxr.linux.no

, um den Kernel Build-Prozess zu verstehen, dieser Link könnte hilfreich sein:

Linux Kernel Makefiles (kbuild)

Last but not least, durchsuchen Sie die Dokumentation Verzeichnis der Kernel-Source-Distribution!

Hier sind einige interessante Übungen unverschämt von einer Kernel-Entwicklung Klasse gestohlen:

  • Schreiben Sie ein Kernel-Modul, das die Datei / proc erstellt / jiffies die aktuelle Zeit in jiffies auf jeder Berichterstattung Lesezugriff.
  • ein Kernel-Modul Schreiben Sie die proc Datei / proc / Schlaf bereitstellt. Wenn eine Anwendung eine Anzahl von Sekunden als ASCII-Text in diese Datei schreibt ( „echo 3> / proc / Sleep“), sollte es für die angegebene Anzahl von Sekunden blockieren. Bei Schreibzugriffen sollte auf dem Inhalt der Datei keine Nebenwirkungen hat, das heißt, auf den Lesezugriffe, sollte die Datei als leer angezeigt (siehe LDD3, Kap. 7.6)
  • eine proc-Datei schreiben, wo man vorübergehend einen Text speichern kann (echo "blah" mit> / proc / Rohr) und wieder raus (cat / proc / Rohr), um die Datei zu löschen. Achten Sie auf Probleme bei der Synchronisierung.
  • Ändern das Rohr Beispiel Modul als ein Zeichengerät / dev / Rohr zu registrieren, die dynamische Speicherzuordnung für Schreibanforderungen hinzuzufügen.
  • Schreiben Sie ein wirklich einfaches Dateisystem.

Andere Tipps

Ein absolutes muss dieses Buch von Rubini. (Sowohl als Hardcopy oder eine freie Softcopy)

Er gibt Implementierungen von mehreren Dummy-Treiber, die, dass Sie keine Hardware als Ihrem PC andere haben nicht benötigen. So in der Kernel-Entwicklung begann immer es ist der einfachste Weg zu gehen.

Wie für eingebettete Arbeit tun würde ich empfehlen, eine der zahlreichen SBC (Single Board Computer) den Kauf, die es gibt. Es gibt eine Reihe von diesen, die auf x86-Prozessoren basieren, in der Regel mit PC / 104-Schnittstellen (elektrisch PC / 104 ist identisch mit dem ISA-Bus-Standard, sondern basierte auf stapelbaren Verbinder statt Randverbinder - sehr einfache kundenspezifische Hardware Schnittstelle)

Sie haben meist VGA-Anschlüsse, die es einfacher machen Debuggen machen.

Für Embedded-Linux-Hacking, einfach Linksys WRT54G-Router, dass Sie überall kaufen können, ist eine Entwicklungsplattform auf eigenen http://en.wikipedia.org/wiki/Linksys_WRT54G_series :

  

Der WRT54G ist bemerkenswert für die erste Verbraucher-Level-Netzwerkgerät, das seine Firmware-Quellcode die Verpflichtungen der GNU GPL zu erfüllen freigegeben hatte. Dies ermöglicht es Programmierern, die Firmware zu ändern oder Funktionen in das Gerät hinzufügen zu ändern. Mehrere Firmware-Projekte von Drittanbietern zur Verfügung stellen, die Öffentlichkeit mit einem verbesserten Firmware für den WRT54G.

Ich habe versucht, die Installation von OpenWrt und DD-WRT Firmware drauf. Sie können für Hacker auf einem Low-Cost-Plattform diejenigen aus als Ausgangspunkt überprüfen.

Für den Anfang ist der beste Weg, eine Menge Code zu lesen. Da Linux Open Source ist, werden Sie Dutzende von Treiber zu finden. Finden Sie, dass in gewisser Weise funktioniert wie das, was Sie schreiben wollen. Sie werden einige anständige und relativ einfach zu verstehen Code (das Loopback-Device, ROM fs usw.)

Sie können auch die lxr.linux.no , die der Code Linux ist mit Querverweisen. Wenn Sie herausfinden, wie etwas funktioniert, und in den Code schauen müssen, ist dies eine gute und einfache Art und Weise.

Es gibt auch ein O'Reilly-Buch (die Linux-Kernel zu verstehen, die 3. Ausgabe geht es um das 2.6-Kernel) oder wenn Sie etwas umsonst wollen, können Sie die Advanced Linux Programing Buch ( http://www.advancedlinuxprogramming.com/ ). Darüber hinaus gibt es viele spezifische Dokumentation über Dateisysteme, Vernetzung, etc.

Einige Dinge vorbereitet werden für:

  • Sie werden Cross-Compilierung sein. Das Embedded-Gerät wird einen MIPS, PowerPC, oder ARM-CPU verwenden, aber nicht genügend CPU-Leistung, Speicher oder Speicher einen eigenen Kernel in einem angemessenen Zeit zu kompilieren.
  • Ein eingebettetes System verwendet häufig eine serielle Schnittstelle als Konsole, und die Kosten dort zu senken, ist in der Regel kein Stecker auf Unterlagsplatten gelötet. Debuggen von Kernel-Fehler ist sehr schwierig, es sei denn, Sie auf einem seriellen Anschluss löten können, müssen Sie nicht viele Informationen über das, was schief gelaufen ist.

Die Linksys NSLU2 ist eine kostengünstige Art und Weise ein echtes Embedded-System zu arbeiten zu erhalten und verfügt über einen USB-Anschluss an Peripheriegeräte hinzuzufügen. Eine beliebige Anzahl von Wireless Access Points können auch verwendet werden, finden Sie in der OpenWrt Kompatibilität Seite. Beachten Sie, dass aktuelle Modelle des Linksys WRT54G Sie in den Geschäften nicht mehr mit Linux verwendet werden, finden: sie haben weniger RAM und Flash-in, um die Kosten zu reduzieren. Cisco / Linksys nutzt nun vxWorks auf dem WRT54G, mit einem kleineren Speicherbedarf.

Wenn Sie wirklich in sie erhalten möchten, Evaluation-Kits für Embedded-CPUs auf ein paar hundert Dollar beginnen. Ich würde empfehlen, kein Geld für diese ausgeben, wenn Sie es professionell für einen Job oder Beratungsauftrag benötigen.

Ich bin völlig Anfänger im Kernel-Hacking :) ich zwei Bücher „Linux Programmentwicklung: ein Leitfaden mit Übungen“ kaufen entschieden und „Writing Linux Device Drivers: eine Führung mit Übungen“ Sie sind sehr klar geschrieben und bieten eine gute Basis weiteres Lernen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top