高手指点:移植qtopia-opensource-4.2.0 到开发板

weixin_38063433 2019-09-19 04:02:04
最近在移植qtopia-opensource-4.2.0 到开发板,移植过程是这样的:一、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二、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就不用改了。第四步:生成Makefilecd ../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=800x600    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是通过NFS挂载在开发板上的,但最后在开发板上运行的时候,没有QT的界面,在开发板的根目录下建了一些文件,把开发板FLASH就占完了,然后就是一大堆错误,请问有没有谁遇到过类似的问题,或指点迷津该怎么移植?
...全文
14 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