934|1

504

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

【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主机应用的过程,也适合一般的嵌入式平台。同时分享了一个具体的项目案例。

最新回复

感谢楼主分享的技术信息,内容非常详实,条理清晰,值得收藏学习   详情 回复 发表于 2024-5-15 15:15
点赞 关注
 
 

回复
举报

755

帖子

5

TA的资源

纯净的硅(高级)

沙发
 

感谢楼主分享的技术信息,内容非常详实,条理清晰,值得收藏学习

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表