当前位置:   article > 正文

imx6ull移植Qt_buildroot构建qt

buildroot构建qt

本次移植采用buildroot构建Qt根文件系统的方式,在busybox构建的根文件系统之上,自动添加Qt库及其需要的依赖,极大简化了开发流程。

移植流程

buildroot构建根文件系统(包含qt库)

buildroot相较于busybox构建根文件系统的最大好处就是可以自动添加各种外部库,例如qt,tslib等,而不是自己手动去官网下载编译。这样的好处是问题少,效率高。

获取buildroot源码

官网地址:https://buildroot.org,得到buildroot的压缩包并解压。

配置buildroot

接下来通过图形化界面生成.config配置文件

make menuconfig
  • 1

进入buildroot配置菜单
在这里插入图片描述

  • 配置Target options

在这里插入图片描述

  • 配置Tookchain

在这里插入图片描述

  • 配置System configuration

在这里插入图片描述
buildroot也可以选择设置登陆密码
在这里插入图片描述

  • 配置Filesystem images

在这里插入图片描述

  • 配置Target packages

在这里插入图片描述
根据自己需要安装对应的qt库

配置好之后,会生成用于make的.config文件,编译即可(整个过程和编译内核类似)

sudo make
  • 1

编译完成后,会在该目录output/images/下生成压缩文件rootfs.tar。解压后,可以看到我们的根文件系统:

在这里插入图片描述
在/usr/lib下,可以看到buildroot已经编译好的Qt库:

在这里插入图片描述

测试文件系统

将文件系统解压后,拷贝到指定目录(这里使用nfs方式,需要修改nfsroot的位置)
uboot里修改nfsroot的位置:

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=xxx(ip): /home/xxx/linux/nfs/buildrootfs rw ip=xxx::eth0:off'
  • 1

再次上电,输入用户名及密码,文件系统工作正常。

在这里插入图片描述

测试Qt

在测试Qt之前,首先要声明所需要的环境变量。

Qt平台插件:

export QT_QPA_PLATFORM=linuxfb
  • 1

有了Qt插件之后,就可以看到我们的Qt程序可以正常运行了。跑一个Qt自带的例程:

cd /usr/lib/qt/examples/widgets/animation/moveblocks
./moveblocks
  • 1
  • 2

效果如图所示:

在这里插入图片描述

编译Qt程序

使用命令行编译Qt程序很简单,但有一点需要特别注意:编译的Qt项目必须与编译buildroot根文件系统使用同一编译器,否则会有问题。

在buidroot的output/host/usr/bin目录,查看qt版本,就可以看到相关信息。
在这里插入图片描述
之后进入我们的工程目录(.pro文件所在目录),qmake生成对应Makefile
在这里插入图片描述
查看刚刚生成的Makefile,可以看到使用的交叉编译器和buildroot的相同
在这里插入图片描述

有了Makefile文件,就可以执行make命令,生成可执行文件

问题总结

buildroot编译太慢或停止

buildroot在编译过程中要保证联网,因为它会从服务器上下载所需的东西。因为很多服务器部署在国外,所以有时构建过程会特别漫长,如果下载速度过慢,可以选择离线下载对应压缩包的方法。

在这里插入图片描述
如果遇到上图的情况,可以先暂停make,首先进入压缩包的网址,下载好后将压缩包放到buildroot/dl/目录下的对应文件里(不用解压),之后再重新make,buildroot会在dl目录下找到对应的压缩包并解压(解压后的源码会放到buildroot/output/build下),之后重复操作即可。

Qt程序运行报错

在这里插入图片描述
出现这类错误的原因是Qt找不到插件,声明环境变量即可。
当然,如果还需要使用触摸等功能,也是声明环境变量。

命令行提示符显示“#”

命令行显示“#”,与环境变量PS1有关。PS1用于命令提示符显示,参数如下:

在这里插入图片描述
在/etc/profile可以看到,命令提示符PS1在此处被定义。注释的代码是最开始的代码,可以看到PS1背定义为了“#”。此处把它注释掉,改为上面的定义即可。
在这里插入图片描述

这样我们就可以定制自己的命令提示符:
在这里插入图片描述

使用字体库

要让Qt正确显示字体,就要保证有对应的字体文件

方法一:声明环境变量

export QT_QPA_FONTDIR=/usr/share/fonts
  • 1

一般会把字体文件放到/usr/share/fonts下,Qt程序在使用字体时会去该目录下查找

方法二:QFontDatabase
如果想要使用第三方的字体库,可以使用QFontDatabase,指定字体库文件

int id = QFontDatabase::addApplicationFont("./simsun.ttf");	//将指定字体加入字体族
QFont font;
font.setFamily("simsun");	//填入文件名
ui->pushButton->setFont(font);
...
  • 1
  • 2
  • 3
  • 4
  • 5

使用触摸屏

触摸功能:

export TSLIB_TSDEVICE=/dev/input/event1 // eventX X可能取 可能取 值 0 1
  • 1

其中eventX文件为触摸屏驱动的设备文件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/634494
推荐阅读
  

闽ICP备14008679号