5.8 的移植


本來沒想弄那么高的版本,一般嵌入式設備都是追求穩定並不是高版本,一般情況都是QT都是4.8版本的。但是之前群里面有小伙伴竟然不會弄,我就開始了交叉編譯之路。猛然發現還是蠻痛苦的,用時5天,版子成功運行。目前發現了1個問題我處理不了,就是隱藏鼠標指針。弄的明白的回復一下吧,求小伙伴們幫忙吧!授之以魚不如授之以漁,特別具體的流程請自行體會吧。

一 )准備工具。

1)QT 源碼 

下載地址: http://download.qt.io/official_releases/qt/

選擇QT版本

2)交叉編譯工具鏈。

工具鏈的版本很多,根據命名規則有分有很多架構種類。

這里有一篇簡單介紹各種工具鏈博客:http://www.veryarm.com/296.html

由於我的公司的硬件架構原因我選擇了 arm-Linux-gnueabihf-gcc

其他的編譯鏈我也沒有,我就把這個工具鏈的下載地址也發一下吧!

工具鏈下載地址:https://releases.linaro.org/components/toolchain/binaries/

版本,我選擇了4.9版本的。

這2個文件之后都會用得到。

3)linux 32系統 我用的是烏班圖17.04的

問題 1 .這里使用64位系統,去編譯QT會報錯。

arm-none-linux-gnueabihf-gcc:No such file or directory

原因是交叉編譯工具鏈缺少32位庫文件安裝一下這個文件就好。建議使用32位系統就好。

 

 具體命令:sudo apt-get install lib32z1 lib32stdc++6

4)觸摸屏支持的tslib

具體就是配置一下編譯器和輸出位置 這個錯誤還是比較少基本一次就過。

注意:配置完后要注意第一次執行make 是生成各種可執行程序和庫文件,還要執行一次make install 將編譯生成的才產物輸出到你剛剛配置的輸出路徑。

不會的小伙伴再來個比較詳細的博客:http://blog.csdn.net/liuqiqi677/article/details/6315565

交叉編譯工具鏈 = 工具鏈

二)搭建編譯環境。

1)交叉編譯鏈環境變量配置具體做法,請百度搜索“交叉編譯環境搭建”。

問題 2 .我這里出現一個問題就是工具鏈我放在用戶目錄下了,每當我重新開啟一個終端的時候環境變量就會被刷掉,工具鏈一定要放在根目錄的文件夾下面。注意一定是根目錄。

2)配置QT源碼。

1.修改源碼包目錄下的/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf文件 將編譯器換成剛剛配置成功的工具鏈

# modifications to g++.conf

QMAKE_CC               = arm-linux-gnueabihf-gcc

QMAKE_CXX                   = arm-linux-gnueabihf-g++

QMAKE_LINK             = arm-linux-gnueabihf-g++

QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

# modifications to linux.conf

QMAKE_AR                        = arm-linux-gnueabihf-ar cqs

QMAKE_OBJCOPY            = arm-linux-gnueabihf-objcopy

QMAKE_NM               = arm-linux-gnueabihf-nm -P

QMAKE_STRIP                 = arm-linux-gnueabihf-strip

load(qt_config)

2.退回源碼目錄的根目錄下執行腳本 ./configure  -help 查看具體配置選項文檔。
英文不太好的小伙本給你們來個福利博客
 
在當前目錄下面創建腳本,根據剛剛查看的配置文檔配置自己的
伸手黨腳本內容:

./configure \

- extprefix /home/agoulinux/qt5.8_arm  \   很多博客都是用prefix參數可是我使用這個參數並沒用輸出東西

-release \

-make libs \

-xplatform  linux-arm-gnueabi-g++ \

-optimized-qmake \

-pch \

-qt-sql-sqlite \

-qt-libjpeg \

-qt-libpng \
-tslib \

-qt-zlib \

-no-opengl \

-no-sse2 \

-no-openssl \

-no-nis \

-no-cups \

-no-glib \

-no-iconv  \   加上這個參數吧 ,我編譯后運行程序會報錯提示iconv_openfailed  或者在添加庫,這個東西沒用

-no-separate-debug-info \

-nomake examples-nomake tools \

-no-pkg-config \

-I/home/agoulinux/tslib1.4/include  \     tslib的make install輸出目錄。

-L/home/agoulinux/tslib1.4/lib            

3 )配置成功 可是編譯 執行 make   公司電腦用了大概半個多小時編譯完成 ,然后make install 輸出產物。

到這里基本上完成所有需要的東西。開發板如果不實用QML 的話只需要上面紅色框出來的文件夾,其他的可以裁剪掉。其實里面很多東西都可以裁剪掉的,

我嫌麻煩,就都復制了。(這個目錄不要動一會還要使用  復制一直份進行裁剪)

三)配置根嵌入式設備的文件系統。

1.將剛剛生成的tslib1.4和qt5.8_arm(裁剪過后的) 目錄,復制到文件系統的/opt 下

2.配置嵌入式系統的環境變量/etc/profile中

