无锡矽控电子科技有限公司

网站首页 > 技术支持 > 工控嵌入式ARM

NUC972 NUC980 的linux和QT环境搭建

2019-07-26 14:04:15 无锡矽控电子科技有限公司 阅读

搭建基本开发环境

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 -动态库

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程序-支持中文

第一步:下载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的话,就剩下填坑了。把之前的问题解决了。。

有了正确的答案 再去找错误的问题就容易多了。

原文来自:https://blog.csdn.net/qianxilin/article/details/85232571



矽控电子

矽控电子核心团队拥有十余年的硬件正向研发,生产制程,测试手法,品质控制经验。尤其擅长嵌入式ARM平台的工控物联网产品,以及海思平台的IPC视频类模组开发,为您的产品从创意到落地、批量市场化助力。公司可提供从硬件设计(原理开发及PCB Layout),PCB制板,SMT及接插件焊接,产品测试,产品老化全流程外包服务,收费合理,品质可靠。

垂询电话:0510-83488567-1     业务邮箱:wxdianzi#foxmail.com (#更换为@)


Powered by ElecKits 5.3.15 ©2008-2019 www.silicontrol.com