1 ubuntu搭建qt环境的好处
ubuntu上可以安装qtcrater,然后一键下载到板子上,不需要手动编译;
2 安装linux版本的qtcreater
注意,必须要先安装g++再安装qtcreater,否则会出问题!!!
下载g++编译器
sudo apt-get install aptitude
#aptitude比apt-get强大,因为它会自动搜索被下载软件的依赖包,然后
#并把它们一起下载下来;
sudo aptitude install g++
注意,第一个弹出来的选项选n
第二个才选y
安装ssh
ssh是一种远程登录控制台的工具,也就是可以通过网络登录设备的控制台;
同样作用的工具还有telnet,
telnet和ssh的区别:
telnet是明文传输,ssh加密传输;
sudo apt-get install ssh
安装libgl,否则在ubuntu执行qt时会提示: can’t not find -lGL
参考网页:
https://blog.csdn.net/u013066730/article/details/60467159
第一种解决方法:
sudo apt-get install libgl1-mesa-dev
第二种解决方法:
sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so
首先你要下载安装包,下载的网址:
http://download.qt.io/archive/qt/?tdsourcetag=s_pcqq_aiomsg
注意,不要在32位Linux上安装,因为32位的Linux不能安装,必须要用64位的linux;
然后把安装包放到Linux中:
执行安装命令:
sudo ./qt-opensource-linux-x64-5.11.1.run
#注意,一定要用sudo,否则会出问题
安装好后如何打开:
第一种方法:
点击左下角菜单 -> 编程 -> Qt Creater
第二种的方法:
直接在安装目录下运行qtcreater命令
我们是安装在/opt下
/opt/Qt5.11.1/Tools/QtCreator/bin/qtcreator
3 配置一键下载到板子上
如果你板子上的文件系统是busybox,首先要交叉编译ssh,假如你板子上的系统是ubuntu或者debian,就可以直接
apt-get install ssh
busybox是一个 “命令瑞士军刀”,它把诸如ls.cd,rm,cp…一系列命令都编译成一个独立的可执行文件 -> 文件名就叫做busybox,
busybox的优点是非常的小,功能还不错
因为我们的文件系统是busybox的,所以需要交叉编译ssh;
3.1 交叉编译ssh
OpenSSH 源码获取
这里我们一共需要移植三个软件包: zlib、 openssl 和 openssh。依次到这三个软件的官网下
载对应的源码,官网如下:
zlib 官网: http://www.zlib.net/
openssl 官网: https://www.openssl.org/source/
openssh 官网: http://www.openssh.com/
3.1.1 移植 zlib 库
tar -vxzf zlib-1.2.11.tar.gz //解压
解压完成以后得到一个名为“zlib-1.2.11”的 zlib 源码文件。另外新建一个名为“zlib”的
文件夹来保存 zlib 的编译结果。进入 zlib 源码目录,然后配置并编译,命令如下:
cd zlib-1.2.11/ //进去 zlib 源码
CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld AD=arm-linux-gnueabihfas ./configure --prefix=/home/song/linux/IMX6ULL/tool/zlib //配置
make //编译
make install
将zlib中的 lib 目录下的 zlib 库文件拷贝到开发板根文件系统的/lib 目录下
3.1.2 移植ssl
tar -vxzf openssl-1.1.1d.tar.gz
解压完成以后就会生成一个名为 openssl-1.1.1d 的目录,然后在新建一个名为“openssl”的文件夹,用于存放 openssl 的编译结果。进入到解压出来的 openssl-1.1.1d 目录中,然后执行如
下命令进行配置:
./Configure linux-armv4 shared no-asm --prefix=/home/song/linux/IMX6ULL/tool/openssl
CROSS_COMPILE=arm-linux-gnueabihf-
上述配置中“ linux-armv4”表示 32 位 ARM 凭条,并没有“ linux-armv7”这个选项。
CROSS_COMPILE 用于指定交叉编译器。配置成功以后会生成 Makefile,输入如下命令进行编译:
make
make install
编译并安装成功的 openssl 目录中的 lib 目录是我们需要的,将 lib 目录下的 libcrypto 和 libssl 库拷贝到开发板根文件系统中的/usr/lib 目录下,命令如下:
sudo cp libcrypto.so* /home/song/linux/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/song/linux/nfs/rootfs/lib/ -af
3.1.3 移植 openssh 库
3.1.3.1 交叉编译 openssh 库
先解压 openssh 源码,命令如下:
tar -vxzf openssh-8.2p1.tar.gz
解压完成以后就会生成一个名为“openssh-8.2p1”的文件夹,进入此文件夹里面,然后配置并编译 openssh,命令如下:
cd openssh-8.2p1/
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/song/linux/IMX6ULL/tool/zlib --with-ssl-dir=/home/song/linux/IMX6ULL/tool/libopenssl --disable-etcdefault-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar //配置
make //编译
在配置 openssh 的过程中,“–with-zlib”参数用于指定 zlib 库所在的目录,“–with-ssl-dir”
参数用于指定 openssl 库所在的目录,编译 openssh 的时候不用“make install”。
3.1.3.2 将 openssh 相关文件拷贝到开发板中
openssh 交叉编译完成以后在开发板中创建如下所示目录(如果存在的话就不需要创建):
/usr/local/bin
/usr/local/sbin
/usr/local/libexec
/usr/local/etc
/var/run
/var/empty
创建命令如下:
mkdir /usr/local/bin -p
mkdir /usr/local/sbin -p
mkdir /usr/local/libexec/ -p
mkdir /usr/local/etc -p
mkdir /var/run -p
mkdir /var/empty/ -p
上述目录创建好以后将如下文件拷贝到开发板的/usr/local/bin 目录下:
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan
将如下文件拷贝到开发板的/usr/local/sbin 目录下:
sshd
将如下文件拷贝到开发板的/usr/local/etc 目录下:
moduli ssh_config sshd_config
将如下文件拷贝到开发板的/usr/local/libexec 目录下:
sftp-server ssh-keysign
创建软连接,进入开发板中的/bin 目录下,输入如下命令创建软连接:
cd /bin/
ln -s /usr/local/bin/scp
ln -s /usr/local/bin/sftp
ln -s /usr/local/bin/ssh
ln -s /usr/local/bin/ssh-add
ln -s /usr/local/bin/ssh-agent
ln -s /usr/local/bin/ssh-keygen
ln -s /usr/local/bin/ssh-keyscan
再进入开发板的/sbin 目录下,输入如下命令创建软连接:
cd /sbin/
ln -s /usr/local/sbin/sshd
3.2 交叉编译qt库
build.sh:
!/bin/bash
./configure -opensource \
-confirm-license \
-little-endian \
-prefix /opt/Qt-4.8.7-nuc972 \
-silent \
-shared \
-release \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-platform qws/linux-x86-g++ \
-webkit \
-qt-gfx-transformed \
-qt-libtiff \
-qt-libmng \
-qt-mouse-tslib \
-qt-mouse-pc \
-no-mouse-linuxtp \
-no-neon \
-nomake tools \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-I /opt/tslib-nuc972/include \
-L /opt/tslib-nuc972/lib
开发板原厂送的qt4.8.6使用不了的,因为它的编译环境是32位的机器,和我们的不符合,所以他的用不了;
增加env-qt4.sh
#!/bin/sh
export set QTDIR=/opt/Qt-4.8.7-nuc972/
export set LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export set PATH=$QTDIR/bin:$PATH
export set QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_MOUSE_PROTO="TSLIB:/dev/input/event0 Intellimouse:/dev/input/mouse1"
#export set QWS_DISPLAY='/dev/fb0'
export QT_PLUGIN_PATH=$QTDIR/plugins
把中文字库加入qt的字体目录:
随便找一个ttf字体文件,放到/opt/Qt-4.8.7-nuc972/lib/fonts/
修改/etc/profile,让它开机自动执行qt脚本:
vi /etc/profile
加入:
source /opt/env-qt4.sh
重启:
reboot
测试qt库是否移植成功:
/opt/Qt-4.8.7-nuc972/examples/mainwindows/dockwidgets/dockwidgets -qws
3.3 在qtcreaeter中增加远程调试设备
先增加arm-linux-gcc套件
增加一个编译工具套件:
这个编译工具套件其实就是我们的Qt-4.8.7里的qmake
在qt工程的pro文件要增加安装路径:
远程调试qt的原理是把qt执行文件传输到板子的指定目录上,然后就运行它
target.path = /home/root
INSTALLS += target
因为我们的工程创建时,nuc972-qmake是没有的,所以我们要手动激活,并加入参数
-qws