Wie fange ich an, Treiber zu schreiben?

21

Ich habe einen billigen Wegwerf-Laptop, den ich gerne ausprobieren würde, ein Thinkpad SL 500.

Was mich stört, sind zwei LEDs, eine für die drahtlose Verbindung und eine für den Ruhezustand, die überhaupt nicht aufleuchten, obwohl sie funktionsfähig sind, ich habe es unter Windows versucht.

Also würde ich gerne einen Kerneltreiber für sie schreiben, nichts Großes, es sieht einfach nach einer guten Idee aus, mit dem Kernel herumzuspielen.

Meine Frage ist, nach welcher Methode ich systematisch herausfinden soll, welche Geräte für diese LEDs verantwortlich sind (im Allgemeinen nicht unbedingt für meine Hardware), und welche Treiber für die beiden anderen LEDs, die funktionieren, Bluetooth und die Akkuanzeige, verantwortlich sind.

Und wenn ich Methodik sage, meine ich wirklich die Methodik, Schritt für Schritt, mit den Gründen für jeden Schritt, wie in der Antwort, die ich jemand anderem hier gegeben habe: Was bedeutet && in void * p = && abc;

Ich beherrsche das Durchsuchen großer Code-Repositorys mit statischen Code-Analysatoren und Co., aber ich glaube, mein mangelndes Hardware-Wissen behindert mich bei diesem Problem.

PS: Ich benutze ArchLinux, also fast die neueste Kernelversion.

Flavius
quelle
Haben Sie versucht, CONFIG_IDEAPAD_LAPTOP im Kernel zu aktivieren?
Paweł Rumian
@gorkypl: nein, warum sollte ich? Bei der Frage geht es nicht um die Lösung des Problems, sondern um die Strategie, mit der ich (als Programmierer) das Problem lösen kann .
Flavius
3
OK, ich habe dich falsch verstanden. Da das IDEAPAD_LAPTOP-Kernelmodul für solche Dinge in der SL-Serie von Thinkpads verantwortlich ist, können Sie sich zunächst den Quellcode ansehen. Es könnte Sie auch interessieren, etwas zu lesen, zum Beispiel über kernelnewbies: kernelnewbies.org/KernelHacking oder ein großartiges Buch von LKH: kroah.com/lkn Zwei andere gute Quellen, die mir einfallen, sind: lwn.net/Kernel/ LDD3 und amazon.com/dp/0596005652/?tag=stackoverfl08-20
Paweł Rumian

Antworten:

5

Welche Methode sollte ich systematisch anwenden, um herauszufinden, welche Geräte für diese LEDs verantwortlich sind?

Idealerweise sollten Sie eine (offene) Quelle des Kernel-Betriebssystems finden, auf der die LEDs Ihres Laptops funktionieren. Dann können Sie einen Teil des Kernels auskommentieren, bis Sie den Code finden, der für die LEDs verantwortlich ist (und ein paar Systemabbrüche verursachen dies). aber das ist der spaßige Teil).

Wenn LEDs unter Linux nicht funktionieren und Sie nicht wissen, welche Hardware sie auf anderen Betriebssystemen antreibt, wie werden Sie dann einen Treiber schreiben?

Ich fürchte, das ist die beste Antwort, die jemand geben kann, und das macht Sie (fast) schlauer als je zuvor. Weist Sie nur darauf hin, dass Sie genau herausfinden müssen, welche Hardware Sie haben, um etwas mehr tun zu können.

Um mehr zu helfen, zwei Hinweise:

  1. Einer der häufig verwendeten IDE- oder SATA-Chips ist der ICHX oder ICHXr von Intel (ICH5, ICH6, ICH7 ... oder ICH6R, ICH7R, ...).

  2. Linux-Kernel-Verzeichnis, in dem sich der Quellcode zur Steuerung vieler LEDs befindet

Ich würde Ihnen auch den 3. Hinweis geben, aber wie oben bereits erwähnt, kann ich wiederholen: Linux-Gerätetreiber, 3. Ausgabe , als PDF, kostenlos.

stemd
quelle