1. 程式人生 > >ubuntu下libusb安裝與測試

ubuntu下libusb安裝與測試

0.libusb的介紹:

1.環境:vmware下Ubuntu12.04

3.解壓原始碼tar xjvf libusb-1.0.9.tar.bz2 按照INSTALL檔案給出的提示進行安裝:主要分為./configure ->make -> make install

4.安裝過程如下:

configure略去......(記得./configure命令時可能沒反應,後查明是沒有執行權,可以使用 sudo chmod +x ***來增加執行權,整個過程中使用sudo來進行)

/* make的動作主要是編譯libusb的原始碼 */

[[email protected] libusb-1.0.9]# make

make  all-recursive
make[1]: Entering directory `/share/libusb-1.0.9'
Making all in libusb
make[2]: Entering directory `/share/libusb-1.0.9/libusb'
  CC     libusb_1_0_la-core.lo
  CC     libusb_1_0_la-descriptor.lo
  CC     libusb_1_0_la-io.lo
  CC     libusb_1_0_la-sync.lo
  CC     libusb_1_0_la-linux_usbfs.lo
  CC     libusb_1_0_la-threads_posix.lo
  CCLD   libusb-1.0.la
make[2]: Leaving directory `/share/libusb-1.0.9/libusb'
Making all in doc
make[2]: Entering directory `/share/libusb-1.0.9/doc'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/share/libusb-1.0.9/doc'
make[2]: Entering directory `/share/libusb-1.0.9'
make[2]: Nothing to be done for `all-am'.
make[2]: Leaving directory `/share/libusb-1.0.9'
make[1]: Leaving directory `/share/libusb-1.0.9'

/* make install的動作主要是編譯出libusb庫並加入到系統資料夾下 */
[[email protected] libusb-1.0.9]# make install
Making install in libusb
make[1]: Entering directory `/share/libusb-1.0.9/libusb'
make[2]: Entering directory `/share/libusb-1.0.9/libusb'
test -z "/usr/local/lib" || /bin/mkdir -p "/usr/local/lib"
 /bin/sh ../libtool   --mode=install /usr/bin/install -c   libusb-1.0.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libusb-1.0.so.0.1.0 /usr/local/lib/libusb-1.0.so.0.1.0
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.so.0.1.0 libusb-1.0.so.0 || { rm -f libusb-1.0.so.0 && ln -s libusb-1.0.so.0.1.0 libusb-1.0.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.so.0.1.0 libusb-1.0.so || { rm -f libusb-1.0.so && ln -s libusb-1.0.so.0.1.0 libusb-1.0.so; }; })
libtool: install: /usr/bin/install -c .libs/libusb-1.0.lai /usr/local/lib/libusb-1.0.la
libtool: install: /usr/bin/install -c .libs/libusb-1.0.a /usr/local/lib/libusb-1.0.a
libtool: install: chmod 644 /usr/local/lib/libusb-1.0.a
libtool: install: ranlib /usr/local/lib/libusb-1.0.a
libtool: finish: PATH="/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/opt/EmbedSky/4.3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib /* 這裡提示已經將庫加入到/usr/local/lib目錄,所以我們基於libusb程式設計的時候,需要包含這個庫 */

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
test -z "/usr/local/include/libusb-1.0" || /bin/mkdir -p "/usr/local/include/libusb-1.0"
 /usr/bin/install -c -m 644 libusb.h '/usr/local/include/libusb-1.0'
