完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for windows ,本文就来介绍一下QT在嵌入式环境的搭建。 移植以到 JZ2440 为例,使用韦老大提供的 ubuntu9.10 虚拟机作为移植环境。当然,其它虚拟机也是可以的,我同样在 ubuntu14.04 移植成功,只不过需要额外装一些库,后面我会简单提及。 此外,我尝试使用 4.3.2 版本的交叉编译工具编译 Qt5.6 ,编译过成功很多错误,编译成功之后使用 qt 编译应用程序时也存在问题,因此我是用的是友善提供的 4.4.3 版本的交叉编译工具。建议新手使用与我相同的编译环境。 因为我们更换了编译工具,因此,我们有接下来的4个工作。 1、重新编译内核 2、制作文件系统 3、移植tslib 4、移植qt 教程涉及的资料: 1、交叉编译器 arm-linux-gcc-4.4.3.tar.gz .链接:http://pan.baidu.com/s/1nvJF8ud 密码:oi57 2、针对于 JZ2440 的内核补丁以及源码 linux-2.6.22.6.tar.bz2 .链接:http://pan.baidu.com/s/1gf0oZn1 密码:jrp6 linux-2.6.22.6_jz2440.patch 链接:http://pan.baidu.com/s/1c1CWgTE 密码:uwuu 4.3寸LCD_mach-smdk2440.c 链接:http://pan.baidu.com/s/1boZsKwf 密码:1xml 3、busybox busybox-1.22.1.tar.bz2 .链接:http://pan.baidu.com/s/1cee6CI .密码:lv81 4、tslib . tslib-1.4.tar.gz 5、qt5.6 源码 链接:http://pan.baidu.com/s/1jINj3IQ 密码:6kkc qt-everywhere-opensource-src-5.6.0.tar.gz 链接:http://pan.baidu.com/s/1kVnV9oN 密码:r7cm 上述网盘已失效,新链接:https://pan.baidu.com/s/1ghbBnBP 密码:lmn1 一、更换交叉编译器 首先,将下载好的文件全部放在 /work 目录下 1、解压交叉编译器 sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C / #展开在根目录 ls /opt/FriendlyARM/toolschain/4.4.3/bin #检查是否生成了编译目录 2、设置环境变量 sudo vi /etc/environment 将现在原有的交叉编译器路径替换为我们新解压的交叉编译器,举例: #PATH="/usr/local/***in:/usr/local/bin:/usr/***in:/usr/bin:/***in:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin"//注释 PATH="/usr/local/***in:/usr/local/bin:/usr/***in:/usr/bin:/***in:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.4.3/bin" //增加 后期测试时我发现这里是有问题的,由于我的安装目录都指定的是 usr 目录,需要 root 权限,然而在 environment 中设置的环境变量导致使用 root 权限 make install 过程中出现了个别的 command not found ,于是我将环境变量放到了 /etc/profile 中,这个文件是对所有用户生效的。至于environment 百度了一下是系统环境变量按说应该没问题,但是的确出现了问题。索性还是大家还是直接搞到 profile 中吧。 3、重启虚拟机 4、检查是否更换成功 arm-linux-gcc -v 如图,更换完毕,我们的编译器就变为 4.4.3 版本了。 二、重新编译内核 如果你不是jz2440也没关系,使用你曾经移植好的内核,重新编译即可,注意内核需要开启EABI的支持,如果你是jz2440,按照下面的步骤操作即可。 1、解压 tar jxvf linux-2.6.22.6.tar.bz2 2、打补丁 cd linux-2.6.22.6 patch -p1 < ../linux-2.6.22.6_jz2440.patch 如果你是 4.3 寸的 JZ2440 ,替换 LCD 驱动,3.5寸跳过此步 mv ../4.3寸LCD_mach-smdk2440.c arch/arm/mach-s3c2440/mach-smdk2440.c 3、配置内核支持 EABI make menuconfig kernel features-> <*>use the arm eabi to .... //选中这一项 4、修改 makefile ,不改的话 4.4.3 编译器编译时会报错 vi Makefile 由于友善在制作这款交叉编译工具时指定了最低内核版本(2.6.32.2)的限制,所以我们如果不加修改直接编译启动内核时会出现 kernel too old 的错误信息,无法启动。这里使用一个投机取巧的办法,强制对 2.6.22.6 内核的版本进行修改,更改内核版本号对内核编译是有影响的,真正移植的时候还是建议选择高版本内核。 Makefile 最开始的地方就是版本号: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 22 EXTRAVERSION = .6 中的 SUBLEVEL = 22 改为 SUBLEVEL = 32 //找到一下几行 ,这里是因为 4.4.3 的编译器不支持 gdwarf2 这个选项 ifdef CONFIG_DEBUG_INFO CFLAGS += -g AFLAGS += -gdwarf2 endif //注释掉 AFLAGS += -gdwarf2 5、编译 make uImage -j4 编译完的uImage 在 /arch/arm/boot 目录下 三、制作文件系统 1、解压 tar jxvf busybox-1.22.1.tar.bz2 2、配置 make menuconfig Busybox Settings -> general configuration -> build options-> cross comliler prefix = arm-linux- //选择交叉编译工具 installtion options-> busybox installation prefix = /work/my_rootfs //指定安装路径 3、编译&安装 mkdir -p /work/my_rootfs //安装路径 make make install cd /work/my_rootfs ls //查看是否安装成功 编译安装完毕之后,我们的文件系统就生成在 /work/my_roofs 目录下了 4、创建 /etc/inittab mkdir -p /work/my_rootfs/etc vi /work/my_rootfs/etc/inittab # /etc/inittab # 启动脚本/etc/init.d/rcS ::sysinit:/etc/init.d/rcS # 启动 shell ::askfirst:-/bin/sh # 重启关机前 卸载文件系统 ::ctrlaltdel:/***in/reboot ::shutdown:/bin/umount -a -r 5、创建 /etc/init.d/rcS mkdir -p /work/my_rootfs/etc/init.d vi /work/my_rootfs/etc/init.d/rcS # 这是一个脚本文件,用/bin/sh解析 #!/bin/sh # 挂载文件系统 mount -a # 使用内存文件系统 mkdir /dev/pts mount -t devpts devpts /dev/pts echo /***in/mdev > /proc/sys/kernel/hotplug mdev -s # 设置IP #/***in/ifconfig eth0 192.168.1.17 #nfs不需要 # 挂载 /etc/fstab 中的文件系统 mount -a exec /etc/rc.local 6、创建rc.local vi /work/my_rootfs/etc/rc.local #!/bin/sh . /etc/profile //注意.后边有个空格! 7、创建/etc/fstab vi /work/my_rootfs/etc/fstab # device mount-point type options dump fsck order proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 8、构建 /dev 目录 mkdir -p /work/my_rootfs/dev cd /work/my_rootfs/dev sudo mknod console c 5 1 sudo mknod null c 1 3 9、创建其它目录 mkdir proc mnt tmp sys root usr 10、拷贝Lib cd /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib cp *.so* /work/my_rootfs/lib -d cd /opt/FriendlyARM/toolschain/4.4.3/lib cp *.so* /work/my_rootfs/lib -d 四、移植 tslib 1、解压&配置&编译 如果不是使用的韦老大的虚拟机可能还需要安装一下几个包 autoconf automake libtool #sudo apt-get install autoconf automake libtool tar zxvf tslib-1.4.tar.gz sudo mkdir -p /usr/local/tslib cd tslib ./autogen.sh ./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ -prefix=/usr/local/tslib make sudo make install 如果编译过程中遇到 undefined reference to 'rpl_malloc',前面配置完成之后修改 config.h.in 文件,注释掉文件最后的 #undef malloc ,重新 make 即可。 安装完成之后,tslib 就安装在虚拟机 /usr/local/tslib 目录下 2、更改 tslib 配置文件 cd /usr/local/tslib/etc/ sudo vi ts.conf 去掉# module_raw input 前面的 “#” 和空格 3、将制作好的 tslib 移动到我们制作的文件系统 cd /usr/local sudo tar zcvf tslib.tar.gz tslib mkdir -p /work/my_rootfs/usr/local cp tslib.tar.gz /work/my_rootfs/usr/local tar zxvf tslib.tar.gz rm tslib.tar.gz 4、添加 tslib 环境变量 vi /work/my_rootfs/etc/profile #!/bin/sh export T_ROOT=/usr/local/tslib export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_PLUGINDIR=$T_ROOT/lib/ts export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf export POINTERCAL_FILE=/etc/pointercal export TSLIB_CALIBFILE=/etc/pointercal 此时,tslib 就已经移植好了,你可以挂载 nfs 文件系统启动,cd /usr/local/tslib/bin ./ts_test 来测试 按照教程制作应该没有问题,我在使用高版本内核的时候遇到“selected device is not a touchscreen I understand”错误,百度了一下,是由于内核和编译器的一个宏定义不一致导致的,vi include/Linux/input.h EV_VERSION 为 0x0100000 ,从新编译内核特别是触摸驱动。 五、移植 qt5.6 1、解压 tar zxvf qt-everywhere-opensource-src-5.6.0.tar 2、修改编译配置 cd /work/qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-arm-gnueabi-g++ vi qmake.conf 针对于 2440 增加: QT_QPA_DEFAULT_PLATFORM = linuxfb QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t march 指的 cpu 架构,针对 2440 来说是 armv4t mtune 指的 cpu 名字,针对 2440 来说是 arm920t 如果你是 A8 的板子 ,可以参考下边的配置 QT_QPA_DEFAULT_PLATFORM = linuxfb QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8 QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8 如果你是 A9 的板子 ,可以参考下边的配置 QT_QPA_DEFAULT_PLATFORM = linuxfb QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a9 QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a9 将以下部分 # modifications to g++.conf QMAKE_CC = arm-linux-gnueabi-gcc QMAKE_CXX = arm-linux-gnueabi-g++ QMAKE_LINK = arm-linux-gnueabi-g++ QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++ # modifications to linux.conf QMAKE_AR = arm-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy QMAKE_NM = arm-linux-gnueabi-nm -P QMAKE_STRIP = arm-linux-gnueabi-strip 修改为:-lts 是指在链接时链接 tslib 库 # modifications to g++.conf QMAKE_CC = arm-none-linux-gnueabi-gcc -lts QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts # modifications to linux.conf QMAKE_AR = arm-none-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy QMAKE_NM = arm-none-linux-gnueabi-nm -P QMAKE_STRIP = arm-none-linux-gnueabi-strip 3、配置编译 sudo mkdir -p /usr/local/Qt5.6 cd ../../../ ./configure -prefix /usr/local/Qt5.6 -opensource -release -confirm-license -xplatform linux-arm-gnueabi-g++ -shared -qt-zlib -no-gif -qt-libjpeg -no-nis -no-opengl -no-cups -no-glib -no-dbus -no-rpath -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-openssl -nomake tools -qreal float -qt-libpng -tslib -nomake examples ———————————————— 版权声明:本文为CSDN博主「Linux学习之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lizuobin2/article/details/52673494 |
|
相关推荐 |
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 应用层更改引脚复用的方法
2747 浏览 0 评论
1321 浏览 0 评论
【英飞凌PSoC 6 RTT开发板试用】串口测试标准输入输出重定向
1109 浏览 0 评论
4552 浏览 0 评论
1806 浏览 0 评论
55086 浏览 21 评论
【参与有奖】激扬代码,千元现金!RT-Thread主题征文大赛
56945 浏览 88 评论
276924 浏览 75 评论
50543 浏览 31 评论
15949 浏览 53 评论
野火 ISO STM32资料合集(程序、原理图、项目初高级篇)
18063 浏览 46 评论
13222 浏览 50 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-25 16:12 , Processed in 0.544651 second(s), Total 45, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号