Qtopia 是Trolltech 公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台, Qtopia包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。下面便是他的移植过程。

硬件s3c2410
    主机环境:red hot企业版 5.0
    交叉编译工具:gcc-3.4.5-glibc-2.3.6
    主机编译工具:gcc-4.1
    Qtopia源码:qtopia-opensource-src-4.2.0.tar.gz
    tslib源码:tslib-1.4.tar.gz

一、tslib移植

第一步:解压tslib-1.4.tar.gz

tar -zxvf tslib-1.4.tar.gz

第二步:进入解压过的目录

cd tslib-1.4

第三步:执行tslib-1.4目录下的autogen.sh

./autogen.sh

这一步需要安装一些工具:sudo apt-get install automake

第四步:执行autogen.sh脚本所生成的Makefile文件

请打入以下命令:
    echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache
    ./configure --host=arm-softfloat-linux-gnu   --prefix=/home/linux/tslib --cache-file=$ARCH-linux.cache

--host是指你的交叉编译器的前最;例如:你的交叉编译器是arm-linux-gcc,则--host=arm-linux.如果是arm-softfloat-linux-gnu-gcc
则--host=arm-softfloat-linux-gnu

--prefix 是你执行make install 的时候编译后生成的可执行文件和库文件以及配置文所安装的目录;

configure文件下还有好多选项;你可以执行./configure --help 来进行选择其他项,不过在这里这些选项就够了。

第五步:执行make

第六步:执行make install

第七步:把指定安装目录下的tslib的文件都copy到你所挂载的根文件下

sudo cp -rf /home/linux/tslib/*       /rootfs/tslib

第八步:修改/rootfs/tslib下的etc目录中ts.cong文件

vi ts.conf   将第二行的#module_raw input修改成module_raw input 注意一定要顶格写否则程序执行时会发生读取ts.conf错误

二、Qtopia移植

第一步:解压qtopia-opensource-src-4.2.0.tar.gz

tar zxvf qtopia-opensource-src-4.2.0.tar.gz
             mv qtopia-opensource-4.2.0 source

第二步:创建在source同级目录下创建目录target

mkdir target

第三步:修改源码包

1、 
            # cd source 
            # cd src/libraries/qtopiabase/ 
            # cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h 
            # cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp

2、修改时区信息

# vi src/libraries/qtopia/qtimezone.cpp

将114行的 /usr/share/zoneinfo/ 改为/Qtipia/zoneinfo/ ,保存退出。 
            # vi src/settings/systemtime/settime.cpp 
            将318行的 /usr/share/zoneinfo/ 改为/Qtipia/zoneinfo/ ,保存退出。

3、裁减Qtopia core的库(下列操作后在屏幕上会出现一个光标,否则没有光标根据需求配置)

(1)# vi qtopiacore/qconfig-qpe.h

首先注释掉关于鼠标光标的宏定义,让程序运行时,触摸屏中央有光标出现: 
            // Qtopia Core 
            /* 
            #ifndef QT_NO_QWS_CURSOR 
            # define QT_NO_QWS_CURSOR 
            #endif 
            */ 
            /* 
            #ifndef QT_NO_QWS_MOUSE 
           # define QT_NO_QWS_MOUSE 
            #endif 
            #ifndef QT_NO_QWS_MOUSE_AUTO 
            # define QT_NO_QWS_MOUSE_AUTO 
            #endif 
            */ 
            其它宏定义根据需要进行注释。 
            保存后将qconfig-qpe.h拷贝到global目录。 
            # cp qtopiacore/qconfig-qpe.h qtopiacore/qt/src/corelib/global/qconfig-qpe.h (必须进行的操作)

(2)注释掉其他文件里的QT_NO_QWS_CURSOR的定义

# vi qtopiacore/qt/src/corelib/global/qfeatures.h

注释掉如下内容: 
            /* 
            #if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR)) 
            #define QT_NO_QWS_CURSOR 
            #endif 
            */ 
            保存退出。

(3)# vi qtopiacore/qt/src/corelib/global/qglobal.h

注释掉以下内容: 
            //# define QT_NO_QWS_CURSOR

