2021-05-12 14:32:11
usb_modeswitch移植詳解
usb_modeswitch移植
- 交叉工具鏈安裝
- 交叉編譯安裝libsub庫
- 交叉編譯安裝lib-compat-x.x.x
- 交叉編譯安裝usb_modeswitch
交叉編譯工具鏈
為了使編譯的程式可以在嵌入式開發板上執行,需要使用交叉編譯鏈進行編譯。交叉工具鏈可以直接下載二進位制來用,下載linaro-arm-linux-gnueabihf。交叉工具鏈放在“~/BBB/toolchain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf”的地方,將arm-linux-gnueabihf-gcc所在目錄加入環境變數,即可直接使用arm-linux-gnueabihf-gcc進行交叉編譯。交叉編譯鏈設定成功後,可以用 “arm-linux-gnueabihf-gcc -v” 命令檢視交叉編譯工具的資訊。
$ arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/gexin/BBB/toolchain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/6.2.1/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/snapshots/gcc-linaro-6.2-2016.11/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libstdcxx-pch --disable-libmudflap --with-cloog=no --with-ppl=no --with-isl=no --disable-nls --enable-c99 --enable-gnu-indirect-function --disable-multilib --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --enable-multiarch --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf --enable-lto --enable-linker-build-id --enable-long-long --enable-shared --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran,lto --enable-checking=release --disable-bootstrap --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11)
下載軟體原始碼
-
mkdir USB-4G && cd USB-4G 建立資料夾並進入
-
下載libusb-1.0.21 ,並解壓 tar jvxf libusb-1.0.21.tar.bz2
-
下載libusb-compat-0.1.5,並解壓tar jvxf libusb-compat-0.1.5.tar.bz2
-
下載usb_modeswitch-2.5.1, 並解壓tar jvxf usb-modeswitch-2.5.1.tar.bz2
libusb交叉編譯
-
進入解壓的包, cd ./libusb-1.0.21
-
設定Makefile檔案,使用./configure工具,可以使用./configure -h 檢視該工具支援的選項。--prefix選項表示安裝工具的位置,將工具都安裝在“/home/username/USB-4G/install”的位置。
./configure
--build = arm-linux
--host = arm-linux-gnueabihf --prefix=/home/username/USB-4G/install
--disable-shared
--enable-static --disable-udev
-
編譯 make
-
安裝 make install,安裝完畢後在目錄/home/username/USB-4G/install中可以看到多了lib和include兩個資料夾。
libusb-compat
-
進入解壓目錄, cd libusb-compat-0.1.5
-
設定Makefile檔案,./configure工具。libusb-compat的安裝依賴於libusb的庫,而我們是將libusb安裝在了自定義位置,因此在configure之前需要設定兩個環境變數。
$ export LIBUSB_1_0_LIBS=/home/gexin/USB-4G/install/lib
$ export LIBUSB_1_0_CFLAGS = /home/gexin/USB-4G/install/
./configure
--build=arm-linux
--host=arm-linux-gnueabihf
--prefix=/home/gexin/USB-4G/install
--disable-shared
--enable-static --disable-udev
-
make
-
make install
usb-modeswitch
-
進入解壓目錄,cd usb-modeswitch-2.5.1
-
該資料夾沒有提供,./configure工具,因此需要我們自己手動對Makefile檔案進行修改。以下幾項需要修改。
CC = arm-linux-gnueabihf-gcc 使用交叉編譯工具
INCLUDEDIR = /home/gexin/USB-4G/install/include 包含目錄
LDFLAGS = /home/gexin/USB-4G/install/libc 庫連線目錄
下面這一行是編譯命令,新增-I、-L選項
$(CC) -o $(PROG) $(OBJS) $(CFLAGS) $(LIBS) -I $(INCLUDEDIR) -L $(LDFLAGS) -static -pthread
- 下面可以通過make編譯檔案,但是在編譯之前,需要修改一個環境變數。
$ export PKG_CONFIG_PATH=/home/gexin/USB-4G/install/lib/pkgconfig // 修改環境變數
$ make // 編譯
arm-linux-gnueabihf-gcc -o usb_modeswitch usb_modeswitch.c -Wall `pkg-config --libs --cflags libusb-1.0` -I /home/gexin/USB-4G/install/include -L /home/gexin/USB-4G/install/lib -static -pthread
sed 's_!/usr/bin/tclsh_!'"/usr/bin/tclsh"'_' < usb_modeswitch.tcl > usb_modeswitch_dispatcher
$ sudo make install // 安裝
安裝之後,在當前資料夾下的usb-modeswitch可執行檔案可以移植到目標板上的。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-12/149734.htm
相關文章