荔枝派nano(f1c100s)手动移植QT4.8.7

荔枝派nano(f1c100s)手动移植QT4.8.7
硬件环境:
1、荔枝派nano(f1c100s)

一、概念理清 (必看)

请先看这!
请先看这!
请先看这!

1、关于f1c100s交叉编译工具链,我用的是这个arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,以下称为arm-none-linux-gnueabi;

wget https://sourcery.mentor.com/GNUToolchain/package12813/public/arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

好,为什么是这个呢,回答是我也不知道。目前我只有用这个编译出的应用程序放到单板上才能运行;
2、为什么Qt版本是Qt4.8.7,而不是Qt5.9或者别的?首先要明确一点,后面使用buildroot构建根文件系统和编译Qt应用程序使用的都是同一个工具链,也就是上面介绍的那个;然而arm-none-linux-gnueabi的gcc版本是4.8.3,接着你要了解所移植的QT版本对gcc版本的要求;然而Qt5.9对gcc的版本要求是大于4.8,所以结论:对于使用此工具链的f1c100s来说,Qt4.8.7和Qt5.9都是可以的我选择Qt4.8.7是因为找不到Qt5.9;
在这里插入图片描述

3、小结:因为使用什么Soc而决定使用什么交叉编译工具链而移植什么版本的Qt;对于这个f1c100s来说,我是这么考虑的;所以本次f1c100s移植qt的方案就是:buildroot使用外置工具链,不会在buildroot下勾选Qt包,而是手动移植; 反正就是工具链gcc版本和Qt版本之间的关系,自己理清之后,随意搭配应该都可以的;没有固定的选择;
4、插播:怎么配置工具链,步骤如下

# 下载工具链
wget https://sourcery.mentor.com/GNUToolchain/package12813/public/arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
# 解压工具链
tar -xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
# 执行下面三条指令就可以在任何地方用了,但不是永久的
# 第三条换成你的路径
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PATH=$PATH:/home/book/licheePi-f1c100s/arm-2014.05/bin
# 测试
arm-none-linux-gnueabi-gcc -v

二、使用buildroot构建根文件系统

进入buildroot目录下:

#先执行一次 make distclean
make distclean

#随后执行 make menuconfig 进入图形化配置界面
make menuconfig

主要在于工具链部分的配置。本次buildroot使用外部已有的工具链,也就是上面介绍的工具链;
在这里插入图片描述

1、Target options

如图配置;
在这里插入图片描述

2、ToolChain

在这里插入图片描述

注意Toolchain path的写法:正常的工具链路径是细节到/bin目录下的,也就是/home/book/licheePi-f1c100s/arm-2014.05/bin,但这里要把“/bin”去掉;
注意Toolchain prefix的写法:这个工具链的前缀是arm-none-linux-gnueabi;$(ARCH) = arm,所以在后面加上 -none-linux-gnueabi 就行,不要再在结尾加个“-”了;
注意gcc version的查看方法:就像上面那样: arm-none-linux-gnueabi-gcc -v;
注意kernel header series的查看方法:在工具链目录里查看,

vi /home/book/licheePi-f1c100s/arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/linux/version.h

在这里插入图片描述

3、System configuration

如图配置;
用户名、密码、欢迎语这些自定义;在这里插入图片描述

4、编译(make)

编译结束后,根文件系统在buildroot根目录下的 output/images/ 下;
在这里插入图片描述

三、开始移植Qt4.8.7

源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)

1、下载源码并解压

# 下载源码
wget https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz

# 解压源码
tar -xvf qt-everywhere-opensource-src-4.8.7.tar.gz

2、修改qmake.conf

# 进入Qt源码根目录修改 qmake.conf
vi mkspecs/linux-arm-gnueabi-g++/qmake.conf

就是修改为自己的工具链前缀
在这里插入图片描述

3、配置(configure)

在源码根目录下执行

./configure -release -xplatform linux-arm-gnueabi-g++  -prefix /opt/qt4.8.7_armlib -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs

-release:编译Qt的release版本;
-xplatform:后面的linux-arm-gnueabi-g++是路径,所以这是在指向交叉编译工具链的配置目录,后面编译Qt源码时所用的工具链它会去mkspecs/linux-arm-gnueabi-g++/下读取配置文件,也就是刚刚修改的那个qmake.conf;【个人理解】
-platform: 这里没加因为默认是linux-g++,这个不要和上面那个混淆了,这个是编译qmake用的,因为需要使用qmake来生成Qt的工程和Makefile,其实就是指定你交叉编译的平台主机,简单说明就是你写程序和编译程序的平台;【引用他人原话】
-prefix:指定安装目录;
-opensource:编译Qt的开源版本;

4、编译(make)

在源码根目录下执行

make -jx # x取决于你的cpu

5、安装(make install)

在源码根目录下执行

make install 

安装结束后,可以到指定安装目录下查看,后面需要把qt4.8.7_armlib整个文件夹拷贝的单板下的/opt/目录下
在这里插入图片描述

插播:编译Qt应用程序的流程是:把整个程序拷贝到虚拟机,使用Qt安装目录下的qmake生成Makefile,再执行make编译程序;
然而qmake就在Qt安装目录的bin目录下;

#qmake 生成 Makefile 示例
/opt/qt4.8.7_armlib/bin/qmake xxx.pro

6、拷贝qt4.8.7_armlib到单板

我使用的是sd卡启动,因为荔枝派nano的flash不足以放下目前大小的根文件系统;
所以把根文件系统拷贝到SD卡第二分区时,顺带把/opt/qt4.8.7_armlib拷贝到新根文件系统的/opt/目录下
关于如何sd卡启动请参考这篇文章

四、开始测试

1、随便整个简单的Qt程序到虚拟机下,我的是这个:
在这里插入图片描述

2、在工程目录下执行qmake

# Qt安装目录下的qmake
/opt/qt4.8.7_armlib/bin/qmake xxx.pro

在这里插入图片描述

3、make编译程序

# 会看到qmake后多了个Makefile
# 直接make
make

在这里插入图片描述

4、把工程拷贝到单板,并执行,执行时加上-qws
在这里插入图片描述

运行成功!

五、报错

当然,我并不是一次成功;

报错1

QLock::QLock: Cannot create semaphore /tmp/qtembedded-0/QtEmbedded-0 'd' (38, Function not implemented)
Cannot get display lock

如果出现类似的报错,请重新编译Linux内核并替换,内核需要勾选:
General setup > System V IPC
在这里插入图片描述

报错2

./xxx: not found

出现这种错误,大概率是编译buildroot和编译Qt应用程序所使用的工具链不一样;我最开始的错误就是这个,弄了很久;如果你不是按照这篇文章来的,那你可以尝试编译buildroot时选择使用外置的交叉编译工具链,同时指定编译Qt源码的工具链也是同一个,最后编译Qt应用程序也是同一个工具链;而不要buildroot使用内置工具链,再用buildroot的内置工具链编译Qt源码和去编译Qt应用程序;这是针对f1c100s;

报错3

error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory

把 /opt/qt4.8.7_armlib/lib/ 下的所有文件拷贝到 /usr/lib/

六、总结

以上有个人理解,若出现名词解释模糊或概念解释错误,请给予纠正!也请提出问题一起讨论!
此处列出主要参考文章:
1、f1c100S(licheepi_nano)的linux上运行QT搭建过程
2、全志F1C100s使用记录:u-boot & linux & rootfs 编译与烧录测试(基于SD卡)
3、嵌入式V3s交叉编译 tslib和QT4.8.7,并使用Qt Creator编译项目

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值