在openwrt(mips架构上)移植libusb库
背景
有个项目,需要在openwrt的linux系统中使用libusb与挂载的一颗芯片进行USB通信,我要尝试在应用层通过libusb与外挂芯片进行USB通信。
调研
网上刚开始检索时,有网友说openwrt上不能使用libusb,因为openwrt是裁剪的linux系统,没有usbfs、有的说因为没有 /proc/bus/usb目录,而libusb依赖这个目录,所以不能用... ...
我首先先看了下网友说的libusb这部分的源码,截取如下:
static const char *find_usbfs_path(void)
{const char *path = "/dev/bus/usb";const char *ret = NULL;if (check_usb_vfs(path)) {ret = path;} else {path = "/proc/bus/usb";if (check_usb_vfs(path))ret = path;}/* look for /dev/usbdev*.* if the normal places fail */if (ret == NULL) {struct dirent *entry;DIR *dir;path = "/dev";dir = opendir(path);if (dir != NULL) {while ((entry = readdir(dir)) != NULL) {if (_is_usbdev_entry(entry, NULL, NULL)) {/* found one; that's enough */ret = path;usbdev_names = 1;break;}}closedir(dir);}}... ...... ...
}
通过以上代码可以看到,libusb其实会查找 /dev/bus/usb、/proc/bus/usb这2个目录,任意一个存在则说明可以支持,而我的系统就是存在 /dev/bus/usb而没有/proc/bus/usb,所以看起来是可以用的,于是开始移植libusb。
移植
下载libusb源码,我下载的版本是libusb-1.0.22
./configure --host=mips-openwrt-linux --disable-udev
make
如果要开启libusb的日志,config时加上--enable-debug-log 参数即可
我的板载的精简Linux系统不支持lsusb命令,所以我也将lsusb命令移植过去了,有点麻烦,依赖挺多的,需要移植udev、lsusb等,其中,我的udev选择的是eudev-3.2.9,lsusb选择的是usbutils-008,通过config配置usbutils时还要通过LIBUSB_CFLAGS、LIBUSB_LIBS指定libsub库路径,这部分的详细过程自行百度吧。
如果以上make出错,检查下makefile中的交叉编译器参数对不对、去掉-m32、-m64等参数。
测试结果
root@OpenWrt:~# ./a.out
[/home/xxx/USB-Code/SDK/src/usb.c]L0069:libusb_init success![/home/xxx/USB-Code/SDK/src/usb.c]L0076:libusb_get_device_list success: 0![/home/xxx/USB-Code/SDK/src/usb.c]L0088:find dev: vid = 2301 pid = 0709[/home/xxx/USB-Code/SDK/src/usb.c]L0103:libusb_open success![/home/xxx/USB-Code/SDK/src/usb.c]L0118:libusb_claim_interface success![/home/xxx/USB-Code/SDK/src/usb.c]L0138:libusb_bulk_transfer ok, send_len = 8[/home/xxx/USB-Code/SDK/src/usb.c]L0292:libusb_bulk_transfer ok, recv_len = 32
结论
还是要多尝试、多阅读源码、实践出真知!
最后需要注意下mips架构是大端,与x86、arm(默认小端)不同,通讯时注意下大小端的问题。
在openwrt(mips架构上)移植libusb库相关推荐
- libusb android pc,libusb: android上集成libusb库
1. 下载libusb库. 2. 添加libusb库到android studio项目中. 这里以源码编译的方式添加,使用的仍然是ndk-build的方式,而非cmake,使用源码编译的好处在于,可以 ...
- 在NUC972上移植pjsip库并使用PJSUA测试VOIP电话(二)
如果有问题,请加QQ群 891339868 进行交流 昨天我已经把pjsip工程相关的库移植好,今天开始使用库里面自带的测试程序进行测试,在这之前需要搭建一个测试环境,我使用的是minsipserve ...
- 在NUC972上移植pjsip库并使用PJSUA测试VOIP电话(一)
如果有问题,请加QQ群 891339868 进行交流 近段时间,突然对VOIP电话有了兴趣,想在NUC972的板子上测试一下VOIP电话,经过查阅资料,了解到VOIP电话是基于sip协议做的,所以对s ...
- 架构之争,MIPS走上开源道路!
前几天发布了2篇文章,一篇已更新作者和链接等原创关键信息重新发布(更新: 容器在2019年有望推翻VMware),另一篇原创标题为"MIPS Goes Open Source"的文 ...
- php mipsl,MIPS系列笔记-交叉编译MIPS架构ASLA
交叉编译MIPS架构ASLA ../src/.libs/libasound.so: undefined reference to `atomic_sub' 我使用下面的命令进行config: ./co ...
- 嵌入式openwrt平台(mt7688)上使用讯飞语音服务
还记得第一次接触嵌入式开发,boss拿着一块widora的mt7688板子让我去开发openwrt环境下的使用讯飞语音技术的应用.我的天啊,我第一次接触,这是什么东西.因此,我这个新手走了不少弯路,但 ...
- MIPS 架构的 AR9331芯片 编译链相关内容
windows篇============================= 小撸路由是啥?小撸路由顾名思义就是@小撸撸过的 WR703N 之类的路由(系统基于OpenWrt)!因为它使用起来非常方便, ...
- 在Tricore上移植μC/OS-III——0.1总述
本文是<在Tricore上移植μC/OS-III>专栏文章的第一篇,先简单介绍下整个项目. Tricore是英飞凌旗下的一款单片机内核,目前汽车电子领域常用的TC2XX和TC3XX等系列的 ...
- 华为EC122在HiSi3110E上移植
一.环境 1. 开发板内核:linux kernel 2.6.14 2. 3G卡片:华为EC122 二.相关工具 1. usb-modeswitch-1.0.2.tar.bz2 Usb_mode ...
最新文章
- Scala入门与进阶(五)- Scala数组
- MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?
- 信息系统项目管理师优秀论文:项目整体管理
- 在Delphi中关于UDP协议的实现
- 红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动
- android 代码 lut,Android BitmapFactory.decodeResource()错误或用于加载大LUT的替代选项...
- php savepath,php中session_save_path另外一种用法
- Jquery+CSS Input file 文本框轻美化
- 剑指offer面试题07. 重建二叉树(递归)(切片)
- 递归下降分析法的基本思想。_八大算法思想总结提高
- CFS任务的负载均衡(框架篇)
- tensorflow object detect API 使用,并修改一部分
- 安全漏洞之host头攻击漏洞
- 快牛策略——PowerPoint 2003:红头文件的制作及标准
- windows网络服务
- 苹果手机二手最新价格
- 用python画小猪佩奇代码_Python turtle模块实例:绘制小猪佩奇(上)
- 论OpenVZ与KVM的区别
- 《微信小程序跳转页面安卓闪现两次》
- python学习(4)zip函数