1. 程式人生 > >X210QT移植詳細教程

X210QT移植詳細教程

1、移植前準備

       確認開發板的核心是否有觸控式螢幕驅動,新版的開發板觸控式螢幕晶片是gxl680。

       可以使用cat /proc/bus/input/devices

       可知gslX680對應的裝置檔案是event2,然後用hexdump /dev/input/event2 這樣觸控式螢幕幕的時候,會打印出觸控式螢幕上報的訊息。

2、tslib移植和測試

       首先確保一下軟體已經安裝了

       sudo apt-get install autoconf(或autoconf2.13)

       sudo apt-get install automake

       sudo apt-get install libtool
       在ubuntu中解壓開後,進入到該檔案中執行命令
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
mkdir /opt/tslib
./configure --prefix=/opt/tslib --host=arm-linux --cache-file=arm-linux.cache
make
make install
       之後就可以在opt/tslib資料夾下看到這是四個檔案了。                        

3、部署

       將需要用到的庫檔案、配置檔案、bin檔案拷貝到開發板的根檔案系統中。將剛剛生成的tslib資料夾拷貝到開發板的根檔案系統中。

                        

       然後在開發板的檔案系統中的etc/profile中新增

export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_CALIBFILE=/tslib/etc/pointercal
export TSLIB_CONFFILE=/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib/lib
export TS_INFO_FILE=/sys/class/input/input2/uevent

       之後重啟,進入tslib/bin目錄下執行./ts_calibrate會報錯

                                

       在tslib中的etc資料夾下的ts.conf檔案中修改,開啟module_raw input選項。

                                

       修改完之後再次執行,會出現錯誤,這裡網上找下資料就可以解決了。

        https://blog.csdn.net/liuzijiang1123/article/details/45787901
                                

       這裡我直接修改核心的include/linux/input.h檔案將EV_VERSION修改回0x10000;

                  

       這樣基本完成tslib的移植。

4、安裝QT

       在http://ffmpeg.club/qt_download.html中,使用百度雲下載,檔案大小700M,要提前下,要不然最近百度網盤速度不咋地,得等好一陣子。

                                        

       下載完之後,放在ubuntu中,在終端直接./qt-opensource-linux-x64-5.8.0.run。

       記住!安裝的時候,選項Sources一定要勾起來!!!這樣才能得到原始碼。

                            

       最後這裡由於我的開發板的編譯鏈太老舊了,編譯5.8的編譯不過去,所以只能使用5.6.2的原始碼編譯庫檔案來給開發板使用。

5、qmake配置

       安裝完成後,需要對Qt進行qmake的配置

       配置原始碼資料夾下的qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf                       

       在qmake.conf中新增

QT_QPA_DEFAULT_PLATFORM = linuxfb	//使用非視窗配置
QMAKE_CFLAGS_RELEASE   += -O2  -march=armv7-a   	//armv7架構
QMAKE_CXXFLAGS_RELEASE += -O2  -march=armv7-a
       然後將QMAKE_CC QMAKE_CXX QMAKE_LINK QMAKE_LINK_SHLIB修改成我們自己的交叉編譯工具鏈。
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
                                

6、編譯前配置

       首先在ubuntu中的opt資料夾下建立QT5.6.2資料夾。

       其中:prefix /opt/QT5.6.2代表安裝路徑。-opensource代表配置成開源版本 -shared表示配置成共享庫。 -c++std c++98代表編譯時候用的標準。-xplatform linux-arm-gnueabi-g++表示之前qt原始碼目錄中的qtbase/mkspecs/linux-arm-gnueabi-g++資料夾。
./configure  -prefix /opt/QT5.6.2 -opensource -confirm-license -release -shared -accessibility \
-c++std c++98 \
-xplatform linux-arm-gnueabi-g++ \
-qpa linuxfb -linuxfb \
-qreal float -pch \
-qt-zlib -qt-libjpeg -qt-libpng \
-no-sse2 -no-largefile -no-qml-debug -no-glib -no-gtkstyle -no-opengl -nomake tools -nomake examples -tslib \
-skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
 -I /opt/tslib/include -L /opt/tslib/lib

7、解決make中的錯誤

       (1)找不到dlopen或者dlsym

       在編譯器後面加ldl arm-linux-g++ -ldl                    

       (2)undefined reference to `__sync_add_and_fetch_4'

       將交叉編譯鏈原始碼中的linux-atomic.c檔案拿出來,然後按照下面步驟進行編譯。

       首先安裝好libtool工具

       apt-get install libtool

       然後將linux-atomic.c檔案進行加工,生成我們需要的linux-atomic.a檔案。

libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c 
libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo

       利用libtool生成liblinux-atomic.a,注意生成的目錄名叫.libs所以是隱藏的。

     最後將liblinux-atomic.a放在隨便一個資料夾中,將來在makefile中連結它即可,這裡我們將它放在opt/linux-atomic。

       在QT原始碼下修改:./qtscript/src/script/Makefile

       在LIBS  = 的結尾新增 -L/opt/linux-atomic -llinux-atomic                                            
                             

       make完成之後,再執行make install 將我們需要的庫檔案就會放在之前opt/Qt5.6.2/資料夾下。