编译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.
有时间再看看。
首先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.
有时间再看看。
相关文章推荐
- 【ARM】嵌入式 ARM Linux 下移植 USB 蓝牙、交叉编译 bluez 各种版本
- 华硕WL-167G USB 无线网卡ARM移植 (3:编译:版本RT.1104)
- 华硕WL-167G USB 无线网卡ARM移植 (1:编译: 版本RT.1036 )
- lsusb arm 移植
- 华硕WL-167G USB 无线网卡ARM移植 (2:配置: 版本RT.1036 )
- 在Qt-Extended 4.4.3下编译PC版本的HelloQt4;在Qt-Extended 4.4.3下编译arm版本的HelloQt4
- 利用ndk交叉编译x264到arm平台(带neon版本)
- MDK V4.70版本,安装完成后,打开工程编译会出现如下警告与错误的 L6310W: Unable to find ARM libraries
- 编译ARM版本时出错误
- 利用ndk交叉编译x264到arm平台(带neon版本)
- 如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本
- 如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本
- iOS下完美编译ffmpeg+x264,支持armv7, armv7s, 模拟器 (验证不通过,估计和ffmpeg版本有关)
- eCos 3.0 版本和cvs版本的 arm-eabi toolchains的编译方法
- 转 lsusb arm移植
- 1.12.2 编译和运行arm版本的QtE-4.7.0
- 把Qt-everywhere-4.6.2编译成ARM版本
- Xcode4.2、iOS各版本以及ARMv6、ARMv7编译架构介绍
- 把Qt-everywhere-4.6.2编译成ARM版本
- 如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本