背景:
我试图弄清楚如何使用ConfigFS在BeagleBoneBlack上设置HID设备。
我在网上找到了下面的例子(www.aticktoit.net/?P=1383),并进行了尝试。样本运行在一个树莓Pi零。然而,样本并不适用于我的BBB。下面是我编写的脚本,它作为root执行。脚本试图定义键盘隐藏设备。
#!/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自动加载。
问题:
谢谢你的帮助
大卫·格拉泽
发布于 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
这让我找到了下面的解决方案
#!/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黑色现在).一旦你理解了所有的片段,这是相当简单的,但我有一个小麻烦,把我的设备拆掉。我可能最终不需要这样做,但我希望能够做到这一点,而且似乎某些目录无法删除(即我创建的“字符串”目录)。这意味着我不能完全拆除这个设备,但也许我只需要:
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设备或任何链接到网络的东西,所以如果您需要在引导上运行这个脚本,您可能需要考虑其他一些方法。
我确实愚蠢地遗漏了一件事:我确保beaglebone黑色没有出现它通常的“磁盘”部分。我会把细节放在这里,但坦白地说,我得把那些东西找回来。我基本上搜索了一下如何禁用beaglebone黑磁盘。这并不难,相当于我将一些文件移到另一个名称,这样它就不会在引导时找到"USB磁盘“配置。您也可以在我认为的某个地方更改uboot配置中的一行,但我并不真的想这样做。
找到文件:/var/local/bb_usb_storage.img
如果它是beaglebone绿色的话,它可能是bbg_usb_mass_storage.img,但是我只是移动了这个文件,这样它就不会显示大容量的存储设备。这应该能让你做你想做的事。
https://stackoverflow.com/questions/40089921
复制相似问题