NUC977 linux和QT環境搭建

暈--- 又要開始做linux開發了。又得搭建開發環境了。。新塘給的資料還不錯,看着手冊就可以。 博客做個流水記錄。

搭建基本開發環境

1.下載ubuntu-16.04.5-desktop-i386.iso 最好選擇這個版本,最好是i386的版本。因爲我就是選的這個。。:)

2. 安裝vmware  

3.虛擬機安裝ubuntu。。很簡單都是自動安裝的。。第一次安裝完以後,重新啓動下,VMware tools就可以使用了。然後配置共享文件就可以。

安裝一些包:

sudo apt install vim
sudo apt install u-boot-tool
sudo apt install ssh
sudo apt install git
sudo apt libc6-dev
sudo apt libncurses5-dev

4.把官方提供的BSP包拷貝到linux中。

uzip nuc970bsp-release-20170901.zip 
cd nuc970bsp-release-20170901\BSP
tar -xvf nuc970bsp.tar.gz
cd nuc970bsp
sudo ./install.sh

提示安裝路徑的時候就寫/home/myname

提示從git更新還是本地,就選擇本地.   選git從來沒有成功過。

安裝完成後 就會在你的用戶目錄下發現nuc970bsp目錄,裏面有你所有的想要的東西

5. 添加環境變量:

sudo apt install vim
sudo vim /etc/profile

最後一行加入環境變量:

export CROSS_COMPILE=arm-linux-
export PATH=$PATH:/usr/local/arm_linux_4.8/bin

刷新下環境變量

source /etc/profile

嘗試編譯下內核:

cd linux-3.10.x
make nuc977_defconfig
make
make uImage

編譯完成不出問題的話,就沒有問題了。 

不過我編譯uboot出錯了,暫時不用uboot就先不管了。

編譯QT -動態庫

參考博客地址: https://blog.csdn.net/wllinux12138/article/details/84865454   完全就是按着這篇博客做的。感謝作者。

1. 編譯安裝tslib

#創建安裝目錄
sudo mkdir /opt/tslib
sudo chmod 777 /opt/tslib

#配置
cd /home/qian/nuc977BSP/nuc970bsp/applications/tslib-1.1
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
./configure --prefix=/opt/tslib --host=arm-linux --cache-file=arm-linux.cache

#編譯安裝
make
make install

2.編譯QT

#創建安裝目錄
sudo mkdir /opt/qt
sudo chmod 777 /opt/qt

#修改配置文件
cd /home/qian/nuc977BSP/nuc970bsp/applications/qt-everywhere-opensource-src-4.8.5
vim mkspecs/qws/linux-nuc970-g++/qmake.conf


---------------------------------------------------------------------------
#修改如下--對比下修改標記的部分
#
# qmake configuration for building with arm-linux-g++
#
 
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
 
# modifications to g++.conf
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
 
# modifications to linux.conf
QMAKE_AR                = arm-linux-ar cqs
QMAKE_OBJCOPY           = arm-linux-objcopy
QMAKE_STRIP             = arm-linux-strip 
 
# Support static build.  注意這裏
#QMAKE_LFLAGS            = -static
 
# Reduce code size.
QMAKE_CFLAGS_RELEASE    = -Os
QMAKE_CXXFLAGS_RELEASE  = -Os
 
# Include/library path for tslib  這裏修改這裏
QMAKE_INCDIR            = /opt/tslib/include
QMAKE_LIBDIR            = /opt/tslib/lib
 
load(qt_config)

編譯配置

./configure -force-pkg-config \
-prefix /opt/qt \
-release \
-opensource \
-shared \
-qconfig dist \
-no-exceptions \
-no-accessibility \
-no-stl \
-no-qt3support \
-no-xmlpatterns \
-no-multimedia \
-no-audio-backend \
-no-phonon \
-no-phonon-backend \
-no-svg \
-no-webkit \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-declarative \
-no-declarative-debug \
-qt-zlib \
-qt-freetype \
-no-gif \
-qt-libpng \
-no-libmng \
-no-libtiff \
-qt-libjpeg \
-no-openssl \
-nomake tools \
-nomake demos \
-nomake examples \
-nomake docs \
-nomake translations \
-no-nis \
-no-cups \
-no-iconv \
-no-pch \
-no-dbus \
-embedded arm \
-platform qws/linux-x86-g++ \
-xplatform qws/linux-nuc970-g++ \
-no-gtkstyle \
-no-nas-sound \
-no-opengl \
-no-openvg \
-no-sm \
-no-xshape \
-no-xvideo \
-no-xsync \
-no-xinerama \-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-mitshm \
-no-fontconfig \
-no-xinput \
-no-xkb \
-no-glib \
-qt-gfx-linuxfb \
-qt-mouse-tslib \
-qt-kbd-linuxinput

