1、交叉编译libusb
1)下载源码libusb-1.0.22.tar.bz2
2)解压:tar -jxvf libusb-1.0.22.tar.bz2
3)进入目录cd libusb-1.0.22,生成待安装的目录mkdir install(交叉编译好的库文件将放在此目录下)
4)./configure --build=i686-linux --host=arm-linux
–prefix=/home/xfc/usb/install CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ --disable-udev
不加–disable-udev会出现configure:error:“udev support requested but libudev not installed”
(–build=i686-linux表示该软件在x86平台被编辑,–host=arm-linux表示该软件编译完成后在arm平台上运行,–prefix=给出要存放此库文件的目录,必须给出绝对路径名,–disable-udev必须有,否则就需要安装libudev)、
5)执行make&&make install,后可以在prefix指定的目录中看到编译好的库及相应的头文件。
2、交叉编译rtl-sdr
1)下载源码git clone git://git.osmocom.org/rtl-sdr.git
2)更改CMakeLists.txt,添加如下,指明程序运行平台以及编译所用的交叉编译器
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER “arm-linux-gnueabi-gcc”)
SET(CMAKE_CXX_COMPILER “arm-linux-gnueabi-g++”)
3)编译,编译方法参照,编译完成后在build/src目录下出现librtlsdr.a
https://blog.youkuaiyun.com/ma_cheng_yuan/article/details/83652068
3、交叉编译dump1090
1)下载源码git clone https://github.com/antirez/dump1090.git
2)更改makefile,用上述编译生成的librtlsdr.a,libusb-1.0.a静态编译
INCLUDE = /home/test/rtl2832u/dianshibang/rtl-sdr/include
all: dump1090
%.o: %.c
arm-linux-gnueabi-gcc -c $< -I $(INCLUDE) -static ./librtlsdr.a ./libusb-1.0.a -lm -lpthread
dump1090: dump1090.o anet.o
arm-linux-gnueabi-gcc -g -o dump1090 dump1090.o anet.o -static ./librtlsdr.a ./libusb-1.0.a -lm -I $(INCLUDE) -lpthread
clean:
rm -f *.o dump1090
4、编译完成之后放到嵌入式中执行,出现如下错误
1)/lib/libc.so.6: version `GLIBC_2.17’ not found (required by /lib/libusb-1.0.so.0)
原因:libc的版本太低,换了一个文件系统,原来的文件系统是直接在xilinx官网上之间下载的,后在xilinx关于qemu配置的wiki中下载了新的文件系统,此文件系统中libc的版本为2.19
2)程序成功运行之后不能搜到航班信息
原因:interactiveShowData函数中
while(a && count < Modes.interactive_rows),两个条件成立才能打印航班信息,打印了 Modes.interactive_rows为0,。
在main中的void modesInitConfig(void) 中
Modes.interactive_rows = MODES_INTERACTIVE_ROWS;//此时为15
Modes.interactive_rows = getTermRows();//变成了0
getTermRows中
ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) //获得终端配置
ws_row; // 窗口字符行数
只需将Modes.interactive_rows = getTermRows();注释掉即可
5、经过上述步骤就能在嵌入式中读取航班信息了。