make[2]: Leaving directory `/share/libusb-1.0.9/libusb'
make[1]: Leaving directory `/share/libusb-1.0.9/libusb'
Making install in doc
make[1]: Entering directory `/share/libusb-1.0.9/doc'
make[2]: Entering directory `/share/libusb-1.0.9/doc'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/share/libusb-1.0.9/doc'
make[1]: Leaving directory `/share/libusb-1.0.9/doc'
make[1]: Entering directory `/share/libusb-1.0.9'
make[2]: Entering directory `/share/libusb-1.0.9'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/lib/pkgconfig" || /bin/mkdir -p "/usr/local/lib/pkgconfig"
 /usr/bin/install -c -m 644 libusb-1.0.pc '/usr/local/lib/pkgconfig'
make[2]: Leaving directory `/share/libusb-1.0.9'
make[1]: Leaving directory `/share/libusb-1.0.9'

5.原始碼目錄下有example目錄,是libusb提供的測試程式listdev.c (列出usb裝置)

[java] view plain copy  print?
  1. #include <stdio.h>  
  2. #include <sys/types.h>  
  3. #include <libusb.h>  
  4. staticvoid print_devs(libusb_device **devs)  
  5. {  
  6.     libusb_device *dev;  
  7.     int i = 0;  
  8.     while ((dev = devs[i++]) != NULL) {  
  9.         struct libusb_device_descriptor desc;  
  10.         int r = libusb_get_device_descriptor(dev, &desc);  
  11.         if (r < 0) {  
  12.             fprintf(stderr, "failed to get device descriptor");  
  13.             return;  
  14.         }  
  15.         printf("%04x:%04x (bus %d, device %d)\n",  
  16.             desc.idVendor, desc.idProduct,  
  17.             libusb_get_bus_number(dev), libusb_get_device_address(dev));  
  18.     }  
  19. }  
  20. int main(void)  
  21. {  
  22.     libusb_device **devs;  
  23.     int r;  
  24.     ssize_t cnt;  
  25.     r = libusb_init(NULL);  
  26.     if (r < 0)  
  27.         return r;  
  28.     cnt = libusb_get_device_list(NULL, &devs);  
  29.     if (cnt < 0)  
  30.         return (int) cnt;  
  31.     print_devs(devs);  
  32.     libusb_free_device_list(devs, 1);  
  33.     libusb_exit(NULL);  
  34.     return0;  
  35. }  

編譯的時候我們可以用自帶的makefile生成可執行檔案,也可以用如下操作進行:(參考[2])

[[email protected] examples]# gcc -I/usr/local/include/libusb-1.0 listdevs.c -L/usr/local/lib -lusb-1.0

-I包含標頭檔案 ;-L連結庫

6.listdev的執行結果如下:

[[email protected] examples]# gcc -I/usr/local/include/libusb-1.0 listdevs.c -L/usr/local/lib -lusb-1.0
[[email protected] examples]# ./a.out 
1d6b:0002 (bus 1, device 1)
1d6b:0001 (bus 2, device 1)
0e0f:0003 (bus 2, device 2)
0e0f:0002 (bus 2, device 3)
0cf3:1006 (bus 1, device 3)
[[email protected] examples]# lsusb  /* 與lsusb命令得出的是一致 */
Bus 001 Device 003: ID 0cf3:1006 Atheros Communications, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002  
Bus 002 Device 002: ID 0e0f:0003  
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubReference:

7.若想開啟除錯開關,看出libusb內部的執行情況

在libusb/libusbi.h中有如下程式碼

[java] view plain copy  print?
  1. #ifdef ENABLE_DEBUG_LOGGING  
  2. #define usbi_dbg(...) _usbi_log(NULL, LOG_LEVEL_DEBUG, __VA_ARGS__)  
  3. #else
  4. #define usbi_dbg(...) do {} while(0)  
  5. #endif  

所以說在makefile加上-DENABLE_DEBUG_LOGGING=1這個編譯選項即可.

在libusb的目錄下找到makefile(configure之後才會生成),找到CFLAGS = -g -O2,替換為CFLAGS = -g -O2 -DENABLE_DEBUG_LOGGING=1

再次make和make install,切換到之前的listdev程式,可以看見已經打出libusb內部的呼叫順序:

[[email protected] examples]# ./listdevs 
libusb: 0.000000 debug [libusb_init] libusb-1.0.9
libusb: 0.003326 debug [find_usbfs_path] found usbfs at /dev/bus/usb
libusb: 0.004064 debug [op_init] found usb devices in sysfs
libusb: 0.004939 debug [usbi_add_pollfd] add fd 3 events 1
libusb: 0.005519 debug [usbi_io_init] using timerfd for timeouts
libusb: 0.006147 debug [usbi_add_pollfd] add fd 5 events 1
libusb: 0.006710 debug [libusb_init] created default context
libusb: 0.007273 debug [libusb_get_device_list] 
libusb: 0.011264 debug [sysfs_scan_device] scan usb1
libusb: 0.012133 debug [sysfs_scan_device] bus=1 dev=1
libusb: 0.012681 debug [enumerate_device] busnum 1 devaddr 1 session_id 257
libusb: 0.013244 debug [enumerate_device] allocating new device for 1/1 (session 257)
libusb: 0.013956 debug [sysfs_scan_device] scan usb2
libusb: 0.014740 debug [sysfs_scan_device] bus=2 dev=1
libusb: 0.015685 debug [enumerate_device] busnum 2 devaddr 1 session_id 513
libusb: 0.016251 debug [enumerate_device] allocating new device for 2/1 (session 513)
libusb: 0.016984 debug [sysfs_scan_device] scan 2-1
libusb: 0.017761 debug [sysfs_scan_device] bus=2 dev=2
libusb: 0.018467 debug [enumerate_device] busnum 2 devaddr 2 session_id 514
libusb: 0.018988 debug [enumerate_device] allocating new device for 2/2 (session 514)
libusb: 0.019789 debug [sysfs_scan_device] scan 2-2
libusb: 0.020473 debug [sysfs_scan_device] bus=2 dev=3
libusb: 0.021145 debug [enumerate_device] busnum 2 devaddr 3 session_id 515
libusb: 0.021742 debug [enumerate_device] allocating new device for 2/3 (session 515)
libusb: 0.022440 debug [sysfs_scan_device] scan 1-1
libusb: 0.023203 debug [sysfs_scan_device] bus=1 dev=3
libusb: 0.023986 debug [enumerate_device] busnum 1 devaddr 3 session_id 259
libusb: 0.024548 debug [enumerate_device] allocating new device for 1/3 (session 259)
libusb: 0.025266 debug [libusb_get_device_descriptor] 
1d6b:0002 (bus 1, device 1)
libusb: 0.026017 debug [libusb_get_device_descriptor] 
1d6b:0001 (bus 2, device 1)
libusb: 0.026479 debug [libusb_get_device_descriptor] 
0e0f:0003 (bus 2, device 2)
libusb: 0.026516 debug [libusb_get_device_descriptor] 
0e0f:0002 (bus 2, device 3)
libusb: 0.026576 debug [libusb_get_device_descriptor] 
0cf3:1006 (bus 1, device 3)
libusb: 0.026616 debug [libusb_unref_device] destroy device 1.1
libusb: 0.026636 debug [libusb_unref_device] destroy device 2.1
libusb: 0.026652 debug [libusb_unref_device] destroy device 2.2
libusb: 0.026667 debug [libusb_unref_device] destroy device 2.3
libusb: 0.026682 debug [libusb_unref_device] destroy device 1.3
libusb: 0.026698 debug [libusb_exit] 
libusb: 0.026731 debug [libusb_exit] destroying default context
libusb: 0.026747 debug [usbi_remove_pollfd] remove fd 3
libusb: 0.026778 debug [usbi_remove_pollfd] remove fd 5

PS:這裡還有一個問題:

[[email protected] test]# ./a.out 
./a.out: error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file: No such file or directory
[[email protected] test]# /* 執行的時候若出現這個錯誤,只要先執行下面一句話即可 */
[[email protected] test]# export LD_LIBRARY_PATH=/usr/local/lib

相關推薦

ubuntulibusb安裝測試

0.libusb的介紹: 1.環境:vmware下Ubuntu12.04 3.解壓原始碼tar xjvf libusb-1.0.9.tar.bz2 按照INSTALL檔案給出的提示進行安裝:主要分為./configure ->make -> make i

eclipse(1)----ubuntu安裝配置

linux soft 安裝與配置 lips clip 後臺 權限 官網下載 工作 eclipse的安裝與配置 1、eclipse官網下載,最新版本eclipse-jee-oxygen-3-linux-gtk-x86_64.tar.gz 2、tar包存在~/Download/

ubuntupycharm安裝啟用

安裝過程: https://blog.csdn.net/c2366994582/article/details/79146370 修改host方法: https://jingyan.baidu.com/article/f3e34a12c40df6f5eb653580.html 啟用方

轉載:Torch7在Ubuntu安裝配置教程詳解(torch入門使用)

原文;https://www.aliyun.com/jiaocheng/147256.html   摘要:Torch7的本系列教程的主要目的是介紹Torch的入門使用。今天首先分享一下Torch7的安裝。(在Ubuntu14.04安裝torch7)為什麼選擇TorchTo

Mysql 在 linux(ubuntu)安裝遠端登入

伺服器端安裝   安裝伺服器端:在終端中輸入如下命令,回車後,然後按照提示輸入 sudo apt-get install mysql-server 伺服器用於接收客戶端的請求、執行sql語句、管理資料庫 伺服器端一般以服務方式管理,名稱為mysql 啟動服務 s

Ubuntuopencv 安裝刪除配置總結

今天除錯了一天的opencv,學會了OpenCV多版本共存的問題,分享一下經驗 由於專案中用到了OpenCV3.1版本,而電腦上有很早就裝好的opencv2.4.9版本(直接裝在/usr/下),和一個opencv4.0.0(裝在/usr/local/下,不知道什麼時候裝的。。),還有一個ros中

【RabbitMQ】ubuntuRabbitMQ安裝簡單使用

參考連結:1、安裝:https://blog.csdn.net/a295277302/article/details/71246941 https://blog.csdn.net/junzhen_chen/article/details/784593832、使用:https:

ubuntunodejs安裝版本升級

在 Github 上獲取 Node.js 原始碼: $ sudo git clone https://github.com/nodejs/node.gitCloninginto'node'... 修改目錄許可權: $ sudo chmod -R 755 node 進

ubuntuvim安裝配置

vim原始碼安裝 2、出現“YouCompleteMe requires Vim compiled with Python 2.x support”; 3、執行該命令: $ cd vim $ ./configure --enable-pythoninterp --w

git -svn 在ubuntu安裝應用

Git是一款分散式版本管理工具,由linux的締造者Linus Torvalds設計並實現,具體關於Git的介紹和使用方法可參見其官方站。 這裡要說的是Git是如何做到既可以管理好原生代碼又可以與已有的SVN中心庫進行同步的。 1、安裝 git-svn預設包含在Git的安裝

Linux(ubuntu)如何安裝解除安裝軟體總結

剛開始使用Ubuntu的使用者時常有這樣的問題,我要安裝新軟體怎麼辦?.exe檔案在哪裡,怎麼軟體有這麼多格式?RPM包,.tar.gz是什麼?怎麼就是安裝不了啊?等等. 的確,在Windows下安裝檔案只需要雙擊即可,所以很多人在Ubuntu下覺得很不習慣.事實上,使用

Ubuntu12.04moses的安裝測試Ubuntu

12.04 AMD64 運⾏行於VMware fusion 5.0.3 Boost 1.48.0 1.Boost的安裝(可參考官⽅方⺴⽹網站http://www.boost.org)由於Moses編譯需要boost和其他依賴庫⽂檔案,所以需要⾸首先安裝Boost Library.⾸首先需要安裝⼀一些依賴

Ubuntu環境GitHub安裝使用

process 兩種 ted 上傳 config err touch .com cte 安裝git sudo apt-get update sudo apt-get install git 1 2 1 2 配置 你的github git config --glo

UbuntuPython安裝測試 & Geany實現Hello World!

pri images 突出 markdown 應該 打開 sta cnblogs ubunt Python是一種跨平臺的編程語言,能在所有主要操作系統下運行。Linux是為編程而設計的操作系統,因此在大多數裝了ubuntu的計算機應該默認裝了Python。 為了確定是否確實

RabbitMQ在Ubuntu 16.04安裝配置

Linux安裝RabbitMQ 由於rabbitMq需要erlang語言的支持,在安裝rabbitMq之前需要安裝erlang,執行命令: sudo apt-get install erlang-nox安裝rabbitMq命令: 2.$ sudo apt-get update3.$ sudo apt-get

ubantu16.04caffe-cpu版本的安裝測試

首先附上官網的安裝連結:http://caffe.berkeleyvision.org/install_apt.html 環境說明:我的系統版本為  ubantu16.04 ,只使用CPU 一、安裝相關依賴包 sudo apt-get install -y libatlas-b

Ubuntu 16.04Spark安裝開發環境搭建

https://blog.csdn.net/lengconglin/article/details/77847623     一、Spark執行環境     Spark是Scala寫的,執行在JVM上,所以執行環境Java7+,如果使用Python

linux的zookeeper單機模式安裝測試

一:zookeeper的執行前提::     zookeeper是java寫的,執行在jvm上,需要使用JDK1.6或更高的版本,java -version來檢視此伺服器是否安裝java      二:安裝zookeeper

Opencv 2.4.9在Ubuntu的配置安裝

一、依賴包安裝        1.  build-essential 軟體包,為編譯程式提供必需軟體包的列表資訊,這樣軟體包才知道標頭檔案、庫函式在哪裡。還會下載依賴的軟體包,安裝gcc/g++/gdb/make 等基本程式設計工具,最後才組成一個開發環境。 sudo a

LinuxRedis的安裝測試

1、Redis的下載 首先進入Redis官網下載對應的Redis版本 2、 gcc編譯器的安裝 線上安裝命令: yum install gcc-c++ 3、Redis的安裝 下載完成之後進行解壓,安裝 進入到存放Redis壓縮包的