Wie man einen Treiber in Javascript?
Ist es möglich, zu schreiben, die hardware-Treiber in Javascript? Was wären die Schritte, die erforderlich sind für eine solche Aufgabe?
Außerdem war ich unsicher, wo zu diesem post, damit alle Vorschläge hierzu sind auch willkommen. Ich hoffe, dies ist der genaue Ort für die Frage.
- JS wurde ursprünglich eingeführt, als Teil von web-Browsern, so dass client-seitige Skripte ...
- Sollten Sie überprüfen, dieser Titel von O ' Reilly
- Dies sollte die akzeptierte Antwort @AnttiHaapala
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Nicht wirklich. Ich meine, Sie Sortieren könnte, indem er etwas für die Kompilierung Javascript-Code in C, aber das wäre ziemlich verrückt. Bisschen wie der Versuch, mit einem Löffel wie eine Kettensäge.
Lernen C. Das ist das richtige Werkzeug für den job.
Oh, gosh. Schreiben eines Treibers in
js
? Warum? Ich meine, könnten Sie schreiben Sie einen javascript-wrapper für etwas inC
oderC++
, vielleicht, aber warum sollte man das tun wollen? Gerätetreiber die Kommunikation mit der Maschine auf einer ziemlich niedrigen Ebene (hardware-Ebene). Javascript nicht. Javascript ist eine web-Sprache (naja, meistens).Als Rich Bradshaw sagte, es ist wie mit einem Löffel wie eine Kettensäge. Aber mir würde es mehr wie der Versuch, ein Kanu als ein tank.
Wow, diese Idee ist nicht-Sinn, IMHO, wählen Sie eine Programmiersprache, um ein problem zu lösen oder eine Aufgabe und nicht die andere Weise herum. Ich arbeite mit dem Geräte-Treiber und OS-kernel bezogene Dinge, aber nur weil ich das Programm in C weiß ich nicht C benutzen, um andere Aufgabe, wie z.B. Linux-administration für meine embedded-Gerät; stattdessen verwende ich etwas hohen Niveau wie Bash, Perl oder Python (je nach meiner Stimmung :)).
Warum sind Sie daran interessiert, js? Eigentlich sollten Sie verstehen, die Interna der Programmiersprache, zu wissen, was Sie erreichen wollen und auch müssen Sie wissen, wie Sie das Programm mit Ihnen zu interagieren OS zur Kommunikation mit den Geräte-Registern und interrupts unter anderem.
So dumm, wie es klingt, ist dies nun geschieht für verschiedene IOT-Geräte. Aber in allen Fällen, die ich gesehen habe, das Gerät selbst beinhaltet eine modifizierte version des V8-JS-engine. Die Mozilla-Telefon stellt eine HW-access-Schnittstelle, aber wieder, es ist nicht wirklich eine "echte" Geräte-Treiber, sondern ein Skelett-API ausgesetzt JS.
Bitte ich Sie, zu lernen, Object Pascal oder C/C++, da Sie die einzig wahren "echten" Sprachen-geeignet für diese Art von Arbeit. Traditionell C ist die am häufigsten verwendete Sprache, aber C und Pascal ist im wesentlichen die gleiche Sache mit einer anderen syntax. C++ builder und Object Pascal teilen sogar die gleichen codegen, mit verschiedenen parser - /lexer an der Spitze.
Having said that, es gibt keinen wirklichen Grund, warum einige der custom-Treiber programmiert werden können, in NodeJS. Unter Linux eine Menge von HW-middleware ist das erste, das in Python geschrieben zu werden, nur abgeschlossen in C. Damit ist alles möglich, solange jemand angepasst hat, die Laufzeit in Bezug auf die hardware zugreifen. FreePascal und Python macht GPIO-Zugriff auf den Raspberry PI 1-2 ein Kinderspiel. Aber es kann kein Zweifel daran bestehen, dass die wirklichen Sprachen wie C/C++ und Object Pascal die Oberhand hat.
Mit der "realen" Bedeutung kompiliert zu Maschinencode für die Plattform und unwirklich bezieht sich auf Skript-engines wie python und javascript.
Jede Sprache kann verwendet werden, zu schreiben, Gerät-Treiber, ein paar Voraussetzung müssen erfüllt sein:
https://patchwork.kernel.org/patch/8163061/
Als device-Treiber kann den Zugriff auf den virtuellen Speicher oder physikalische Speicher direkt (bei DMA), und somit unter Umgehung der virtuellen Speicher-setup, indem Sie die MMU benötigt. Direkten Zugriff auf den virtuellen Speicher bedeutet, dass Sie wissen, die virtuelle Adresse, und Lesen wollen Sie die Adresse direkt ein.
Java oder Javascript keine Sprache konstruieren zu Lesen-Speicher über bekannte Anschrift direkt.
Assembly-Sprache, die sensiblen Aufgaben: Zugriff auf die hardware sehr oft müssen spezielle Montage-Anleitung, wie das deaktivieren der interrupt oder die Umstellung von einer CPU auf eine andere, oder Rundfunk inter-CPU-Meldungen etc. Es gibt kein Java Konstrukt zu tun, all diese, vielleicht nicht einmal der C-Sprache. Also, was ist der Grund, warum die Kombination C + die Montage ist Häufig erforderlich. Aber es gibt keine Möglichkeit zu kombinieren, Java und Assembler.
Native vs interpretiert Sprache: Alle intepreted Sprache wird über einen intepreter zum ausführen der Sprache. In Javascript oder Java, Sie brauchen JVM zum ausführen von Java. Also, wenn Sie brauchen Java im kernel, dann brauchst du einen JVM-intepreter in den kernel. Dies ist nicht unmöglich - aktuelle Linux-kernel haben ein BPF intepreter läuft im kernel, so haben Sie eine BPF-VM läuft im kernel:
https://events.linuxfoundation.org/sites/events/files/slides/bpf_collabsummit_2015feb20.pdf
https://lwn.net/Articles/599755/
Die Idee von Java als device-Treiber implementiert wurde, vor, wie eine Forschungsarbeit/des Projekts (für Sun Solaris OS):
http://dl.acm.org/citation.cfm?id=1215998
http://www.c0t0d0s0.org/archives/2587-Device-driver-in-Java.html
Aber ich bin nicht sicher, wie Sie das problem direkt memory access gelöst ist.
Immer noch, es ist immer möglich, ein system zu konzipieren, wobei ein Teil der Aufgaben kann durch eine low-level-Modul, das C/Assembly abhängig ist, und die andere Komponente, die geschrieben werden kann in der nicht-C-Sprache, wie in diesem jüngsten Papier (Usenix 2009):
https://www.usenix.org/legacy/event/usenix09/tech/full_papers/renzelmann/renzelmann_html/
Siehe Diagramm unten:
Klicken Sie auf siehe Bild
Standen wir vor einem ähnlichen problem, wir müssen für den Zugriff auf hardware über unsere online-Plattform, und zeigen Sie es live so unsere Lösung war es, einen adapter kaufen, die gibt ip an der hardware-port, so sind wir in der Lage zu sprechen mit ihm über node.js vielleicht findest du eine ähnliche Lösung