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./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-atomicmake完成之後,再執行make install 將我們需要的庫檔案就會放在之前opt/Qt5.6.2/資料夾下。