因为工作需要在海思设备上交叉编译usbip,但是设备不是Ubuntu这样的操作系统,而是类似buildroot(不确定),需要自己交叉编译可执行程序和动态库。
一、准备交叉编译工具链,并验证
tar -xf aarch64-mix410-linux.tar.bz2
vim ~/.bashrc
export PATH=$PATH:/home/test/tools/aarch64-mix410-linux/bin
source ~/.bashrc
验证交叉编译工具链,避免一些出错无法定位,尤其时HOST本身的Ubuntu系统的gcc与交叉编译工具链有较大差异时。
h64-mix410-linux-gcc -c main.c -o main.o -Wall -g -O0 -lpthread -L. -I.
/home/test/tools/aarch64-mix410-linux/host_bin/../libexec/gcc/aarch64-linux-gnu/10.3.0/cc1: error while loading shared libraries: libisl.so.19: cannot open shared object file: No such file or directory
make: *** [Makefile:26: main.o] Error 1
test@T450:~/linux_application/vocation$ sudo ln -s /usr/lib/x86_64-linux-gnu/libisl.so.23.1.0 /usr/lib/x86_64-linux-gnu/libisl.so.19
[sudo] password for test:
test@T450:~/linux_application/vocation$ make clean;make
rm -f vocation.elf main.o vocation.o
aarch64-mix410-linux-gcc -c main.c -o main.o -Wall -g -O0 -lpthread -L. -I.
aarch64-mix410-linux-gcc -c vocation.c -o vocation.o -Wall -g -O0 -lpthread -L. -I.
aarch64-mix410-linux-gcc -o vocation.elf main.o vocation.o -Wall -g -O0 -lpthread -L. -I.
二、交叉编译eudev源代码
tar -xf eudev-3.2.9.tar.gz
mkdir _build
./configure --host=aarch64-mix410-linux --prefix=$PWD/_build
make install
udev库验证
aarch64-mix410-linux-gcc -o monitor_udisk.elf main.o monitor_udisk.o -Wall -g -O0 -ludev -L. -I.
三、交叉编译usbip源代码
./autogen.sh
./configure --host=aarch64-mix210-linux --prefix=$PWD/_build
make
make install
将_build下的所有文件拷贝到目标环境比如,/usb/lib。拷贝到这里可以不设置LD_LIBRARY_APTH
usbip功能验证
usbip
usage: usbip [--debug] [--log] [--tcp-port PORT] [version]
[help] <command> <args>
attach Attach a remote USB device
detach Detach a remote USB device
list List exportable or local USB devices
bind Bind device to usbip-host.ko
unbind Unbind device from usbip-host.ko
port Show imported USB devices
问题1:交叉编译eudev源代码正常,但是使用交叉编译其他源代码时出现如下错误:--注意configure或者make的错误信息
aarch64-mix410-linux-gcc -c main.c -o main.o -Wall -g -O0 -ludev -L. -I.
aarch64-mix410-linux-gcc -c monitor_udisk.c -o monitor_udisk.o -Wall -g -O0 -ludev -L. -I.
aarch64-mix410-linux-gcc -o monitor_udisk.elf main.o monitor_udisk.o -Wall -g -O0 -ludev -L. -I.
/home/test/aarch64-mix410-linux/host_bin/../lib/gcc/aarch64-linux-gnu/10.3.0/../../../../aarch64-linux-gnu/bin/ld: skipping incompatible /home/test/aarch64-mix410-linux/host_bin/../target/usr/lib/libudev.so when searching for -ludev
/home/test/aarch64-mix410-linux/host_bin/../lib/gcc/aarch64-linux-gnu/10.3.0/../../../../aarch64-linux-gnu/bin/ld: skipping incompatible /home/test/aarch64-mix410-linux/host_bin/../target/usr/lib/libudev.a when searching for -ludev
/home/test/aarch64-mix410-linux/host_bin/../lib/gcc/aarch64-linux-gnu/10.3.0/../../../../aarch64-linux-gnu/bin/ld: skipping incompatible /home/test/aarch64-mix410-linux/host_bin/../target/usr/lib/libudev.so when searching for -ludev
/home/test/aarch64-mix410-linux/host_bin/../lib/gcc/aarch64-linux-gnu/10.3.0/../../../../aarch64-linux-gnu/bin/ld: skipping incompatible /home/test/aarch64-mix410-linux/host_bin/../target/usr/lib/libudev.a when searching for -ludev
/home/test/aarch64-mix410-linux/host_bin/../lib/gcc/aarch64-linux-gnu/10.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find -ludev
collect2: error: ld returned 1 exit status
make: *** [Makefile:22: monitor_udisk.elf] Error 1
原因:编译eudev使用gcc,而没有使用aarch64-mix410-linux-gcc
./configure --host=aarch64-mix410-linux --prefix=/home/test/aarch64-mix410-linux/target/usr
checking for aarch64-mix410-linux-gcc... no
checking for gcc... gcc
问题2:交叉编译eudev源代码configure时出现如下错误:----验证交叉编译工具是否可用,可解决此问题
checking whether the C compiler works... no
/usr/lib/x86_64-linux-gnu/libisl.so.19 -> /usr/lib/x86_64-linux-gnu/libisl.so.23.1.0
四、补充
626和927自动编译源代码,见附件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。