Ich bin daran interessiert, die Kernel-Interna zu modifizieren, Patches anzuwenden, mit Gerätetreibern und Modulen umzugehen, um meinen eigenen Spaß zu haben.
Gibt es eine umfassende Ressource für Kernel-Hacking, die für erfahrene Programmierer gedacht ist?
linux
kernel
linux-kernel
Adam Matan
quelle
quelle
Antworten:
Eine Reise von tausend Codemeilen muss mit einem einzigen Schritt beginnen. Wenn Sie sich nicht sicher sind, mit welchem der folgenden Bücher Sie beginnen sollen, machen Sie sich keine Sorgen, und wählen Sie eines Ihrer Bücher aus. Nicht alle, die wandern, sind verloren. Da alle Straßen letztendlich mit der Autobahn verbunden sind , werden Sie neue Dinge auf Ihrer Kernel-Reise erkunden, während die Seiten fortschreiten, ohne auf Sackgassen zu stoßen, und sich letztendlich mit der Autobahn verbinden
code-set
. Lesen Sie aufmerksam und denken Sie daran: Code ist keine Literatur .Was übrig bleibt, ist kein Ding oder eine Emotion oder ein Bild oder ein mentales Bild oder eine Erinnerung oder gar eine Idee. Es ist eine Funktion. Eine Art Prozess. Ein Aspekt des Lebens, der als Funktion von etwas "Größerem" beschrieben werden könnte. Und deshalb scheint es nicht wirklich "getrennt" von dem Anderen zu sein. Wie die Funktion eines Messers - etwas zu schneiden - ist in der Tat nicht vom Messer selbst getrennt. Die Funktion wird momentan möglicherweise nicht verwendet, ist jedoch möglicherweise NIEMALS separat.
Solovay Strassen Derandomisierter Algorithmus für den Primalitätstest :
Lesen Sie, um nicht zu widersprechen und zu verwechseln. noch zu glauben und für selbstverständlich zu halten; noch zu reden und Diskurs zu finden; aber zu wiegen und zu überlegen. Einige Bücher sollen verkostet werden, andere sollen geschluckt werden, und einige wenige sollen gekaut und verdaut werden: das heißt, einige Bücher sollen nur in Teilen gelesen werden, andere sollen gelesen werden, aber nicht neugierig, und einige sollen vollständig gelesen werden und mit Fleiß und Aufmerksamkeit.
Der Leser sollte mit Betriebssystemkonzepten vertraut sein . ein faires Verständnis für lang laufende Prozesse und deren Unterschiede zu Prozessen mit kurzen Ausführungsspitzen; Fehlertoleranz bei gleichzeitiger Einhaltung von weichen und harten Echtzeitbeschränkungen. Während des Lesens ist es wichtig,
n/ack
die von der Linux-Kernelquelle in den Kernsubsystemen getroffenen Entwurfsentscheidungen zu verstehen und zu verstehen .Threads [und] Signale [sind] eine plattformabhängige Spur von Elend, Verzweiflung, Entsetzen und Wahnsinn (~ Anthony Baxte). Davon abgesehen sollten Sie ein selbstbewertender C-Experte sein, bevor Sie in den Kernel eintauchen. Sie sollten auch gute Erfahrungen mit verknüpften Listen, Stapeln, Warteschlangen, Rot-Schwarz-Bäumen, Hash-Funktionen usw. haben.
Die Schönheit und Kunst der Linux-Kernel-Quelle liegt in der absichtlichen Code-Verschleierung. Dies ist häufig erforderlich, um die Bedeutung von zwei oder mehr Operationen auf saubere und elegante Weise zu vermitteln. Dies gilt insbesondere beim Schreiben von Code für Mehrkernarchitekturen.
Videovorträge zu Echtzeitsystemen , Aufgabenplanung , Speicherkomprimierung , Speichersperren , SMP
Ihre Aufgabe besteht im Wesentlichen darin, eine Hochgeschwindigkeitskommunikationsschnittstelle zwischen dem Hardwaregerät und dem Softwarekernel einzurichten. Sie sollten das Hardware-Referenzdatenblatt / -Handbuch lesen, um das Verhalten des Geräts und dessen Steuerungs- und Datenzustände sowie die bereitgestellten physischen Kanäle zu verstehen. Assembler-Kenntnisse für Ihre spezielle Architektur und gute Kenntnisse der VLSI-Hardwarebeschreibung Sprachen wie VHDL oder Verilog helfen Ihnen auf lange Sicht.
F : Aber warum muss ich die Hardware-Spezifikationen lesen?
A : Weil "es eine Kluft zwischen Kohlenstoff und Silizium gibt, die die Software nicht überbrücken kann" - Rahul Sonnad
Das oben Gesagte stellt jedoch kein Problem für Rechenalgorithmen ( Treibercode - Verarbeitung in der unteren Hälfte ) dar, da es auf einer Universal Turing-Maschine vollständig simuliert werden kann . Wenn das berechnete Ergebnis im mathematischen Bereich zutrifft , ist es sicher, dass es auch im physikalischen Bereich zutrifft .
Videovorträge zu Linux-Gerätetreibern (Lec. 17 & 18), Anatomie eines eingebetteten KMS-Treibers , Pin-Kontrolle und GPIO-Aktualisierung , gemeinsames Clock-Framework , Schreiben eines echten Linux-Treibers - Greg KH
Das Verständnis eines Packet Walk-Through im Kernel ist ein Schlüssel zum Verständnis der Kernel-Vernetzung. Es ist ein Muss, wenn wir Netfilter- oder IPSec-Interna und mehr verstehen wollen. Die zwei wichtigsten Strukturen der Netzwerkschicht des Linux-Kernels sind:
struct sk_buff
undstruct net_device
Brian W. Kernighan sagte in der Zeitung Unix for Beginners (1979): "Das effektivste Debugging-Tool ist immer noch sorgfältiges Überlegen, gepaart mit vernünftig platzierten Print-Anweisungen." Wenn Sie wissen, was zu sammeln ist, erhalten Sie schnell die richtigen Daten für eine schnelle Diagnose. Der große Informatiker Edsger Dijkstra sagte einmal, dass Tests das Vorhandensein von Fehlern, nicht aber deren Abwesenheit nachweisen können. Gute Ermittlungspraktiken sollten die Notwendigkeit einer raschen Lösung von Problemen, die Notwendigkeit, Ihre Fähigkeiten auszubauen, und den effektiven Einsatz von Sachverständigen in Einklang bringen.
Es gibt Zeiten, in denen Sie den Tiefpunkt erreichen, nichts zu funktionieren scheint und Ihnen alle Optionen ausgehen. Dann beginnt das eigentliche Debuggen. Ein Fehler kann die Pause bieten, die Sie benötigen, um sich von einer Fixierung auf die unwirksame Lösung zu lösen.
Videovorträge zu Kernel- Debugging und -Profiling , Core-Dump-Analyse , Multicore-Debugging mit GDB , Steuerung von Multi-Core-Race-Bedingungen , Debugging von Elektronik
Auf einem UNIX-System ist alles eine Datei. Wenn etwas keine Datei ist, ist es ein Prozess, mit Ausnahme von Named Pipes und Sockets. In einem Dateisystem wird eine Datei durch
inode
eine Art Seriennummer dargestellt, die Informationen zu den tatsächlichen Daten enthält, aus denen die Datei besteht. Das virtuelle Linux-DateisystemVFS
speichert Informationen aus jedem Dateisystem im Speicher, während es bereitgestellt und verwendet wird. Es muss sehr sorgfältig vorgegangen werden, um das Dateisystem korrekt zu aktualisieren, da die Daten in diesen Caches geändert werden, wenn Dateien und Verzeichnisse erstellt, geschrieben und gelöscht werden. Der wichtigste dieser Caches ist der Puffercache, der in die Art und Weise integriert ist, in der die einzelnen Dateisysteme auf ihre zugrunde liegenden Blockspeichergeräte zugreifen.Videovorträge zu Speichersystemen , Flash Friendly File System
Kryptographie bildet die Basis des Online-Vertrauens. Beim Hacking werden Sicherheitskontrollen entweder in technischer, physischer oder menschlicher Hinsicht ausgenutzt. Das Schützen des Kernels vor anderen laufenden Programmen ist ein erster Schritt auf dem Weg zu einem sicheren und stabilen System, aber dies reicht offensichtlich nicht aus: Es muss auch ein gewisses Maß an Schutz zwischen verschiedenen User-Land-Anwendungen bestehen. Exploits können auf lokale oder Remote-Dienste abzielen.
Videovorträge zu Kryptografie und Netzwerksicherheit , Namespaces für Sicherheit , Schutz vor Remoteangriffen , Secure Embedded Linux
Sie denken vielleicht nicht, dass Programmierer Künstler sind, aber das Programmieren ist ein äußerst kreativer Beruf. Es ist logische Kreativität. Die Informatikausbildung kann niemanden zu einem erfahrenen Programmierer machen, ebenso wenig wie das Studium von Pinseln und Pigmenten jemanden zu einem erfahrenen Maler machen kann. Wie Sie bereits wissen, gibt es einen Unterschied zwischen dem Kennen des Pfades und dem Gehen des Pfades. Es ist äußerst wichtig, die Ärmel hochzukrempeln und sich die Hände mit dem Kernel-Quellcode schmutzig zu machen. Schließlich werden Sie mit Ihrem so gewonnenen Kernel- Wissen überall glänzen .
Unreife Codierer imitieren; reife Programmierer stehlen; Schlechte Codierer entstellen, was sie nehmen, und gute Codierer machen es zu etwas Besserem oder zumindest etwas Anderem. Der gute Kodierer schweißt seinen Diebstahl zu einem ganz anderen Gefühl zusammen, als das, von dem er gerissen wurde.
Videovorträge zu Kernel-Rezepten
Linux_source_dir/Documentation/*
quelle
Linux Kernel Newbies ist eine großartige Ressource.
quelle
Ich schlage vor, Sie lesen " Linux Kernel in Kürze " von Greg Kroah-Hartman und " Understanding the Linux Kernel " von Robert Love. Muss lesen :)
quelle
Linux-Gerätetreiber sind eine weitere gute Ressource. Es würde Ihnen einen anderen Weg geben, in das Innenleben einzusteigen. Aus dem Vorwort:
quelle
Siehe Das Linux-Dokumentationsprojekt . Insbesondere der "Linux Kernel Modul Guide".
quelle
Linux Kernel 2.4 Internals ist eine weitere Online-Ressource. Es scheint ein ziemlich grundsätzlicher Ansatz zu sein, beginnend mit dem Booten. Hier das Inhaltsverzeichnis:
Und um es noch süßer zu machen, gibt es eine neue Linux Kernel Development Third Edition von Robert Love und Slashdot hat eine Rezension.
quelle
Starten Sie mit Linux Kernel Primer von Claudia Salzberg et al. Gut für Anfänger. Robert Loves Buch ist definitiv nicht das Buch, mit dem Anfänger beginnen sollten. Das letzte Buch liegt über dem mittleren Niveau.
quelle