4、下面是对编译过程中出现的错误进行的一些修改:

(1)vim qtopiacore/qt/tools/qvfb/qvfbshmem.cpp

注释掉asm/page.h 
            //#include <asm/page.h>

(2)vim qtopiacore/qt/tools/qvfb/qvfbmmap.cpp

注释掉asm/page.h 
            //#include <asm/page.h>

并修改如下内容

unsigned char *data; 
            uint data_offset_value = sizeof(QVFbHeader); 
            if (data_offset_value % PAGE_SIZE) 
            data_offset_value += PAGE_SIZE - (data_offset_value % PAGE_SIZE);

为:

unsigned char *data; 
            uint data_offset_value = sizeof(QVFbHeader); 
            const int page_size = getpagesize(); 
            if (data_offset_value % page_size) 
            data_offset_value += page_size - (data_offset_value % page_size);

(3)vim src/libraries/qtopiabase/qmemoryfile_unix.cpp +128

修改

f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY);

为:

f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY ,0777);

4、修改交叉工具

vim qtopiacore/qt/mkspecs/qws/linux-arm-g++/qmake.conf

将文件中的arm-linux-***全部修改为arm-softfloat-linux-gnu-**

这样做的前提是我的交叉工具链是arm-softfloat-linux-gnu,如果你的是arm-linux就不用改了。

第四步:生成Makefile

cd ../target

../source/configure -release -image /Qtopia -prefix /Qtopia -xplatform linux-arm-g++ -arch arm -no-qvfb -displaysize 320x240 -no-modem -extra-qtopiacore-config "-release -xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 4,8,16,32 -qt-sql-sqlite -no-mouse-linuxtp -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib " 2>../configureERR.tx

注意:这里/Qtopia是最后Qtopia的安装路径,安装到主机的某个路径下,最终这个路径和目标板上的路径必须一致。

主要配置选项解说如下:

-xplatform linux-arm-g++ -arch arm

目标平台为arm-linux,体系结构为arm。

-no-qvfb

目标平台已支持framebuffer,因而不使用虚拟帧缓冲。

-extra-qtopiacore-config

为Qtopia core 配置选项。

-xplatform qws/linux-arm-g++ -embedded arm

目标平台编译配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目录下的配置文件,嵌入式平台为arm。

-qconfig qpe

使用配置文件qconfig-qpe.h,若使用qconfig-large.h配置文件,则使用-qconfig large选项。

-qt-sql-sqlite

数据库支持Sqlite。

-qt-kbd-usb

键盘支持usb协议。

-no-mouse-linuxtp -qt-mouse-tslib

-I/home/linux/tslib/include -L/home/linux/tslib/lib

触摸屏协议不支持linuxtp,支持tslib,并在后面添加上刚才编译的tslib的头文件和库。

2>../qtopiaconfigureERR.txt

最后将配置过程中的错误输出到qtopiaconfigureERR.txt文件中。

第五步:make

第六步:make install

第七步:cp source/etc/zoneinfo /Qtopia/ -a

第八步:将安装和的目录考到nfsroot目录下

cp /Qtopia /rootfs -a

第九步:配置目标板环境变量脚本

vim qtopia.sh

添加如下内容:

#!/bin/sj
    export TSLIB_ROOT=/tslib
    export TSLIB_TSDEVICE=/dev/event0
    export LD_LIBRARY_PATH=/tslib/lib:$LD_LIBRARY_PATH
    export QWS_SIZE=320x240
    export TSLIB_FBDEVICE=/dev/fb0
    export TSLIB_PLUGINDIR=/tslib/lib/ts
    export TSLIB_CONSOLEDEVICE=none
    export TSLIB_CONFFILE=/tslib/etc/ts.conf
    export POINTERCAL_FILE=/etc/pointercal
    export QWS_MOUSE_PROTO=Tslib:/dev/event0
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_TSEVENTTYYPE=H3600i
    export LD_LIBRARY_PATH=/Qtopia/lib:$LD_LIBRARY_PATH
    export QWS_SW_CURSOR
    export set HOME=/root
    export set QPEDIR=/Qtopia
    export set QWS_KEYBOARD="TTY:/dev/tty1""
    export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"