最後安裝

make
make install

編譯一個helloWorld程序-支持中文

原博客地址: https://www.cnblogs.com/M-Bing/p/3762597.html  感謝作者。

第一步:下載QT所支持的字庫,這裏可以下載:

http://sourceforge.net/projects/wqy/files/wqy-zenhei/0.8.38%20(Pangu)/wqy-zenhei-0.8.38-1.tar.gz/download?use_mirror=nchc&use_mirror=nchc&18950117=

wqy-zenhei.ttc拷貝到/opt/qt/lib/fonts目錄下-(不是開發板中的-是虛擬機中的路徑,開發板的一會兒再說一步一步來)

編譯個QT程序:

cd /home/qian
mkdir qthello
cd qthello
vim main.c
#include<QApplication>
#include<QLabel>
#include <QTextCodec>
#include <QFontDatabase>
#include <QDebug>
#include <QFont>
int main(int args,char** argv)
{

   QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

    QApplication app(args,argv);

    qDebug()<<"hello";

    QLabel *hello=new QLabel("你好啊!");
    hello->setFont(QFont("wqy-zenhei",14,QFont::Normal));

    hello->show();
    return app.exec();
}
#編譯QT程序
/opt/qt/bin/qmake -project
/opt/qt/bin/qmake
make

如果沒啥問題的話,QT 程序就生成了。

3.在開發板上運行QT程序。 

爲了能讓程序早點運行,不想在研究各種各樣的環境變量了。

就懶省事:保證虛擬機中的QT和tslib安裝路徑和開機板上roofs中的安裝路徑一致。這樣能避免一些我們人爲帶來的問題。

測試的時候發現- 先執行環境變量腳本  在執行QT程序時腳本沒有生效。。所以就把程序放在腳本中了。

(其實即使不配置QT庫的路徑也是能運行的--估計是qmake時已經默認了opt/qt的路徑)

#將QT庫和tslib庫文件都拷貝到roomfs中
cd /home/qian/nuc977BSP/nuc970bsp/rootfs
mkdir opt
cp /opt/tslib ./ -r
cp /opt/qt ./ -r

#我發現運行的時候提示缺少庫 提前拷過來
cp /usr/local/arm_linux_4.8/usr/lib/libstdc++.so.6 lib/

#爲了快速測試我們的QT程序 就直接把qt程序拷貝到 usr目錄下
cp ****/qthello/qthello  usr/


#創建一個腳本文件--配置下環境變量
cd etc
vim qt.sh

#內容如下:
#!/bin/sh
echo "QT event"
export QWS_DISPLAY=LinuxFB:mmWidth154:mmHeight85:0
export QWS_SIZE=800x480
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/opt/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export POINTERCAL_FILE=/etc/pointercal
export QWS_MOUSE_PROTO="TSLIB:/dev/input/event0"
export QT_QWS_FONTDIR=/opt/qt/lib/fonts
cd /usr
./qthello -qws &

到這裏準備工作就已經完成了。如果內存夠大的話,就直接編譯到內核中。在ram裏運行。。

我用了UBI來加載roomfs

參數如下:  注意:燒寫myubi.img的時候,最好擦除整個NAND,然後重新燒寫uboot uimage.. 

因爲我發現第一次燒寫myubi.img可以運行  第二次重新再燒寫就跑飛。。不找原因了 先做開發。

#生成 nand燒寫文件
mkfs.ubifs -F -x lzo -m 2048 -e 126976 -c 952 -o rootfs_ubifs.img -d ./rootfs
ubinize -o myubi.img -m 2048 -p 131072 -O 2048 -s 2048 ubinize.cfg


ubinize.cfg 的內容爲:
[ubifs]
mode=ubi
image=rootfs_ubifs.img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_alignment=1
vol_name=system
vol_flags=autoresize

 

假如我們已經正常的進入了內核了。

修改/opt/tslib/etc/ts.config,去掉module_raw_input前面的#。(記得要頂格啊)

然後執行opt/tslib/bin/ts_calibrate 校準下觸摸屏

在執行opt/tslib/bin/ts_test  測試下觸摸屏。 只有這個測試通過了,才能確認觸摸是好的。

如果出現校準好了,但是ts_test出問題的話,就把opt/tslib/etc/中的文件都拷貝到/etc中。再試試。

測試OK的話,就去執行QT程序吧。。

如果QT程序能執行  觸屏也OK的話,就剩下填坑了。把之前的問題解決了。。

有了正確的答案 再去找錯誤的問題就容易多了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章