在ubuntu14.04.1中将qt4.8.6移植到基于hi3520d的nvr上
来源:互联网 发布:如何创建域名 编辑:程序博客网 时间:2024/06/08 18:22
准备工作
在开始之前,你需要有在同一局域网内的一台宿主机(在上面装一台虚拟机)、一台基于hi3520d的nvr。
我的宿主机是win8.1,虚拟机是virtual box+ubuntu:
virtual box安装包(VirtualBox-5.0.10-104061-Win.exe)
ubuntu镜像(ubuntukylin-14.04.1-desktop-i386.iso)
你还要有:
hi3520d交叉编译环境(arm-hisiv100nptl-linux.zip)
mpp头文件及库(mpp.zip)
qt4.8.6源码(qt-everywhere-opensource-src-4.8.6.tar.gz)
qt creator3.5.1安装包(qt-creator-opensource-linux-x86-3.5.1.run)
在ubuntu上mkdir nvr,将宿主机上的arm-hisiv100nptl-linux.zip、mpp.zip拖进去
在ubuntu上mkdir qt,将宿主机上的qt-everywhere-opensource-src-4.8.6.tar.gz、qt-creator-opensource-linux-x86-3.5.1.run拖进去
让ubuntu与宿主机、nvr互通
mount -t nfs -o nolock ubuntu的ip:/ /mnt
就可以在nvr上通过/mnt目录访问ubuntu上的根目录了
安装本机编译环境
安装交叉编译环境
unzip arm-hisiv100nptl-linux.zip
cd arm-hisiv100nptl-linux
chmod +x cross.install
sudo ./cross.install
安装qt creator
cd qt
chmod +x qt-creator-opensource-linux-x86-3.5.1.run
./qt-creator-opensource-linux-x86-3.5.1.run
编译arm版的qt
cd qt
tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz
mv qt-everywhere-opensource-src-4.8.6 qt-arm
cd qt-arm/mkspecs/qws/linux-arm-g++
gedit qmake.conf
将所有的arm-linux替换为arm-hisiv100nptl-linux
gedit qplatformdefs.h
添加#undef O_CLOEXEC,防止在编译过程中报找不到accept4的错
cd qt/qt-arm
./configure -prefix /opt/qt-arm -opensource -confirm-license -fast -no-largefile -no-exceptions -no-accessibility -no-qt3support -no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -xplatform qws/linux-arm-g++ -qt-gfx-linuxfb -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-neon -qt-zlib -no-gif -no-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-openssl -nomake demos -nomake examples -nomake docs -nomake tools -no-rpath -no-nis -no-cups -no-iconv -no-pch -no-dbus -embedded arm -little-endian
make
sudo make install
这样编译出的libQtCore、libQtGui大小分别是3.6mb、12mb,tgz压缩后6.2mb
我们的nvr,flash只有10mb,不可删除的daemon.exe、nvr_main.tgz、startapp、startapp_t占3071.6kb(2.9mb),也就是说nvr_gui.tgz最大不能超过7168.4kb(7mb),除去qt库所占的6.2mb,留给程序的只有0.8mb!在包含字体文件的情况下,这显然是不够用的,只能继续裁剪libQtGui了,如果工程比较简单的话,除此之外还有一个选择,那就是minigui。如果flash超过16mb的话,qt就是你的不二选择了。
-rw-r--r-- 1 root root 3.0M Oct 7 08:54 WWW.tgz
-rwxr-xr-x 1 root root 507.2K Apr 24 2015 daemon.exe
drwxr-xr-x 3 root root 0 Apr 24 2015 hiapp
-rw-r--r-- 1 root root 0 Oct 6 15:29 noreboot
-rw-r--r-- 1 root root 4.2M Nov 18 13:31 nvr_gui.tgz
-rw-r--r-- 1 root root 2.5M Aug 31 11:12 nvr_main.tgz
-rwxr-xr-x 1 root root 2.2K Apr 24 2015 startapp
-rwxr-xr-x 1 root root 2.2K Apr 24 2015 startapp_t
编译pc版的qt
cd qt
tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz
mv qt-everywhere-opensource-src-4.8.6 qt-pc
./configure TODO
make
sudo make install
在nvr上运行chip
chip是qt自带的demo,位于qt/qt-arm/demos/chip目录下
修改chip.pro,添加:
INCLUDEPATH += /home/mynamepfd/nvr/mpp/include
LIBS += -L/home/mynamepfd/nvr/mpp/lib -lmpi
修改main.cpp,头文件部分添加:
#if 1
#include "hi_common.h"
#include "hi_type.h"
#include "hi_comm_vo.h"
#include "mpi_vo.h"
#include "hifb.h"
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#endif
main函数开头添加:
#if 1
int fd;
HIFB_POINT_S stPoint = {0, 0};
VO_PUB_ATTR_S stPubAttr = {0};
HIFB_ALPHA_S stAlpha;
HIFB_COLORKEY_S stColorKey;
struct fb_fix_screeninfo fix;
struct fb_var_screeninfo var;
HI_MPI_VO_SetPubAttr(0, &stPubAttr);
HI_MPI_VO_Enable(0);
fd = open("/dev/fb0", O_RDWR);
ioctl(fd, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoint);
ioctl(fd, FBIOGET_VSCREENINFO, &var);
var.xres = var.xres_virtual = 1024;
var.yres = 768;
var.yres_virtual = 768;
/* ARGB8888 */
var.transp= {24, 8, 0};
var.red = {16, 8, 0};
var.green = {8, 8, 0};
var.blue = {0, 8, 0};
var.bits_per_pixel = 32;
ioctl(fd, FBIOPUT_VSCREENINFO, &var);
stAlpha.bAlphaEnable = (HI_BOOL)0;
stAlpha.bAlphaChannel = (HI_BOOL)0;
stAlpha.u8Alpha0 = 0xff;
stAlpha.u8Alpha1 = 0x8f;
stAlpha.u8GlobalAlpha = 0x80;
ioctl(fd, FBIOPUT_ALPHA_HIFB, &stAlpha);
stColorKey.bKeyEnable = (HI_BOOL)1;
stColorKey.u32Key = hifb_color2key(&var, 0x00001f);
ioctl(fd, FBIOPUT_COLORKEY_HIFB, &stColorKey);
#endif
这段代码是为了打开nvr上的fb0
在nvr上,mount好之后cd到chip所在目录,先export一些chip运行用到的环境变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/opt/qt-arm/lib
export QT_QWS_FONTDIR=/mnt/opt/qt-arm/lib/fonts
export QT_QWS_DISPLAY="linuxFB:/dev/fb0"
之后,./chip -qws
- 在ubuntu14.04.1中将qt4.8.6移植到基于hi3520d的nvr上
- Hi3520D 上移植 lighttpd
- QT4.8.2在hi3531上的移植
- QT4.6.3在TQ2440上的移植
- Etherlab在Ubuntu14.04上的移植
- 移植基于Qt4.4-tp1的WebKit到ARM平台
- 基于JZ2440的QT4移植
- 在HI3531上移植和运行QT4.8.6
- 在HI3531上移植和运行QT4.8.6
- Hi3519V101上移植QT4.8.6
- QT4.8.6移植到TQ2440
- qt4.8.6 移植到HI3531
- 在keil4中将FreeRTOS V8.2.3移植到STM32F103RCT6 cortex-M3平台上
- 在keil4中将FreeRTOS V8.2.3移植到STM32F103RCT6 cortex-M3平台上
- QT4在ubuntu上的安装及在mini2440上的移植
- 在Ubuntu14.04中安装海思平台上交叉编译的qt4.8.7
- 海思Hi3521a + Qt4.8.6移植+Ubuntu14.04.5LTS+Qtdemo测试
- ubuntu14.04安装arm版QT4.8.6(QtEmbedded-4.8.6-arm)并移植到开发板beagleboard-xm
- 【Windows】教你一步一步在Windows 7 系统上开启Telnet服务
- Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史.
- UVa 1347 Tour
- Android学习笔记之SimpleAdapter
- orcale 忘记密码
- 在ubuntu14.04.1中将qt4.8.6移植到基于hi3520d的nvr上
- Exchange 2010 Powershell之Search-MailBox!
- 扑克牌顺子
- JS去重方法
- 不得姐实战教程 02 配置tabbar
- 我的第一篇博客,决定做点技术
- MotionEvent 事件解读
- 向量几何在游戏编程中的使用3
- 开博客了