1. 程式人生 > >RTL2832U+R820T電視棒程式交叉編譯在嵌入式中的使用與問題解決

RTL2832U+R820T電視棒程式交叉編譯在嵌入式中的使用與問題解決

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.csdn.net/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、經過上述步驟就能在嵌入式中讀取航班資訊了。