【2023 DigiKey大赛参与奖】基于BeagleBone_Green开发板和libusb进行USB主机应用开发
[复制链接]
本文转自本人公众号文章
https://mp.weixin.qq.com/s/kRH5APCbqUJxhCe1wzsRcQ 基于BeagleBone_Green开发板和libusb进行USB主机应用开发
USB开发
一. 前言
本文演示基于本开发在嵌入式平台上使用libusb进行usb主机应用开发的过程。最后分享了一个通过bulk传输自定义协议实时采集视频流的案例。
本开发板的其他文章参考
https://mp.weixin.qq.com/s/5gDfX__U8-F4MVqn92KtLw 玩板系列之二:BeagleBone_Green开发板搭建Samba服务
https://mp.weixin.qq.com/s/14_pt_OkyrNTEPGlB9gWBw 玩板系列之三:BeagleBone_Green开发板基于Ibserialport进行串口开发
https://mp.weixin.qq.com/s/ygU1d60Dnj72HSlVnwtBwA 玩板系列之一:BeagleBone_Green开发板体验之树莓派SBC的优秀替代者BeagleBone
后面分享的案例参见:
https://mp.weixin.qq.com/s/9yhMPGqsehdCypk7EtS91Q 参考超级精简系列之二十一:基于状态机和FIFO的高效健壮帧接收实现-宝刀出鞘实战篇高效视频流处理
《STEP BY STEP设计一个USB调试助手》系列文章。
二. 构建库
按照如下过程构建库
更新系统
sudo apt update
sudo apt upgrade
安装依赖
sudo apt-get install autoconf
sudo apt-get install libtool
sudo apt-get install libudev-dev
下载代码
git clone
cd libusb
./autogen.sh
make
sudo make install
安装位于/usr/local/lib
三. 使用库编译应用
默认构建库时,编译了全部样例程序,
cd examples/
./listdevs 运行例程。
我们可以使用样例程序,手动编译
使用库编译程序
cd libusb/examples/
gcc listdevs.c -lusb-1.0 -I/usr/local/include/libusb-1.0 -L/usr/local/lib
四. 使用源码编译应用
使用源码编译更方便开发调试,
准备源码
位于libusb同级目录下
复位例程过来 cp libusb/examples/listdevs.c .
./autogen.sh 会自动产生config.h
复制配置文件过来 cp libusb/config.h .
也可以手动创建config.h内容如下
编译:依赖-ludev -lpthread
gcc libusb/libusb/*.c libusb/libusb/os/events_posix.c libusb/libusb/os/linux_udev.c libusb/libusb/os/linux_usbfs.c libusb/libusb/os/threads_posix.c listdevs.c -Ilibusb/libusb -Ilibusb/libusb/os -I. -lpthread -ludev -o listdevs
运行 ./listdevs
debian@BeagleBone:~$ ./listdevs
1d6b:0002 (bus 1, device 1)
debian@BeagleBone:~$
所以使用libusb开发应用需要依赖libudev和pthread,嵌入式平台下需要注意是否支持已经有这些依赖。
我这里有一个项目,跨平台支持linux和windows下开发,文件如下,主要是通过bulk传输实时采集设备发送过来的视频流进行解析和显示。
debian@BeagleBone:~/share/usb_tool$ tree . -L 3
.
├── Linux_CMD
│ ├── build.sh
│ ├── config.h
│ ├── main.c
│ └── usb_tool
├── Windows_QT
│ ├── build
│ │ └── build-usb_tool-Desktop_Qt_6_6_1_MinGW_64_bit-Profile
│ ├── config.h
│ ├── main.cpp
│ ├── mainwindow.cpp
│ ├── mainwindow.h
│ ├── mainwindow.ui
│ ├── usb_tool.pro
│ └── usb_tool.pro.user
├── fifo.c
├── fifo.h
├── fifo_pool.c
├── fifo_pool.h
├── frame.c
├── frame.h
├── libusb
│ ├── AUTHORS
│ ├── COPYING
│ ├── ChangeLog
│ ├── HACKING
│ ├── INSTALL_WIN.txt
│ ├── Makefile.am
│ ├── NEWS
│ ├── PORTING
│ ├── README
│ ├── README.git
│ ├── README.md
│ ├── TODO
│ ├── Xcode
│ │ ├── common.xcconfig
│ │ ├── config.h
│ │ ├── debug.xcconfig
│ │ ├── libusb.xcconfig
│ │ ├── libusb.xcodeproj
│ │ ├── libusb_debug.xcconfig
│ │ ├── libusb_release.xcconfig
│ │ └── release.xcconfig
│ ├── android
│ │ ├── README
│ │ ├── config.h
│ │ ├── examples
│ │ └── jni
│ ├── appveyor.yml
│ ├── autogen.sh
│ ├── bootstrap.sh
│ ├── configure.ac
│ ├── doc
│ │ ├── Makefile.in
│ │ ├── doxygen.cfg.in
│ │ └── libusb.png
│ ├── examples
│ │ ├── Makefile.am
│ │ ├── dpfp.c
│ │ ├── ezusb.c
│ │ ├── ezusb.h
│ │ ├── fxload.c
│ │ ├── hotplugtest.c
│ │ ├── listdevs.c
│ │ ├── sam3u_benchmark.c
│ │ ├── testlibusb.c
│ │ └── xusb.c
│ ├── libusb
│ │ ├── Makefile.am
│ │ ├── Makefile.am.extra
│ │ ├── core.c
│ │ ├── descriptor.c
│ │ ├── hotplug.c
│ │ ├── io.c
│ │ ├── libusb-1.0.def
│ │ ├── libusb-1.0.rc
│ │ ├── libusb.h
│ │ ├── libusbi.h
│ │ ├── os
│ │ ├── strerror.c
│ │ ├── sync.c
│ │ ├── version.h
│ │ └── version_nano.h
│ ├── libusb-1.0.pc.in
│ ├── msvc
│ │ ├── Base.props
│ │ ├── Configuration.Application.props
│ │ ├── Configuration.Base.props
│ │ ├── Configuration.DynamicLibrary.props
│ │ ├── Configuration.StaticLibrary.props
│ │ ├── ProjectConfigurations.Base.props
│ │ ├── build_all.ps1
│ │ ├── config.h
│ │ ├── dpfp.vcxproj
│ │ ├── dpfp_threaded.vcxproj
│ │ ├── fxload.vcxproj
│ │ ├── getopt
│ │ ├── getopt.vcxproj
│ │ ├── hotplugtest.vcxproj
│ │ ├── init_context.vcxproj
│ │ ├── libusb.sln
│ │ ├── libusb_dll.vcxproj
│ │ ├── libusb_static.vcxproj
│ │ ├── listdevs.vcxproj
│ │ ├── sam3u_benchmark.vcxproj
│ │ ├── set_option.vcxproj
│ │ ├── stress.vcxproj
│ │ ├── stress_mt.vcxproj
│ │ ├── testlibusb.vcxproj
│ │ └── xusb.vcxproj
│ └── tests
│ ├── Makefile.am
│ ├── init_context.c
│ ├── libusb_testlib.h
│ ├── macos.c
│ ├── set_option.c
│ ├── stress.c
│ ├── stress_mt.c
│ ├── testlib.c
│ ├── umockdev.c
│ └── webusb-test-shim
├── log.c
├── log.h
├── usbdev.c
├── usbdev.h
├── usbdev_cfg.h
├── usbdev_cmd.c
├── usbdev_cmd.h
├── usbdev_fifo.c
├── usbdev_fifo.h
├── usbdev_frame.c
├── usbdev_frame.h
├── usbdev_frame_converted.c
├── usbdev_frame_converted.h
├── usbdev_task.c
└── usbdev_task.h
18 directories, 118 files
debian@BeagleBone:~/share/usb_tool$
编译./build.sh
build.sh内容如下
板上编译也还可以接受,时间不是很长
运行如下
五. 总结
本文分享了使用libusb在本开发板上开发usb主机应用的过程,也适合一般的嵌入式平台。同时分享了一个具体的项目案例。
|