一、將QT移植到X210上,讓X210開發板能夠運行QT東西,須要幾個東西。tslib QT源碼編譯後的lib庫等linux
(1)tslib移植:web
@1:下載tslib,官方上下就能夠。sql
@2:解壓。好比解壓到了/root/xin_210/下架構
@3:選擇固定的交叉編譯工具連,內核,tslib,QT源碼都要用這一個編譯,我用的是arm-2009q3.這個工具鏈中的arm-none-linux-gnueabi/libc/usr/include/linux/input.h中的EV_VERSION宏的的值要和內核ide
中的include/linux/input.h中的EV_VERSION宏的值同樣,同時,這個宏的值也要和tslib中的/plugins/input-raw.c中的svg
if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&工具
(version == EV_VERSION) &&ui
(ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&spa
(bit & (1 << EV_ABS)) &&nuxt
(ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
(absbit & (1 << ABS_X)) &&
(absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {
//debug
printf("EV_VERSION=%p\n", EV_VERSION);//0x10000
printf("version=%p\n", version); //0x10001
printf("bit & (1 << EV_ABS)=%d\n", (bit & (1 << EV_ABS))); //0
printf("absbit & (1 << ABS_X)=%d\n", (absbit & (1 << ABS_X))); //82344
printf("absbit & (1 << ABS_Y)=%d\n", (absbit & (1 << ABS_Y))); //82344
printf("absbit & (1 << ABS_PRESSURE)=%d\n",(absbit & (1 << ABS_PRESSURE))); //-33272
fprintf(stderr, "selected device is not a touchscreen I understand\n");
return -1;
}
version值同樣。就是說,內核中的版本宏和所使用的交叉編譯工具鏈的版本宏要和tslib中的版本宏同樣,不然tslib會說找不到觸摸屏
@4: 在解壓的tslib中,執行./autogen.sh
@5: 以後在執行
./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi --prefix=/root/rootfs/rootfs/opt/jiuding_tslib ac_cv_func_malloc_0_nonnull=yes
prefix指定的是你的tslib:在make後,make install時的安裝目錄
@6:執行 make install,以後tslib就會安裝在你的指定目錄下。裏面有bin lib include etc四個文件夾
@7:進行到安裝後的tslib的etc目錄下,打開ts.conf文件。修改內容以下
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
保存退出
@8:將bin lib include etc 四個文件所有弄到你的開發板要用的文件系統中。哪一個目錄下都行,個人是在文件系統的/opt/jiuding_tslib/目錄下
@9:nfs啓動根文件系統,運行./ts_calxxx什麼的那個,點擊十字架後就會獲得你要的pionterxx什麼的觸摸屏檢驗的信息文件,會在tslib的etc目錄中出現。
@10:若是是一路下來的,就不會有錯誤。至此tslib移植成功
(2)QT源碼移植
@1:下載 qt-everywhere-opensource-src-4.7.4.tar.gz, 這個QT源碼壓縮包,
@2:這裏我當你的 qt creator已經安裝在了你的Linux環境下,個人是Ubuntu。
@3:將下載下來的QT源碼進行解壓。我解壓在了 /QT/QT_ARM/目錄下。並確保你的交叉編譯工具鏈已經導入到了環境變量中。
@4:解壓後,進入qt-everywhere-opensource-src-4.7.4/mkspecs/qws/linux-arm-g++/目錄下,打開qmake.conf文件。修改內容以下
#
# qmake configuration for building with arm-linux-g++
#
include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-strip<font face="黑體"></font>
load(qt_config)
修改後保存退出。
@5:進行配置,執行以下
sudo ./configure --prefix=/usr/local/qt4.8.5-arm -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -no-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demos -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/root/rootfs/rootfs/opt/jiuding_tslib/include -L/root/rootfs/rootfs/opt/jiuding_tslib/lib -confirm-license
prefix=是未來編譯QT源碼後,安裝QT時所在的目錄。-I後面的是你的tslib所在的頭文件路徑。-L後面是tslib所在的lib路徑。
@6:make 編譯。若是缺乏什麼東西,須要本身去網上搜,所有安裝下。否則編譯會有很大的問題。前面的tslib也是。
@7:我在make 時,最後出現了libhelpso unreference什麼的問題,最後並非徹底的編譯經過 ,可是我實在找不到緣由了,就直接make install了,竟然成功了
@8:make install 後,QT就安裝在了你的指定目錄下了。
@8:開發板上須要的是你QT安裝目錄下的lib中的庫文件。爲了防止將這個lib文件夾直接複製到文件系統中後會有符號連接等不正常的問題,咱們能夠將這個
lib文件夾進行打包,而後複製到文件系統中合適的路徑下,進行解壓,最後是在和你的QT安裝路徑同樣的對應到文件系統中。避免後面有可能的錯誤。
@9:進入到文件系統中,將這個lib進行解壓。而後建立一個sh腳本,或者是在/etc/profile中進行環境變量的設置,內容以下
export TSLIB_TSEVENTTYPE=INPUT
export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH
export QTDIR=/usr/local/qt4.8.5-arm
export T_ROOT=/opt/jiuding_tslib
export PATH=$T_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_CALIBFILE=/opt/jiuding_tslib/etc/pointercal
#export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/input/event2
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_SIZE=1024x600
個人觸摸屏是event2,你的若是你不知道,你能夠cat去看event,並觸摸觸摸屏,看哪一個是你的觸摸屏設備文件
運行這個腳本,或者設置在文件系統的profile中後關機機重啓
@10: 在Linux下的 qt creator中寫QT程序,選定好你用的交叉編譯工具鏈,選定好的QT版本(就是你安裝的QT目錄下的bin文件中的qmake文件)
@11:編寫好QT程序,能夠先stat 這個可執行程序,看下是否是arm架構的,是就能夠複製到文件系統中了,運行這個程序了,可是要注意
運行這個程序時,後面要加上 -qws
@12:結束,其餘錯誤的地方,能夠去網上進行一步看
而後啓動開發板,nfs掛載根文件系統。