2008-09-25 8 views
13

Welche kleinen Projekte würden Sie einem Neuling mit dem Kernel vorschlagen, aber jemand, der viele Systeme und C Erfahrung hat? Ziel ist es, eine Vertrautheit mit dem Kernel-Quellcode zu entwickeln und Experimentiermöglichkeiten mit verrückten Ideen zu schaffen.Was sind einige interessante, kleine Linux-Kernel-Projekte, um die Quelle zu lernen?

Ich versuche, einige überschaubare kleine Aufgaben (zum Beispiel, fügen Sie einen Syscall), aber was würden Sie vorschlagen? Für eine Zielgruppe denke jemand, der mindestens einen Bachelor-OS-Kurs auf dem Buckel hat.

Antwort

5

Als ich den oben genannten Bachelor-OS-Kurs nahm, war eine unserer Aufgaben, ein paar syscalls hinzuzufügen. Sie waren extrem einfach, nichts als das Lesen und Zurücksetzen von Zählern, die zählten, wie oft andere syscalls aufgerufen wurden. Das Hinzufügen eines Syscalls erfordert jedoch das Betrachten und Ändern einiger Dateien. Viele von ihnen befinden sich in der gleichen relativ kleinen Unterstruktur der Kernel-Quelle, aber es reicht, um Sie zumindest mit den Kodierungskonventionen vertraut zu machen.

Sie auch interessieren könnten:

  • eine andere (sehr einfach) Modus in den Scheduler eine Richtlinie, die Sie interessant finden zu implementieren Hinzufügen. Die "eine Implementierung, um sie alle zu beherrschen" ist ziemlich schwierig (und noch schwerer zu vereinbaren), aber ein einfacher O (N) Scheduler, sogar ein rudimentärer O (1) Scheduler, kann relativ einfach und algorithmisch durchgeführt werden. Trotzdem muss man viel Code durchforsten.

  • Schreiben eines Gerätetreibers für eine sehr einfache externe Hardware, z. B. einen 8-Bit-Mikrocontroller, der über eine serielle Schnittstelle kommuniziert, oder sogar etwas, das Sie selbst erstellen. Wenn Sie Erfahrung mit Hardware haben, versuchen Sie vielleicht, einen Gerätetreiber zu schreiben, der einen NES-Controller emulieren kann (bit-bang ein paar Drähte über den seriellen Port und vielleicht ein Seriell-zu-Parallel-Schieberegister). Sie können auch etwas wie das Fahren einer wirklich einfachen 7-Segment-LED-Anzeige (wie Sie es in einem Wecker haben) oder eine kleine Sammlung von ihnen tun.

5

Auf die Gefahr einer Flamme Krieg zu beginnen: Ich würde Ihnen empfehlen, von Linux-Kernel-Code zu bleiben weg. Wenn Sie mit der Kernel-Programmierung Ihre Hände schmutzig machen wollen, gehen Sie zum Beispiel mit FreeBSD, NetBSD oder OpenSolaris. Der Code ist viel sauberer und besser strukturiert (das ist natürlich eine subjektive Meinung), tatsächlich entworfen und sogar dokumentiert. Außerdem haben sie einen Kernel-Debugger (beachten Sie, dass Linus sowohl gegen Kernel-Debugger als auch gegen eine stabile Kernel-API ist, was jeden Kernel zu einem beweglichen Ziel für Ihre Arbeit macht). Diese OS-es haben sogar eine Liste von Projekten auf ihren jeweiligen Webseiten, und ich persönlich habe sehr gute Erfahrungen mit Menschen in OpenSolaris Foren und NetBSD Mailinglisten.

Sie sagen, dass Sie Erfahrung mit C haben - siehe Web-Quellcode-Repositories von Linux und Opensolaris oder einigen BSDs, den Code vergleichen und Ihre eigene Meinung. Was ich sagen will, ist, dass Open-Source-UNIX mehr als Linux umfasst und dass man sie zumindest betrachten sollte, bevor man sich für Linux entscheidet.

+0

[Bearbeiten] auf Linus sein gegen Kernel-Debugger sein? Ich bin mir seiner Gründe dafür bewusst, dass ich mich nicht an eine API binden muss. – pjc50

+2

Ist das gut genug Zitat: http://www.linuxtoday.com/news_story.php3?ltsn=2000-09-07-002-21-OS-CY-KN – zvrba

1

Ein guter Ausgangspunkt ist ein project auf Basis von Unix v6. "Xv6, ein einfaches Unix-Lehrbetriebssystem"

Es gibt auch cynix, eine einfache IA-32 monolithische Unix-artige Kernel (Nicht gepflegte)

Ein großes Tutorial ist "Roll your own toy UNIX-clone OS".

0

Versuchen Sie, die MINIX Quellcode und spielen mit dem Download, versuchen, die Logik zu verstehen, und es wird ohne Zweifel einige Zeit dauern, aber wenn Sie es halten können Sie ein Experte in einiger Zeit