首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法激活BeagleBoneBlack上的USB设备

无法激活BeagleBoneBlack上的USB设备
EN

Stack Overflow用户
提问于 2016-10-17 15:10:16
回答 1查看 1.8K关注 0票数 2

背景:

我试图弄清楚如何使用ConfigFS在BeagleBoneBlack上设置HID设备。

我在网上找到了下面的例子(www.aticktoit.net/?P=1383),并进行了尝试。样本运行在一个树莓Pi零。然而,样本并不适用于我的BBB。下面是我编写的脚本,它作为root执行。脚本试图定义键盘隐藏设备。

代码语言:javascript
复制
#!/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:写错误: Devicew或资源繁忙“。

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

我做了一个lsmod和libcomposite和usb_f_hid是加载的。

usb设备控制器musb 0自动加载。

问题:

  1. 我怎么知道哪个设备在忙?
  2. 在哪里可以找到BBB的缺陷错误列表。
  3. 是否有一个日志文件和启用参数可以让我知道发生了什么?

谢谢你的帮助

大卫·格拉泽

EN

回答 1

Stack Overflow用户

发布于 2016-11-19 02:32:01

beaglebone黑色的问题可能是cdc_acm驱动程序。如果你不知道怎么做,就很难移除(嗯,我现在还不知道怎么做),因为这些步骤还不只是为了找到任何地方。我发现了这个:https://media.defcon.org/DEF%20CON%2023/DEF%20CON%2023%20presentations/DEFCON-23-Phil-Polstra-One-device-to-Pwn-them-all.pdf

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

代码语言:javascript
复制
#!/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

基本上,它停止了串行getty服务,该服务允许您删除g_serial设备,然后允许您删除usb_f_acm。这反过来又删除了libcomposite,您实际上想要保留它。一旦完成了这个任务,你就可以做所有你需要做的事情了。我有一个不错的隐藏键盘这样工作(好吧,我想这是一个KeygleBone黑色现在).一旦你理解了所有的片段,这是相当简单的,但我有一个小麻烦,把我的设备拆掉。我可能最终不需要这样做,但我希望能够做到这一点,而且似乎某些目录无法删除(即我创建的“字符串”目录)。这意味着我不能完全拆除这个设备,但也许我只需要:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#!/usr/bin/bash

同样,可能还有其他更好的方法(我在这里很懒,而且,嗯,我只是个老派),特别是如果您的设备将是一个IoT设备或任何链接到网络的东西,所以如果您需要在引导上运行这个脚本,您可能需要考虑其他一些方法。

我确实愚蠢地遗漏了一件事:我确保beaglebone黑色没有出现它通常的“磁盘”部分。我会把细节放在这里,但坦白地说,我得把那些东西找回来。我基本上搜索了一下如何禁用beaglebone黑磁盘。这并不难,相当于我将一些文件移到另一个名称,这样它就不会在引导时找到"USB磁盘“配置。您也可以在我认为的某个地方更改uboot配置中的一行,但我并不真的想这样做。

找到文件:/var/local/bb_usb_storage.img

如果它是beaglebone绿色的话,它可能是bbg_usb_mass_storage.img,但是我只是移动了这个文件,这样它就不会显示大容量的存储设备。这应该能让你做你想做的事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40089921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档