Javascript 在Beaglebone Black上配置GPIO的不同方法有哪些优点/缺点?

Javascript 在Beaglebone Black上配置GPIO的不同方法有哪些优点/缺点?,javascript,python,beagleboneblack,device-tree,Javascript,Python,Beagleboneblack,Device Tree,我正在使用Beaglebone Black创建一个新的应用程序。我需要为不同的功能配置GPIOs。我将有一些GPIO,一些PWM,可能还有一些其他功能 我注意到有不同的方法可以做到这一点。这些是按优先顺序排列的: 我可以编写代码,用以表示“将该引脚设置为PWM”等等 我能做到 我可以制作和编译一个设备树覆盖源文件(.dts),并使用它 我可以编写一个bash脚本,对文件系统中的不同设备定义回显“out”和“in”等等 我想象有一个C API,尽管我不会在这个应用程序中使用它 我最大的需求是可

我正在使用Beaglebone Black创建一个新的应用程序。我需要为不同的功能配置GPIOs。我将有一些GPIO,一些PWM,可能还有一些其他功能

我注意到有不同的方法可以做到这一点。这些是按优先顺序排列的:

  • 我可以编写代码,用以表示“将该引脚设置为PWM”等等
  • 我能做到
  • 我可以制作和编译一个设备树覆盖源文件(.dts),并使用它
  • 我可以编写一个bash脚本,对文件系统中的不同设备定义回显“out”和“in”等等
  • 我想象有一个C API,尽管我不会在这个应用程序中使用它
我最大的需求是可复制性。我不需要高性能。我只需要能够以同样的方式建立一群Beaglebone黑人,让他们表现可靠


是否有一些优势,我没有看到做一个设备树覆盖和所有这些?何时会有人选择一种方法而不是另一种方法?

引脚多路复用器通过AM335x处理器控制模块子系统中的寄存器进行配置。当运行GNU/Linux时,控制模块寄存器只能从内核空间访问,因此必须由内核驱动程序完成

在BeagleBone上,有一个名为bone pinmux helper的驱动程序,它允许从用户空间在不同的pinmux配置之间进行运行时更改。配置需要预先设置并通过设备树覆盖传递给驱动程序。例如,在中,我有一个为每个GPIO引脚生成的脚本。他们设置了不同的可能模式(in、out、pullup、pulldown等),然后将这些模式作为不同的模式传递给bone pinmux助手驱动程序。然后,当调用
pinMode()
functino时,PyBBIO使用驱动程序加载生成的管脚覆盖,然后使用为该管脚创建的sysfs条目将其设置为请求的模式

Bonescript使用与PyBBIO相同的方法,IIRC Adafruit_BBIO没有用于pinmuxing的覆盖,需要用户单独进行


因此,长话短说,设备树覆盖是实现pinmuxing的唯一方法,而像PyBBIO和bonescript这样的用户空间库正将其抽象化。如果你想拥有完全的控制权,那么就编写并编译你自己的覆盖图。如果您不想处理编写DT覆盖或担心兼容性,因为随着时间的推移,事情可能会发生变化,请使用像PyBBIO或Bonescript这样的库,将该级别抽象出来,并相信它们会确保事情继续工作

我认为Adafruit图书馆可以处理品慕星。我尝试了一些基本的操作,使用PWM和GPIO输入输出,在没有任何额外工作的情况下,它似乎工作得很好。我不需要做覆盖。