Ich möchte ein FreeBSD-Kernel-Modul schreiben, das einige beliebige Interrupts akzeptiert und bei Empfang dieser Interrupts einige Daten an ein beliebiges Gerät ausgibt. Derzeit habe ich mehrere Probleme:Ein FreeBSD-Kernel-Modul schreiben, das einen beliebigen Interrupt verarbeitet und an das Gerät ausgibt
Wie würde ich Interrupts durch einen bestimmten IRQ erwerben? Unter Linux gibt es den
request_irq()
Aufruf, aber es scheint, dass es keine ähnliche API für FreeBSD gibt ... Sagen wir, ich möchte alle Tastaturinterrupts über mein Kernelmodul erkennen können (die Tastatur befindet sich auf irq1), wie würde ich das machen? (Unter Linux ist es möglich, durch den Aufruffree_irq(1, NULL)
undrequest_irq(1, ...)
, korrigieren Sie mich, wenn ich falsch liege).Ist es überhaupt möglich, über ein Kernelmodul in eine Gerätedatei unter/dev zu schreiben? Ich habe die Frage Example for reading text files in FreeBSD kernel module gelesen; Nach diesem Beispiel konnte ich reguläre Dateien lesen/schreiben, aber keine Gerätedatei unter/dev (das "Gerät" war ein Pseudo "echo device", das klassische in Char-Geräte-Beispielen). Ich konnte die Datei jedoch öffnen.
Ich verstehe, dass es als eine schlechte Praxis gilt, Datei-I/O im Kernel zu tun, aber ich könnte nicht anders denken ... Wenn jemand eine bessere Lösung hat, bitte sagen Sie mir. (Dh mit einem Gerät durch seinedevice_t
Knoten schreiben?)
Der Grund, warum ich dies in einem Kernel tat ist, dass ich wirklich alle Unterbrechungen müssen getroffen werden und im Benutzerraum läuft, hat das Risiko von fehlende Interrupts aufgrund von Kernel-Threads, die Benutzer-Threads vorwegnehmen (die Interrupts könnten sehr häufig auftreten).
Ich würde auch freuen, wenn mich jemand mit einigen anderen Ideen bieten konnte, wie dieses Programm zu implementieren (im Grunde ist die Idee, ein Kernel-Modul, das die Arbeit eines Mikrocontrollers tun könnte ...)
Sie sind sehr mutig und mutig. – ThingyWotsit