是否可以使用JavaScript编写硬件驱动程序?进行这样的任务需要哪些步骤?
另外,我不确定在哪里发布这个问题,所以对于这个问题的任何建议也欢迎。我希望这是正确的位置。
是否可以使用JavaScript编写硬件驱动程序?进行这样的任务需要哪些步骤?
另外,我不确定在哪里发布这个问题,所以对于这个问题的任何建议也欢迎。我希望这是正确的位置。
不,实际上不行。我是说,你可以编写一个将JavaScript编译成C的工具,但那样做太疯狂了,就像试图用勺子作为电锯一样。
学习C语言吧,那才是这项工作的正确工具。
哦,天啊。用 js
写驱动程序?为什么呢?我的意思是,你可以写一个用 C
或 C++
包装的javascript,但你为什么要这样做呢?设备驱动程序在相当低的级别(硬件级别)与机器通信。而Javascript不是。Javascript是一种网络语言(嗯,大多数情况下是这样)。
正如Rich Bradshaw所说,这就像使用勺子作为链锯一样。但对我来说,更像是试图将独木舟用作坦克。
哇,这个想法有点不靠谱,在我看来,你应该选择一种编程语言来解决问题或任务,而不是相反。我从事设备驱动程序和操作系统内核相关的工作,但仅仅因为我能用C语言编程,我并不会使用C语言来完成其他任务,比如我的嵌入式设备的Linux管理; 相反,我会使用一些高级语言,比如Bash、Perl或Python(取决于我的心情 :))。
你为什么对js感兴趣?实际上,你应该了解编程语言的内部机制,以知道你要实现什么,还需要知道你的程序将如何与操作系统交互,以与设备寄存器和中断等其他内容进行通信。
我支持你,伙计。你应该可以自由地使用JavaScript编写设备驱动程序。然后,你可以使用像https://github.com/andrei-markeev/ts2c这样的工具将其转换为C语言。
任何语言都可以用来编写设备驱动程序,只要满足一些条件:
https://patchwork.kernel.org/patch/8163061/
作为设备驱动程序,您可能会直接访问虚拟内存或物理内存(在DMA的情况下),因此需要绕过MMU设置。 直接访问虚拟内存意味着您知道虚拟地址,并希望直接读取该地址。https://events.linuxfoundation.org/sites/events/files/slides/bpf_collabsummit_2015feb20.pdf
https://lwn.net/Articles/599755/
Java作为设备驱动程序的想法以前已经被实现过,作为Sun Solaris操作系统的研究论文/项目。http://dl.acm.org/citation.cfm?id=1215998
http://www.c0t0d0s0.org/archives/2587-Device-driver-in-Java.html
但我不确定直接内存访问问题是如何解决的。
然而,总是有可能设计一个系统,其中部分任务可以由低层模块完成,该模块依赖于C/汇编语言,其他组件可以用非C语言编写,如最近一篇论文所示(Usenix 2009年):
https://www.usenix.org/legacy/event/usenix09/tech/full_papers/renzelmann/renzelmann_html/
请看下面的图表:我们曾经遇到类似的问题,需要通过我们的在线平台访问硬件并实时显示,所以我们的解决方案是购买一个适配器,为硬件端口提供IP地址,这样我们就可以使用node.js与其通信,也许你能找到类似的解决方案。