(1).查閱文檔配置tslib的環境變量。在源碼目錄中找到Readme有一欄 (源碼:https://github.com/kergoth/tslib

environment variables

(2).查閱文檔配置QT環境變量

配置文檔:http://doc.qt.io/qt-5/embedded-linux.html

好吧小伙伴們英文不好來個翻譯過的文檔博客(翻譯的不太好,能看):http://blog.csdn.net/chongzi865458/article/details/54406865

 

(3).伸手黨的環境變量配置:

export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt5.8_arm
export TSLIB_TSDEVICE=/dev/input/event0
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:rotate=180:invertx and inverty #這個是觸摸屏幕的旋轉,和顛倒
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0
export QT_QPA_FB_TSLIB=1
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/fonts
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
export QT_QPA_FB_HIDECURSOR=1  #說好的隱藏呢

前期的工作都做完了我們要開始第做一個QT程序讓他跑起來吧,激動人心的第四步開始了。

四)配置QtCreator IDE,完成QT程序並運行。
1).下載QtCreator :http://download.qt.io/official_releases/qtcreator/ 

看你喜歡的並且和你虛擬機的位數匹配的run文件就好,復制到烏班圖 直接執行就好。

2).配置QtCreator 如圖:編輯器選擇我們的工具鏈中的gcc

配置QMAKE 選擇我們剛剛編譯出來的QMAKE

配置kit套件

3).創建項目 。

4).重點來了 。這里我編譯會報錯因為編譯參數問題,一開始不知道怎么修改qmake參數,配個圖給各位小伙伴

伸手黨的參數:-spec linux-arm-gnueabi-g++

 

5).將編譯輸出可執行文件復制到你的嵌入式系統當中 

6)寫一個腳本進行觸摸屏的校准和執行我們的程序

伸手黨的腳本:

if [ -f $TSLIB_ROOT/etc/pointercal ] ; then
        if [ ! -s $TSLIB_ROOT/etc/pointercal ] ; then
                rm $TSLIB_ROOT/etc/pointercal
                $TSLIB_ROOT/bin/ts_calibrate
        fi
else
        $TSLIB_ROOT/bin/ts_calibrate
fi

chmod +x handset #你的應用程序
./handset &

7)運行腳本,我覺得你運行后會提示各種庫文件丟失,或者glibc版本不對,沒關系還記我們下載工具鏈的時候那個圖的2號箭頭不,下載下來

將這個lib裁剪后替換你自己嵌入式系統lib文件

伸手黨可以看下我的庫文件裁剪的:

 

[root@buildroot /lib]# ls -l
total 27376
-rwxr-xr-x    1 root     root        724360 May 20 03:43 ld-2.19-2014.08-1-Git.so*
-rwxr-xr-x    1 root     root        724360 May 20 03:43 ld-linux-armhf.so.3*
-rwxr-xr-x    1 root     root       8802523 May 20 03:43 libc.so.6*
-rwxr-xr-x    1 root     root        155170 May 20 03:43 libcrypt-2.19-2014.08-1-git.so*
-rwxr-xr-x    1 root     root        155170 May 20 03:43 libcrypt.so.1*
-rwxr-xr-x    1 root     root         90509 May 20 03:43 libdl.so.2*
-rw-r--r--    1 root     root           132 May 20 03:43 libgcc_s.so
-rw-r--r--    1 root     root       1494029 May 20 03:43 libgcc_s.so.1
-rwxr-xr-x    1 root     root       1510961 May 20 03:43 libm.so.6*
-rwxr-xr-x    1 root     root        505104 May 20 03:43 libnsl.so.1*
-rwxr-xr-x    1 root     root         80433 May 20 03:43 libnss_dns.so.2*
-rwxr-xr-x    1 root     root        214424 May 20 03:43 libnss_files.so.2*
-rwxr-xr-x    1 root     root        855293 May 20 03:43 libpthread.so.0*
-rwxr-xr-x    1 root     root        307548 May 20 03:43 libresolv.so.2*
-rwxr-xr-x    1 root     root        172465 May 20 03:43 librt.so.1*
-rwxr-xr-x    1 root     root       5475009 May 20 03:43 libstdc++.so*
-rwxr-xr-x    1 root     root       5475009 May 20 03:43 libstdc++.so.6*
-rwxr-xr-x    1 root     root        198041 May 20 03:43 libthread_db.so.1*
-rwxr-xr-x    1 root     root       1023306 May 20 03:43 libubsan.so.0*
-rwxr-xr-x    1 root     root         30613 May 20 03:43 libutil.so.1*

 

在次運行完美哈哈:

唯一鬧心的問題就是 :

export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0

將觸摸屏的點擊事件配置成qt的鼠標點擊事件以后會有一個光標,

export QT_QPA_FB_HIDECURSOR=1  #說好的隱藏呢 反正我是隱藏不掉。

求解吧!有知道問題的小伙伴給我回復!我也不用QT5.8嘿嘿 ,重要的事情3變 我不用5.8  我不用5.8  我不用5.8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM