背景

有个项目,需要在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. Scala入门与进阶(五)- Scala数组
  2. MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?
  3. 信息系统项目管理师优秀论文:项目整体管理
  4. 在Delphi中关于UDP协议的实现
  5. 红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动
  6. android 代码 lut,Android BitmapFactory.decodeResource()错误或用于加载大LUT的替代选项...
  7. php savepath,php中session_save_path另外一种用法
  8. Jquery+CSS Input file 文本框轻美化
  9. 剑指offer面试题07. 重建二叉树(递归)(切片)
  10. 递归下降分析法的基本思想。_八大算法思想总结提高
  11. CFS任务的负载均衡(框架篇)
  12. tensorflow object detect API 使用,并修改一部分
  13. 安全漏洞之host头攻击漏洞
  14. 快牛策略——PowerPoint 2003:红头文件的制作及标准
  15. windows网络服务
  16. 苹果手机二手最新价格
  17. 用python画小猪佩奇代码_Python turtle模块实例:绘制小猪佩奇(上)
  18. 论OpenVZ与KVM的区别
  19. 《微信小程序跳转页面安卓闪现两次》
  20. python学习(4)zip函数

热门文章

  1. 349元我们应该有什么样的期待-原道N12豪华版 RK2906入手初体验
  2. favicon的解释
  3. 小说下载阅读器 官网
  4. 2003邮件服务器维护,Windows 2003邮件服务器配置指南
  5. 后端开发【一大波有用知识】—Redis,Memcached,Nginx网络组件
  6. 助力大气污染防治攻坚战
  7. 卷轴屏扎堆、三星机器人cos杨过!云办展的CES怎么玩?
  8. 微信公众号开发C#系列-7、消息管理-接收事件推送
  9. JavaScript DOM对象控制HTML元素详解
  10. 如何突破网管的封锁聊QQ