在openwrt(mips架构上)移植libusb库

您所在的位置:网站首页 lsusb命令不存在 在openwrt(mips架构上)移植libusb库

在openwrt(mips架构上)移植libusb库

2023-10-28 08:38| 来源: 网络整理| 查看: 265

背景

有个项目,需要在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(默认小端)不同,通讯时注意下大小端的问题。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3