如何用Javascript编写设备驱动程序?

如何用Javascript编写设备驱动程序?,javascript,driver,linux-device-driver,ecmascript-5,Javascript,Driver,Linux Device Driver,Ecmascript 5,可以用Javascript编写硬件驱动程序吗?这项任务需要采取哪些步骤 此外,我不确定在哪里发布此消息,因此欢迎对此提出任何建议。我希望这是问题的准确位置。不,不是真的。我的意思是,你可以写一些东西把Javascript编译成C,但那太疯狂了。有点像用勺子当电锯 学习C。这是工作的正确工具。哦,天哪。在js中编写驱动程序?为什么?我的意思是,你可以为C或C++中的东西编写一个javascript包装器,但你为什么要这么做呢?设备驱动程序以相当低的级别(硬件级别)与机器通信。Javascript没

可以用Javascript编写硬件驱动程序吗?这项任务需要采取哪些步骤


此外,我不确定在哪里发布此消息,因此欢迎对此提出任何建议。我希望这是问题的准确位置。

不,不是真的。我的意思是,你可以写一些东西把Javascript编译成C,但那太疯狂了。有点像用勺子当电锯


学习C。这是工作的正确工具。

哦,天哪。在
js
中编写驱动程序?为什么?我的意思是,你可以为
C
C++
中的东西编写一个javascript包装器,但你为什么要这么做呢?设备驱动程序以相当低的级别(硬件级别)与机器通信。Javascript没有。Javascript是一种web语言(嗯,主要是)


正如Rich Bradshaw所说,这就像用勺子做电锯一样。虽然对我来说,这更像是试图用独木舟作为坦克。

哇,这个想法是没有意义的,我想你应该选择一种编程语言来解决问题或任务,而不是反过来。我使用设备驱动程序和操作系统内核相关的东西,但仅仅因为我可以用C编程,我不使用C来完成其他任务,比如嵌入式设备的Linux管理;相反,我使用一些高级的东西,比如Bash、Perl或Python(取决于我的心情:)


你为什么对js感兴趣?实际上,您应该了解编程语言的内部结构,以了解您试图实现的目标,还需要知道您的程序将如何与操作系统交互,以与设备寄存器和中断等进行通信。

听起来很傻,但现在正在为各种物联网设备执行此操作。但在我所看到的所有情况下,该设备本身都包含了V8 JS引擎的修改版本。Mozilla手机公开了一个硬件访问接口,但它并不是真正的“真正”设备驱动程序,而是一个向JS公开的框架API

我强烈建议您学习对象Pascal或C/C++,因为它们是唯一适合这类工作的真正的“真实”语言。传统上,C是使用最多的语言,但C和Pascal本质上是同一种语言,但语法不同。C++ Builder和对象Pascal甚至共享同一个代码,在顶部有不同的解析器/词素。 话虽如此,没有真正的理由说明为什么一些自定义驱动程序可以在NodeJ中编码。在Linux下,许多硬件中间件最初是用Python编写的,但最终是用C语言完成的。因此,只要有人调整了有关硬件访问的运行时,一切都是可能的。FreePascal和Python使Raspberry PI 1-2上的GPIO访问变得非常简单。但毫无疑问,像C/C++和Object Pascal这样的真正语言占据了上风


“真实”的意思是编译为平台的机器代码,不真实的意思是指python和javascript等脚本引擎。

任何语言都可以用来编写设备驱动程序,但必须满足以下几个条件:

  • 直接内存访问。请看以下源代码:
  • 作为设备驱动程序,您可能直接访问虚拟内存或物理内存(在DMA的情况下),因此需要通过MMU绕过虚拟内存设置。直接访问虚拟内存意味着您知道虚拟地址,并希望直接读取地址

    Java或Javascript没有任何语言结构可以通过已知地址直接读取内存

  • 汇编语言敏感任务:访问硬件通常需要特殊的汇编指令,如禁用中断,或从一个CPU切换到另一个CPU,或广播CPU间消息等。没有Java构造来完成所有这些任务,甚至可能没有C语言。这就是为什么经常需要组合C+汇编的原因。但是没有办法将Java和汇编结合起来

  • 本机语言与解释语言:所有intepreter语言都必须经过intepreter才能执行该语言。在Javascript或Java中,您需要JVM来执行Java。因此,如果内核中需要Java,那么内核中就需要一个JVM intepreter。这不是不可能的-最近的Linux内核中有一个BPF intepreter运行在内核中,因此您有一个BPF VM运行在内核中:

  • Java作为设备驱动程序的想法以前已经作为研究论文/项目(针对Sun Solaris OS)实施过:

    但我不知道如何解决直接访问内存的问题

    尽管如此,仍然可以设计一个系统,其中一部分任务可以由低级别模块完成,该模块依赖于C/Assembly,其他组件可以用非C语言编写,如本文(Usenix 2009)所示:

    见下图:


    我们面临着类似的问题,我们需要通过我们的在线平台访问硬件并进行现场演示,因此我们的解决方案是购买一个适配器,为硬件端口提供ip,这样我们就可以使用node.js与硬件进行对话。也许您可以找到类似的解决方案

    关于各种平台上存在的许多用户模式驱动程序框架呢?:-)@JasonMalinowski到目前为止是实现itI最简单的方法,我现在想在FUSE上编写一个文件系统驱动程序,因为我可以!阿特伍德定律!据我所知,您仍然不会在UMDF中使用Javascript。就我个人而言,我喜欢JS,但是在这种情况下,最好找到合适的工具,在它的位置尝试使用不同的工具。JS最初是作为web浏览器的一部分实现的,因此客户端脚本……您应该检查一下这应该是公认的答案@AnttiHaapalaI想知道Linux的东西最初是在Python中编写的C语言的定稿来自。我自己也做过一些内核开发,认识很多人,他们每天都在做内核开发。我想他们会很难过的