在HI3531上移植和运行QT4.8.6
- 格式:doc
- 大小:47.00 KB
- 文档页数:4
Qt4.8.3移植总结目录•0.编译环境• 1.安装tslib• 2.安装Qt4.8.3• 2.1.安装Linux/X11版Qt• 2.2.安装embedded版Qt• 3.安装Qt Creator• 4.Hello Qt最近买了块天嵌的TQ210,对最新的Qt4.8.3进行了移植,现在做个总结,方便以后查看。
Qt是一个跨平台的C++应用程序开发框架,广泛用于开发GUI程序。
使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与运行,而不需要修改源代码。
会自动依平台的不同,表现平台特有的图形界面风格。
Qt在嵌入式开发中有着广泛的应用,使用Qt只需编写一次应用程序和UI,无须重新编写源代码,便可跨不同的桌面和嵌入式操作系统进行部署,既节省了时间又降低开发成本。
0.编译环境操作系统:Debian wheezy 32位gcc版本: 4.7.1arm-linux-gcc:4.4.6 (for TQ210 EmbedSky Tech)开发板:TQ210(天嵌)液晶屏:7寸(800×480)1.安装tslib为什么要装tslib?主要是为了校准触摸屏以及去抖等功能,为了能更好的使用触摸屏还是装吧。
下载地址:/projects/tslib.berlios/files/网上说的tslib1.4其实就是tslib1.0.4,怎么就变成1.4了,汗。
这个工具比较小,配置一下后直接编译就行了。
1.tar -xvjf tslib-1.0.tar.bz22.cd tslib-1.03../autogen.sh4../configure --prefix=/opt/tslib-1.0 --host=arm-linux ac_cv_func_malloc_0_nonnull=yes5.make6.make installprefix后面是安装目录,自己随便定义,装好后修改/opt/tslib-1.0/etc/ts.conf,去掉module_raw input 前面的#号,然后把/opt/tslib-1.0里的文件都拷入开发板,比如我放在了/usr/local里。
Qt4.5.1触摸屏+tslib1.4移植全记录Qt4.5.1触摸屏+sqlite3 移植全记录主机系统:Debian 5.0主机编译器:gcc/g++为4.1.3交叉编译器:arm-linux-gcc/g++3.4.5-glibc-2.3.6软件资源:qt-embedded-linux-opensource-src-4.5.1.tar.gzqt-x11-opensource-src-4.5.1.tar.gztslib-1.4.tar.gz目标板:博创UP-TECH S24101. 安装X11的相关库文件和开发包在编译时会生成一些在主机上运行的工具,要用到X11的一些头文件、库,所以需要安装X11开发包。
#sudo apt-get -y install x-dev libx11-dev xlibs-static-dev x11proto-xext-dev libxext-dev libqt3-mt-dev#sudo mkdir -p /usr/X11R6/include#sudo cp -rf /usr/include/X11 /usr/X11R6/include(参考韦东山《嵌入式Linux应用开发完全手册》)2.安装交叉编译器arm-linux-gcc-3.4.5(1) 新建安装目录:#mkdir /usr/local/arm(2) 解压arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2把arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2复制在目录/usr/local/arm下,在终端中进行如下操作:#cd /usr/local/arm#tar jxvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2等待解压完成。
(3) 导入环境变量export PATH=$PATH:/usr/local/arm/3.4.5/bin或者:编辑一个导入环境变量的脚本(方便以后使用):#vi ArmEnv1 #!/bin/sh2 export PATH=$PATH:/usr/local/arm/3.4.5/bin#chmod +x ArmEnv //增加可执行权限#arm-linux-gcc -v这样就把交叉编译器的地址变量设置好了,但这样设置路径变量的方法只在此终端中生效,对其他的终端无效,若要设置对所有用户所有终端都有效的路径变量,在/etc/profile 中最后一行添加“export PATH=/usr/local/arm/3.4.5/bin:$PATH”(不推荐这种方式)。
opencv2.4.9下载不用说了。
Ubuntu12.04虚拟机安装的+arm-hisiv200-linux交叉编译器+cmake-gui(2.8.7)参考:/luotuo44/article/details/8958990/s/blog_92942dba0101d1wj.html一、建立编译环境配置进入opencv-2.4.9目录建立release-hisiv200目录存放编译过程中文件。
#cd opencv-2.4.9#mkdir release-hisiv200#cd release-hisiv200打开cmake-gui,进行博客中的配置:#cmake-gui在configure时选择CMAKE_SYSTEM_NAME:arm-hisiv200-linuxC:选择/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gccC++:选择/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-g++ 修改安装目录:CMAKE_INSTALL_PREFIX:/opt/2.4.9-arm-hisiv200进行编译:make二、出现问题:1、/usr/lib/libImath.so: could not read symbols: File in wrong formatcollect2: ld returned 1 exit statusmake[2]: *** [lib/libopencv_highgui.so] 错误1make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] 错误2make: *** [all] 错误2主要opencv编译OPENEXR时要用到libImath.so,所有我就把那个取消了,然后编译就没出现过这个问题。
QT4编程及移植(系统移植之3)一、搭建Qt-creator环境QT开发工具被诺基亚收购后,由诺基亚对齐进行维护和技术支持。
目前诺基亚已经开发出一套界面整洁功能强大的QT IDE开发环境——QT-creator。
由于大多数人仍习惯Windows系统下的软件开发和设计,一下将以QT-creator Windows版本环境作为介绍(当然IDE也有Linux版本)。
1.1下载并安装QT-creator从网上下载qt-sdk-win-opensource-2010.02.1.exe文件,并在Windows下将其安装好。
1.2新建工程打开Qt Creator,点击File->new file or project,弹出以下窗口:点击Qt4 Gui Application->OK,弹出以下窗口:输入工程名、选择保存路径,点击Next,弹出以下窗口:这里是选择第三方库的支持,我们这个工程不需要这些,直接点击Next,弹出以下窗口:在Base class中选择QWidget,表示窗口部件以QWidget为基类,然后点击Next,弹出以下窗口:然后点击Finish完成工程创建,创建好的工程如下:双击打开main.cpp,编写代码如下:#include <QtGui/QApplication>#include <QHBoxLayout>#include <QSlider>#include <QSpinBox>#include "widget.h"int main(int argc, char *argv[]){QApplication a(argc, argv);//管理整个应用程序用到的资源QWidget *window = new QWidget;//创建一个QWidget,父窗口部件是QWidget window->setWindowTitle("Enter Your Age");//设置QWidget的标题QSpinBox *spinBox = new QSpinBox;//创建QSpinBoxQSlider *slider = new QSlider(Qt::Horizontal);//创建QSliderspinBox->setRange(0,130);slider->setRange(0,130);//以下两句关联信号和槽QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));//以下两句使同步显示QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));spinBox->setValue(35);//初始化//以下做布局处理QHBoxLayout *layout = new QHBoxLayout;//水平排列,从左到右layout->addWidget(spinBox);layout->addWidget(slider);window->setLayout(layout);//在窗口上安装布局管理器window->show();//让窗口显示return a.exec();//将应用程序的控制权传递给QT}点击Qt Creator左下角的运行按钮(即第一个绿色三角形):显示效果如下:到这里已经完成了一个QT工程。
qt-4.8.4安装和环境变量配置在Linux中分别安装应⽤于不同平台的Qt:PC。
嵌⼊式X86;ARM。
这三者PC版、嵌⼊式X86版和ARM版的差别主要体如今:当configure时分别加了不同的參数,详细差别是:PC平台(X11平台):在linux中全安装qt。
⽤它编译好程序后,直接⽤“./”就可执⾏。
嵌⼊式X86平台:带有qvfb功能,在PC机上能够模拟应⽤程序在arm开发板上的执⾏情况。
⽤此编译好的程序,仅仅⽤“./”命令不能够执⾏,必须加上參数 [ -qvfb ]–qwsPs:嵌⼊式X86平台,这个是PC下的⼀个qtopia。
他⾃带有个模拟器。
能够模拟出arm开发板的样⼦出来。
⽅便调试;ARM平台:编译好的程序。
⽤于在arm平台上执⾏。
Ps:ARM平台。
这个主要是⽤来编译,由于要下载到开发板上。
须要arm版的qte的库⽂件,编译后直接下载到开发板执⾏; Ps:编译x86是为了得到makeqpf。
编译pc是为了得到qvfbA. 安装PC平台的QT1) 配置:执⾏./configure -prefix /usr/local/qt-4.8.4-x112) 编译:make (时间⽐較长)3) 安装:make install (因为在配置时指定了安装⽂件夹,这样将被安装到⽂件夹下/usr/local/qt-4.8.4-x11)B. 安装ARM平台的QT/E1)配置:进⼊cd qt-4.8.4-arm,然后执⾏./configure \-opensource \-confirm-license \-release -shared \-embedded arm \-xplatform qws/linux-arm-g++ \-depths 4,8,16,32 \-fast \-optimized-qmake \-pch \-qt-sql-sqlite \-qt-libjpeg \-qt-zlib \-qt-libpng \-qt-freetype \-little-endian -host-little-endian \-no-qt3support \-no-libtiff -no-libmng \-no-opengl \-no-mmx -no-sse -no-sse2 \-no-3dnow \-no-openssl \-no-webkit \-no-qvfb \-no-phonon \-no-nis \-no-opengl \-no-cups \-no-glib \-no-xcursor -no-xfixes -no-xrandr -no-xrender \-no-separate-debug-info \-nomake examples -nomake tools -nomake docs \-qt-mouse-tslib \-I/usr/local/tslib/include \-L/usr/local/tslib/lib2) 编译:make (时间⽐較长)3) 安装:make install环境变量配置:#!/bin/shexport TSLIB_ROOT=/usr/local/tslibexport TSLIB_TSDEVICE=/dev/input/event0export TSLIB_TSEVENTTYPE=H3600export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.confexport TSLIB_PLUGINDIR=/usr/local/tslib/lib/tsexport TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export QTDIR=/opt/qt-4.8.4/export QT_QWS_FONTDIR=/opt/qt-4.8.4/lib/fontsexport LD_LIBRARY_PATH=$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/binexport QWS_DISPLAY="LinuxFb:mmWidth152:mmHeight88:1"。
OpenCV的Ubuntu安装和Smart210_ARM开发板移植软硬件环境:宿主机:Ubuntu 10.04 32bit开发板:友善之臂Smart210OpenCV:2.4.10其他:cmake version 2.8.0arm-linux-g++ 4.5.1 / arm-linux-gcc 4.5.1查看Ubuntu版本号的指令为:sudo lsb_release –a,效果如下图1:图1:查看ubuntu的版本号1.Opencv2.4.10在Ubuntu上安装●首先安装必要的软件库安装GCC:sudo apt-get install build-essential安装Cmake:sudo apt-get install cmake安装Git(可选):sudo apt-get install git安装GTK开发版:sudo apt-get install libgtk2.0-dev安装pkg-config:sudo apt-get install pkg-config安装Python:sudo apt-get install python3.2-dev安装Numpy:sudo apt-get install python-numpy安装媒体包:sudo apt-get install ffmpeg安装可选媒体包:sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev●在OpenCV官网下载源码包:/●在/home/brodon/Documents文件夹下解压缩后,命令行输入cmake-gui,配置opencv的x86版本。
具体的操作见图2,注意在安装中,放弃了ffmpeg,OpenGL 库的支持。
cmake完成后进入opencv-x86文件夹,输入make 和make install安装。
Keil3(ADS)到Keil4(MDK)移植总结1.在启动文件startup.s中CODE32下面添加语句:PRESERVE8同样在IRQ.s文件中CODE32下面添加语句:PRESERVE8原因:PRESERVE8 指令指定当前文件保持堆栈八字节对齐。
报错:Error: L6238E: startup.o(vectors) contains invalid call from '~PRES8 (The user did not require code to preserve 8-byte aligment of 8-byte dataobjects)' function to 'REQ8 (Code was permitted to depend on the8-byte aligment of 8-byte data items)' function FIQ_Exception.2.在option属性中Asm选项卡中去掉Enable ARM/Thumb Interworking选项。
报错:若不去掉该选项,在编译时会出现警告:warning: A1608W: MOV pc,<rn> instruction used, but BX <rn> is preferred。
或者不去掉该选项,而将报错信息中的MOV pc,<rn>指令改写成BX <rn>形式指令也可消除警告。
注意:如果程序中存在ARM和Thumble指令相互调用的情况,那么使用BX指令能够返回到正确的处理器状态。
而使用MOV指令则不能实现处理器状态的切换,所以keil编译器建议使用BX指令。
3.Linker选项卡设置a.去掉Use Memory Layout from Target Dialog选项,添加分散加载文件,在Misccontrols选项中添加--info totals --entry 0x00000000 --scatter .\mem_c.scf --info sizes(根据实际工程)(可行)b.勾选Use Memory Layout from Target Dialog选项,在Misc controls选项中添加--info totals --entry 0x00000000 --scatter .\mem_c.scf --info sizes(根据实际工程)(可行)c.勾选Use Memory Layout from Target Dialog选项,在Misc controls选项中不添加内容,则编译报错:error: L6236E: No section matches selector - no section to be FIRST/LAST.d.去掉Use Memory Layout from Target Dialog选项,不添加分散加载文件,在Misc controls选项中不添加内容,则报错:2132.axf: Warning: L6914W: option ro-base ignored when using --scatter.2132.axf: Warning: L6914W: option rw-base ignored when using --scatter.但程序能运行e.去掉Use Memory Layout from Target Dialog选项,添加分散加载文件,在Misccontrols选项中不添加内容,则警告:2132.axf: Warning: L6305W: Image does not have an entry point. (Not specified or not set due to multiple choices.)但程序能运行4.Debug选项卡设置选择右侧的Use RDI选项,如图(如果没有该选项,则需要安装控件)在setting中选择对应的RDI驱动DLL5.Utilities选项卡设置去掉Update T arget before Debugging选项,否则编译可以通过,但不能下载,报错:Error:Flash Download failed – ARM7TDMI6.Target.c文件中断处理函数不要添加__irq关键字。
在HI3531上移植和运行QT4.8.6
1、前言:
近段有点时间,想把QT移植到HI3531上,在网上查找了很多资料,但都不是很全面,有些有问题也没有得到很好的体现。
2、环境:
PC:ubuntu10.04
HI3531交叉工具链:arm-hisiv100nptl-linux-
QT版本:qt4.8.6(Qt libraries 4.8.6 for embedded Linux (230 MB)
QT-Creator版本:qt-creator-linux-x86-opensource-2.4.1.bin
3、交叉编译:
1)进入qt-everywhere-opensource-src-4.8.6/mkspecs/qws目录,新建
linux-hisi3531nptl-g++目录,复制linux-arm-g++目录下的所有文件到linux-hisi3531nptl-g++
cp –a linux-arm-g++/* linux-hisi3531nptl-g++
2)进入linux-hisi3531nptl-g++,修改文件qmake.conf
# modifications to g++.conf
QMAKE_CC = arm-hisiv100nptl-linux-gcc
QMAKE_CXX = arm-hisiv100nptl-linux-g++
QMAKE_LINK = arm-hisiv100nptl-linux-g++
QMAKE_LINK_SHLIB = arm-hisiv100nptl-linux-g++
# modifications to linux.conf
QMAKE_AR = arm-hisiv100nptl-linux-ar cqs
QMAKE_OBJCOPY = arm-hisiv100nptl-linux-objcopy
QMAKE_STRIP = arm-hisiv100nptl-linux-strip
3)打开文件qplatformdefs.h增加
#undef O_CLOEXEC
此处主要为解决:编译过程中找不到accept4函数问题
4)安装X11库
sudo apt-get install libX11-dev libXext-dev libXtst-dev
5)返回源码目录qt-everywhere-opensource-src-4.8.6进行配置
./configure --prefix=/opt/qt4.8.6 -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++ -xplatform qws/linux-hisi3531nptl-g++ -little-endian -qt-freetype -no-opengl -no-glib
-nomake demos -nomake examples -nomake docs -nomake tools
其中:--prefix=/opt/qte4.8.6 为交叉编译目标安装目录
-xplatform qws/linux-hisi3531nptl-g++指定编译器及平台配置信息5)make
6)make install
4、PC编译:
1)重新解压qt-everywhere-opensource-src-4.8.6.tar.gz,进行PC编译
2)./ configure
3)make
4)make install
5、安装QT开发环境
1)sudo ./qt-creator-opensource-linux-x86-2.4.1.run
2)下一步直到安装完成
3)在应用程序,就可以看到QT Creator
6、配置开发环境
1)从PC的QT安装目录中拷贝如下文件到交叉编译目录
cp /usr/local/Trolltech/Qt-4.8.6/bin/qml* /opt/qt4.8.6/bin/
2)打开QT Creator
3)打开工具-选项-QT版本
4)打开添加按键,添加交叉编译的qmake
5)进入工具链,打开添加按键,选择GCCE,在编译器路经选择
arm-hisiv100nptl-linux-g++的路经
到些就可以编译QT下自带的例子chip了,但这时在HI3531上还是不能显示的。
7、配置海思HI3531
1) 按照《HIFB开发指南.pdf》说明加载hifb.ko驱动,这里需要说明的是,
如果QT程序运行在fb0上,分辨率为1920*1080,颜色格式为ARGB8888,1buffer模式下,则需要vram0_size = 1920*1080*4=8100K
如果为2 buffer模式下则需要vram0_size=1920*1080*4*2=16200K
说明:为什么要使用ARGB8888而不用ARGB1555,是因为我们QT编译使用的是32位framebuffer。
不然的话会做不了透明处理。
2)使能fb0,前提是VO设备已初始化完毕
static struct fb_bitfield g_r32 = {16,8, 0};
static struct fb_bitfield g_g32 = {8, 8, 0};
static struct fb_bitfield g_b32 = {0, 8, 0};
static struct fb_bitfield g_a32 = {24, 8, 0};
HI_BOOL show;
HIFB_ALPHA_S stAlpha;
struct fb_var_screeninfo stVarInfo;
fd = open("/dev/fb0", O_RDWR, 0);
show = 0x0;
ioctl(fd, FBIOPUT_SHOW_HIFB, &show);
stAlpha.bAlphaEnable = 0x1;
stAlpha.bAlphaChannel = 0x0;
stAlpha.u8Alpha0 = 0x0;
stAlpha.u8Alpha1 = 0xff;
stAlpha.u8GlobalAlpha = 0xff;
ioctl(fd, FBIOPUT_ALPHA_HIFB, &stAlpha);
ioctl(fd, FBIOGET_VSCREENINFO, &stVarInfo);
stVarInfo.xres = 1920;
stVarInfo.yres = 1080;
stVarInfo.xres_virtual = 1920;
stVarInfo.yres_virtual = 1080;
stVarInfo.transp= g_a32;
stVarInfo.red = g_r32;
stVarInfo.green = g_g32;
stVarInfo.blue = g_b32;
stVarInfo.bits_per_pixel = 32;
stVarInfo.activate = FB_ACTIV ATE_NOW;
ioctl(fd, FBIOPUT_VSCREENINFO, &stVarInfo);
show = 0x1;
ioctl(fd, FBIOPUT_SHOW_HIFB, &show);
while(1)
{
Sleep(100);
}
3)配置设备linux环境变量
export QT_QWS_FONTDIR=/usr/lib/fonts //字库的目录
export QT_QWS_DISPLAY=“linuxFB:/dev/fb0“//QT显示在fb0层8、运行CHIP
OK
9、实现背景透明
只需要调用QWSServer::setBackground(QColor(0,0,0,0));即可关于这个QColor,在设置的时候,是按照ARGB8888来设置的,前三个数值是RGB,最后一个数值是透明度,0x00是全透,0x7f是半透,0xff是不透。
10、如何显示中文
从c:\windows\fonts 目录下复制*.ttf文件到字库目录,就可以显示了,但字体需要设置大些。