Can';t在BeagleBoneBlack上激活USB HID设备

Can';t在BeagleBoneBlack上激活USB HID设备,usb,beagleboneblack,hid,Usb,Beagleboneblack,Hid,背景: 我想知道如何使用ConfigFS在BeagleBoneBlack上设置HID设备 我在网上找到了以下示例(www.isticktoit.net/?p=1383),并尝试了它。该样本在树莓皮0上运行。但是,该示例对我的BBB不起作用。下面是我编写的脚本,它作为root用户执行。脚本尝试定义键盘hid设备 #!/bin/bash cd /sys/kernel/config/usb_gadget/ modprobe libcomposite modprobe usb_f_hid mkdir -

背景:

我想知道如何使用ConfigFS在BeagleBoneBlack上设置HID设备

我在网上找到了以下示例(www.isticktoit.net/?p=1383),并尝试了它。该样本在树莓皮0上运行。但是,该示例对我的BBB不起作用。下面是我编写的脚本,它作为root用户执行。脚本尝试定义键盘hid设备

#!/bin/bash
cd /sys/kernel/config/usb_gadget/
modprobe libcomposite
modprobe usb_f_hid
mkdir -p isticktoit
cd isticktoit
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "fedcba9876543210" > strings/0x409/serialnumber
echo "Tobias Girstmair" > strings/0x409/manufacturer
echo "iSticktoit.net USB Device" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
pwd
mkdir -p functions/hid.xyz
echo 1 > functions/hid.xyz/protocol
echo 1 > functions/hid.xyz/subclass
echo 8 > functions/hid.xyz/report_length
echo -ne \\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x25\\x65\\x05\\x07\\x19\\x00\\x29\\x65\\x81\\x00\\xc0 > functions/hid.xyz/report_desc
ln -s functions/hid.xyz configs/c.1/
# End functions
ls /sys/class/udc > UDC
我得到的错误是“ls:write error:Devicew或resource busy”

我正在运行Debian Jessie-Linux版本4.4.9-ti-r25

我做了一个lsmod,加载了libcomposite和usb\u f\u hid

usb设备控制器musb-hdrc-0.auto已加载

问题:

  • 如何判断哪个设备正忙

  • 在哪里可以找到BBB的USB configfs缺陷错误列表

  • 是否有一个日志文件和启用参数可以给我一个关于发生了什么的线索

  • 谢谢你的帮助


    David Glaser

    您可能会遇到的beaglebone black的问题是cdc_acm驱动程序。如果你不知道怎么做,那就很难移除(好吧,现在我知道怎么做了,不是真的),因为这些步骤并不只是为了找到任何地方。我发现:

    这让我想到了下面的解决方案

    #!/usr/bin/env bash
    
    function checkModule(){
      MODULE="$1"
      if lsmod | grep "$MODULE" &> /dev/null ; then
        echo "$MODULE" found.
        return 0
      else
        echo "$MODULE" not found.
        return 1
      fi
    }
    
    
    if which 'systemctl' | grep "systemctl" &> /dev/null ; then
     systemctl stop serial-getty@ttyGS0.service >/dev/null
    fi
    
    if checkModule "g_serial" == 0; then
      modprobe -r g_serial
    fi
    
    if checkModule "usb_f_acm" == 0; then
      modprobe -r usb_f_acm
    fi
    
    if ! checkModule "libcomposite" == 0; then
      modprobe libcomposite
    fi
    
    基本上,它会停止serial getty服务,该服务允许您删除g_串行设备,然后允许您删除usb_f_acm。这又会删除您实际上想要保留的libcomposite设备。一旦这样做了,你可能会做所有你需要做的事情。我有一个很好的隐藏键盘这样工作(好吧,好吧,我想现在它是一个按键骨黑色了)。。。一旦你理解了所有的部分,这就非常简单了,但是我在把我的设备拆开时遇到了一点麻烦。我可能最终不需要这样做,但我希望能够做到这一点,而且某些目录似乎无法删除(即我创建的“字符串”目录)。这意味着我无法完全拆除设备,但也许我只需要:

    echo "" > /sys/kernel/config/usb_gadget/my_gadget/UDC
    
    把它拆掉。那部分我还没弄清楚。也有一些C库,但我有一堆我想使用的python脚本,但我还没有用于这些脚本的python包装器。但这可能不是太多的工作

    我不想忘记提到,我试图将上面的脚本放入rc.local,这样我使用的beaglebone黑色将在启动时“隐藏就绪”。可能有更好的位置和方法可以做到这一点,但我只想使用rc.local,因为上面是一个脚本,rc.local是一个脚本,它应该在引导时运行。。。但它不。。。您必须确保rc.local可运行(chmod 755/etc/rc.local)以及修改它想要运行的默认shell(它总是运行bash,但它运行bash的方法是“POSIX”方法,这似乎不起作用,因此您必须强制它在非POSIX模式下运行bash,并使用:

    #!/usr/bin/bash
    

    另外,可能还有其他更好的方法(我在这里懒惰,我只是老派),尤其是如果你的设备是一个IOT设备或者任何与网络连接的东西,那么如果你需要这个脚本在Bug上运行,你可能想考虑别的东西。 我确实愚蠢地漏掉了一件事:我确保了beaglebone black不会呈现它通常的“磁盘”部分。我会把细节放在这里,但坦率地说,那些我必须追踪的。我基本上是在谷歌上搜索如何禁用beaglebone黑色磁盘。这并不难,相当于我将一些文件移动到另一个名称,这样它就找不到“U盘”我相信你也可以在uboot配置中的某个地方更改一行,但我真的不想这么做

    找到文件:/var/local/bb\u usb\u mass\u storage.img

    嗯,如果它是beaglebone green,那么它可能是bbg_usb_mass_storage.img,但我刚刚移动了这个文件,所以它不会显示大容量存储设备。这应该允许你做你想做的事情