背景

有个项目,需要在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库相关推荐

  1. libusb android pc,libusb: android上集成libusb库

    1. 下载libusb库. 2. 添加libusb库到android studio项目中. 这里以源码编译的方式添加,使用的仍然是ndk-build的方式,而非cmake,使用源码编译的好处在于,可以 ...

  2. 在NUC972上移植pjsip库并使用PJSUA测试VOIP电话(二)

    如果有问题,请加QQ群 891339868 进行交流 昨天我已经把pjsip工程相关的库移植好,今天开始使用库里面自带的测试程序进行测试,在这之前需要搭建一个测试环境,我使用的是minsipserve ...

  3. 在NUC972上移植pjsip库并使用PJSUA测试VOIP电话(一)

    如果有问题,请加QQ群 891339868 进行交流 近段时间,突然对VOIP电话有了兴趣,想在NUC972的板子上测试一下VOIP电话,经过查阅资料,了解到VOIP电话是基于sip协议做的,所以对s ...

  4. 架构之争,MIPS走上开源道路!

    前几天发布了2篇文章,一篇已更新作者和链接等原创关键信息重新发布(更新: 容器在2019年有望推翻VMware),另一篇原创标题为"MIPS Goes Open Source"的文 ...

  5. php mipsl,MIPS系列笔记-交叉编译MIPS架构ASLA

    交叉编译MIPS架构ASLA ../src/.libs/libasound.so: undefined reference to `atomic_sub' 我使用下面的命令进行config: ./co ...

  6. 嵌入式openwrt平台(mt7688)上使用讯飞语音服务

    还记得第一次接触嵌入式开发,boss拿着一块widora的mt7688板子让我去开发openwrt环境下的使用讯飞语音技术的应用.我的天啊,我第一次接触,这是什么东西.因此,我这个新手走了不少弯路,但 ...

  7. MIPS 架构的 AR9331芯片 编译链相关内容

    windows篇============================= 小撸路由是啥?小撸路由顾名思义就是@小撸撸过的 WR703N 之类的路由(系统基于OpenWrt)!因为它使用起来非常方便, ...

  8. 在Tricore上移植μC/OS-III——0.1总述

    本文是<在Tricore上移植μC/OS-III>专栏文章的第一篇,先简单介绍下整个项目. Tricore是英飞凌旗下的一款单片机内核,目前汽车电子领域常用的TC2XX和TC3XX等系列的 ...

  9. 华为EC122在HiSi3110E上移植

    一.环境 1.  开发板内核:linux kernel 2.6.14 2.  3G卡片:华为EC122 二.相关工具 1.  usb-modeswitch-1.0.2.tar.bz2 Usb_mode ...

最新文章

  1. 人工智能的过去、现在和未来
  2. Express.js 3.0 发布,Node.js 的高性能封装
  3. 解决数据库自增ID的问题
  4. AB1601LED之pwm
  5. 神策数据张涛:企业服务客户全生命周期运营三步曲:执行反馈
  6. axis2 java.net.url_axis,axis2调用.net的webservice
  7. zookeeper的设计猜想-Leader角色
  8. 白鹭引擎增加点击事件实例
  9. winform中与asp.net中的 TreeView节点处理对比
  10. MVC的初步认识理论
  11. MySQL之DDL(定义)语句
  12. 在SketchUp草图大师中创建第一个3D模型
  13. cisco2911路由器破解密码
  14. PyVistaVTK Data Model
  15. 人工智能 感情 自我意识
  16. sas table将缺失值计入百分比_逻辑回归的评分卡的SAS实现
  17. AUTOSAR架构中的配置文件
  18. Windows10怎么卸载删除微软拼音输入法
  19. 开源网络管理软件-RANCID【新任帮主】
  20. The Street View House Numbers (SVHN) Dataset

热门文章

  1. 【DDSCAT——离散偶极近似仿真程序05】模型设计Matlab代码:多核壳球 、多核壳圆柱
  2. 事务隔离级别和传播行为_?Spring事务的传播行为案例分析
  3. Wikileaks公布CIA的代码混淆工具Marble
  4. 限时7天的附下载链CobaltStrike
  5. 深入理解 Linux 的 TCP 三次握手
  6. delphi android jni,Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用...
  7. COM服务器应用程序本地激活权限错误解决方法
  8. 使用Glide时 错误: 找不到符号 符号: 类 GlideApp解决方案
  9. 手写dialog弹框
  10. 人工智能将战围棋大师李世石 这次它还能赢么?