三、启动Qtopia

第一步:目标板开机

第二步:运行脚本qtopia.sh

./qtopia.sh

第三步:运行qpe

/Qtopia/bin/qpe

这个时候就能看到一个漂亮的界面了。

Qtopia移植的更多相关文章

  1. Qt4.8.5在ARM9上的移植

    Qt4.8.5在ARM9开发板上的移植 以前移植过qtopia-embedded-2.2.0,俗称Qt/E,在早期的Qt框架中是使用X11桌面服务器系统,无法应用于嵌入式平台,为此产生了qtopia, ...

  2. 基于mini2440的boa服务器移植

    win7 系统  开发板:mini2440 虚拟机:ubuntu12.04 准备工作:确保主机与开发板之间能够正常通信,即能够ping通,具体的操作课参考我上一篇随笔. 1.首先从 http://ww ...

  3. Linux之开源软件移植

    移植环境 Utuntu 15.04 1.mplayer移植 版本:mplayer-export-snapshot.tar.bz2 /mplayer-export-2015-11-26 Linux PC ...

  4. Tslib的移植【转】

    转自:http://www.cnblogs.com/uvsjoh/archive/2011/08/25/2152947.html移植Tslib 1 下载源码tslib-x.x.tar.gz 2 解压, ...

  5. 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)

    目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for w ...

  6. 非常详细的ok6410的linux系统移植…

    目录 Linux 3.3.5系统移植 2 LED驱动移植 8 按键驱动移植 9 LCD驱动移植 11 DM9000网卡驱动移植 14 搭建NFS网络文件系统 25 移植触摸屏驱动 38 移植Qt4.8 ...

  7. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  8. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)

    首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...

  9. Linux主机上使用交叉编译移植u-boot到树莓派

    0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...

随机推荐

  1. seq(2018.10.24)

    一道\(dp\)题... 期望\(40\)分解法 预处理:离散化,然后让连续一段值相同的元素合并为一个元素. 正式\(DP\): 显然有个最差策略为每个元素处都切一次,则切的次数为元素的个数\(-1\ ...

  2. Jquery | 基础 | 项目实践

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Java中的list与Set、Map区别及适用场景

    Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类,但是却让其被继承产生了两个接口,就是Set和List.Set中不能包含重复的元素.List是一个有序的集合,可以包含 ...

  4. python+selenium+requests爬取qq空间相册时遇到的问题及解决思路

    最近研究了下用python爬取qq空间相册的问题,遇到的问题及解决思路如下: 1.qq空间相册的访问需要qq登录并且需是好友,requests模块模拟qq登录略显麻烦,所以采用selenium的dri ...

  5. 如何正确在IDEA 里非maven或非SBT构建的项目中引入lib的jar包(图文详解)

    以下是我,手动的一个项目 假设,大家,还需要导入 导入spark的jar包:是安装主目录下的jars所有jar包和examples/jars包.

  6. java 并发容器一之BoundedConcurrentHashMap(基于JDK1.8)

    最近开始学习java并发容器,以补充自己在并发方面的知识,从源码上进行.如有不正确之处,还请各位大神批评指正. 前言: 本人个人理解,看一个类的源码要先从构造器入手,然后再看方法.下面看Bounded ...

  7. 转:android 屏幕适配小结

    做android开发,开源嘛,满市场都是凌乱的机型,总少不了适配这样或那样的型号.在这里分享一下自己在开发中用到的方法. 首先要介绍一下drawable-mdpi.drawable-hdpi-1280 ...

  8. GP SQL 优化

    1.收集统计信息vacuum full analyze ZCXT.ZCOT_PS_PROJECT; 2.检查表的数据量分布select gp_segment_id,count(*) from fact ...

  9. Win7下vc++6.0打开项目出现问题的解决方案

    Win7下vc++6.0打开项目出现Microsoft(R) Developer Studio以及Unable to register this add-in because its DLLRegis ...

  10. Android(java)学习笔记148:网易新闻RSS客户端应用编写逻辑过程

    1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...