您的位置:首页 > 其它

编译ARM版本的lsusb

2016-11-17 09:44 337 查看
       因为最近调试USB的功能比较多,所以想编译一个ARM版本的lsusb,方便在目标平台上查看USB的状态。试了下Busybox中的lsusb,因为不能输出详细(-v参数),所以就想自己上网找代码编译了一个。虽然编译出来好几个,也能够运行,但也没能输出详细信息,编译参考了一些网上的方法,在些记录一下过程。

 

       首先lsusb需要用到libusb,libusb分1.0和0.1两种版本,两种版本互相不兼容。先试个老版本的,编译了一下0.1版本的。

 

       注:工具链是现成的,所有就没了写工具链的部分。

 

libusb-0.1版本

       下载:http://dist.momonga-linux.org/pub/momonga/2/SOURCES/libusb-0.1.10.tar.gz

 

       tarzxvf libusb-0.1.10.tar.gz

cdlibusb-0.1.10/

./configureCC=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gccCXX=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++--prefix="$PWD/../_install" --host=arm-linux-gnueabi ARCH=arm

 

ARCH=armCROSS_COMPILE=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-make install

 

       报错:usbpp.cpp:486:61:error: 'printf' was not declared in this scope

    printf("   bInterfaceNumber:   %d\n",m_InterfaceNumber);

                                                            ^

缺少头文件包含,修改vi usbpp.cpp

增加头文件 #include <stdio.h>

 

       另一个错误usbpp.h:8:17:fatal error: usb.h: No such file or directory

 #include <usb.h>

 

看了一下此文件就可本目录下,修改vi usbpp.h

把include <usb.h> 改为 include "usb.h"

 

       再编译,通过,生成的lib放在../_install目录下了。

 

       下载usbutils:http://pkgs.fedoraproject.org/repo/pkgs/usbutils/

       下载的版本是0.86,文件名是usbutils-0.86.tar.gz

tar zxvf usbutils-0.86.tar.gz

cdusbutils-0.86/

./configureCC=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc--host=arm-linux-gnueabi LIBUSB_CFLAGS="$PWD/../_install/include/"LIBUSB_LIBS="$PWD/../_install/lib/libusb.so" CPPFLAGS=-I"$PWD/../_install/include/"CFLAGS="-O2"

 

ARCH=armCROSS_COMPILE=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-make

 

       编译没问题,但编译出来是需要动态库的,使用比较麻烦,编译一下静态链接的。增加编译参数-static,并且把库.so改为.a。

./configureCC=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc--host=arm-linux-gnueabi LIBUSB_CFLAGS="$PWD/../_in
4000
stall/include/"LIBUSB_LIBS="$PWD/../_install/lib/libusb.a"CPPFLAGS=-I"$PWD/../_install/include/" 
CFLAGS="-O2-static"

 

       到目标机上运行,提示找不到usb.ids文件,./lsusb: cannotopen "/usr/share/usb.ids", No such file or directory看了一下代码,默认放在/usr/share目录下的。更改一下。修改configure参数。

./configureCC=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc--host=arm-linux-gnueabi LIBUSB_CFLAGS="$PWD/../_install/include/"LIBUSB_LIBS="$PWD/../_install/lib/libusb.a"CPPFLAGS=-I"$PWD/../_install/include/"
--datadir="/data"CFLAGS="-O2 -static"

 

       把源代码下的usb.ids文件拷贝到/data目录下,再执行,没出错,但也没有输出。试了一下就加-t参数有输出。

$lsusb -t

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=papajoke-ehci/1p,480M

           |__ Port 1: Dev 2, If 0, Class=stor.,Driver=usb-storage, 480M

/:  Bus 01.Port 1: Dev 1, Class=root_hub,Driver=papajoke-ehci/1p, 480M

 

       发现这个版本不行,想试试1.0版本的lsusb。继续折腾。

 

libusb-1.0版本

       下载一个1.0版本的libusb,https://sourceforge.net/projects/libusb/files/libusb-1.0/,找了个1.0.8版本。libusb-1.0.8.tar.bz2

tar jxvflibusb-1.0.8.tar.bz2

cd libusb-1.0.8/

./configureCFLAGS='-g -O2' CC=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc--prefix="$PWD/../_install" --host=arm-linux-gnueabi ARCH=arm

      

ARCH=armCROSS_COMPILE=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-make

 

       库编译好了,看到里面有个examples目录,进入编译一下。

cd  examples

ARCH=arm CROSS_COMPILE=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-make

cd -

 

       生成的文件在examples/.libs目录下,检查了一下,发现是动态库的版本:

arm-linux-gnueabihf-readelf -aexamples/.libs/lsusb | grep NEEDED

 0x00000001 (NEEDED)                     Shared library:[libusb-1.0.so.0]

 0x00000001 (NEEDED)                     Shared library:[librt.so.1]

 0x00000001 (NEEDED)                     Shared library:[libpthread.so.0]

 0x00000001 (NEEDED)                     Shared library: [libc.so.6]

 

       想编译一下静态库的文件。增加-static参数

./configureCFLAGS='-g -O2 -static' CC=~/toolchain/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc--prefix="$PWD/../_install" --host=arm-linux-gnueabi ARCH=arm

 

       最后生成的文件在examples下,不在.libs目录下了。

arm-linux-gnueabihf-readelf -aexamples/lsusb | grep NEEDED

 0x00000001 (NEEDED)                     Shared library:[librt.so.1]

 0x00000001 (NEEDED)                     Shared library:[libpthread.so.0]

 0x00000001 (NEEDED)                     Shared library: [libc.so.6]

 

       在目标机上运行,也没有详细信息

./lsusb

0bda:0119 (bus2, device 6)

1d6b:0002 (bus1, device 1)

1d6b:0002 (bus2, device 1)

 

libusb-1.0.18版本

       试着编译libusb-1.0.18或以上版本,需要libudev的支持。目标系统虽然有libudev.so,但没有相关头文件,所以configure总是过不了,试着从其它项目拷贝了一份udev的源代码,但又需要blkid,找了一份blkid又说版本不正确。

 

       手动修改configure文件,把 enable_udev默认改为no,在Line 11975行。这样就可以配置并编译了。编译方法和1.0.8的一样,但测试了一下,去总是显示失败,不知道是否和没有打开udev有关。

$./xusb -p

Using libusb v1.0.18.10866

 

Opening device 054C:0268...

 Failed.

 

 有时间再看看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: