`
javasogo
  • 浏览: 1770660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

MeeGo handset 1.1开发环境[4]:在SDK上实现Hello World

阅读更多

  我们会follow wiki的guide,通过QT Creator在模拟器上运行hello world程序,然后我们会对模拟器作进一步的探讨。

wiki上的参考:

  1. http://wiki.meego.com/Getting_started_with_the_MeeGo_SDK_for_Linux
  2. http://wiki.meego.com/SDK/Docs/1.1/Creating_Hello_World

一、通过QT Creator来创建

1. 在QT Creator中配置cross complie toolchain

  在QT creator(在应用程序-》编程-》QT Creator)中的菜单Tools > Options > Qt4 > Qt Versions,增加target的编译:/usr/lib/madde/linux-i686/targets/meego-handset-ia32-1.1/bin/qmake,取一个名字吧,MeeGo IA32 4.7.0,如果下图所示。

  增加后,按rebuild->apply/OK,QT Creator就增加这个交叉编译环境,我们可以增加其他的编译环境,例如 我也增加一个本地的也就是host的qmake,路径为:/opt/meego/meego-sdk-qt/bin/qmake,名字我起来MeeGo SDK QT,可以作为PC版本的编译。(这个可以不需要,如果我们之考虑MeeGo的handset版本)。

2. Hello World的创建project

  步骤为:File > New File or Project. 选择Mobile Qt Application and click Choose,然后根据步骤点下去。自动创建了一个Project:qthello。编辑这个project的文件,可以从左边的工具栏中选取Edit,这些都是常见的IDE开发环境的东东。我们修改一下这个小例子,如下:

#include <QApplication>
#include <QLabel>
#include <QSystemInfo>
using namespace QtMobility;

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QSystemInfo s;
  QLabel *label = new QLabel(QObject::tr("hello ").append(s.currentCountryCode()));
  label->show();
  label->resize(100,30);
  return app.exec();
}

  进行编译:qthello.pro实际是一个makefile文件,可以对里面进行修改,例如在这个例子中,增加如下两行,然后保存。
CONFIG += mobility
MOBILITY += systeminfo

3. Build

  project,在build和run中选择build:
On Edit build configuration: line, select Add > Using Qt version "MeeGo sysroot".
Change Debug into MeeGo sysroot Release.

  配置好后,可以进行编辑,在菜单的build下面,我们注意到这里几个目录,我们看到为target而build的路径,以及rpm软件包所在的位置。按了Build以后,完成编译。在bulid目录下有rpm的spec文件,我们在rrpmbuild中看到rpm包,已经在target中安装路径instroot。回头看看qthello.pro的文件,其中有target.path=/usr/local/bin,这样我们会在rppmbuild目录下面的instroot/usr/local/bin中看到rpm包所要安装的东西,其实通过spec,我们可以设置一些图标等内容,这在以前学习过。

4. 执行

  QT creator提供了一些导入target的工具,我们使用的是emulator,就是之前利用qemu,MeeGo推荐使用mad-admin的方式。我们在模拟器中已经安装了ssh server,现在利用ssh将内容导入,并运行。roject,在build和run中选择run,填入名称,选择MeeGo Emulator,并在manage device configurations中,我们可以看到相关的ssh的配置,如下图所示:

  这样target的运行环境就好了。打开我们的emulator,$ mad remote -r meego-handset-ia32-qemu-1.1.20101031.2201-sda-runtime poweron,或者使用qemugl的方式。然后在QT creator中左边工具栏有个三角的运行符号,按之,将会安装在emulator中,并运行之。如下图所示

二、 进一步使用目标环境

1.SSH和ssh -X

  我们先通过$ mad remote -r meego-handset-ia32-qemu-1.1.20101031.2201-sda-runtime poweron开启模拟器。在qemugl的尝试中,以及在QT Creator中,我们知晓已经安装了open ssh server以及gdb server,另外我们可以通过mic-chroot来进行命令行的的交错编译(这个我比较喜欢)。编译的过程不在这里考虑。

  在交错编译环境中获得的rpm包,可以同scp拷贝到模拟器的i㎎上,例如 scp -P 6666 /root/rpmbuild/RPMS/i386/kernel-2.6.35.3+-1.i386.rpm root@127.0.0.1:/root/

  ssh登录上模拟器,可以采用$ ssh meego@localhost -p 6666 或者 $ ssh root@localhost -p 6666 ,密码都是meego。

  我们也可以采用登录x windows的方式: ssh -X meego@localhost -p 6666 。这样当我运行一个带界面的程序,在这个例子,中例如qthello,可以在本机桌面生成,对于ubuntu,在右上角。(注意不是在模拟器上)。从这个小例子中,我们也可以了解到handset的MTF架构中,采用的全屏的方式。弹指显示方面有些不一样,handset的显示如上图,ssh -X的显示为:hello CN,CN为我本机的环境。在man中是这样介绍的:-X Enables X11 forwarding. 一般而言-X都是被禁止的,因为这又安全性的隐患,但在模拟器调测中很适用。

2.gdbserver和gdb

  关于通过gdb server来调测,我们仍然利用ssh -X的参数,在本端启动UI程序。通过ssh -X登录模拟器,运行#gdbserver 127.0.0.1:13219 qthello,即哟女孩活gdbserver对qthello进行调测,由于qthello放入/usr/local/bin中,因此无须写路径。显示:

root@meego-handset-sdk:/# gdbserver 127.0.0.1:13219 qthello
Process qthello created; pid = 682
Listening on port 13219

  在host上,启动gdb,$ gdb qthello,进入

$ gdb qthello
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
qthello: 没有那个文件或目录.
(gdb) target remote 127.0.0.1:13219
Remote debugging using 127.0.0.1:13219
warning: Could not load vsyscall page because no executable was specified
try using the "file" command first.
0x4b13d850 in ?? ()
(gdb) continue

  可以使用run,continue等debug的命令。

三,在ssh中将app运行在qemu中。

  从QT Creator中,我们知晓可以通过ssh将运行显示在模拟器上。我们通过ps查到,模拟器窗口为/dev/pts/1,但是目录了很久,都无法将输出重定向在pts/1上。所以此路不同,通过history,我们查到了QTCreator运行的命令:

sudo rpm -i --force qthello-0.0.1-1.i586.rpm && sudo sudo chmod a+x /usr/local/bin/qthello && source /etc/profile && export DISPLAY=:0 && sudo su -m meego -c 'xhost + '; /usr/local/bin/qthello ;echo Ꭰ

  步骤如下:

1. 打开ssh,例如ssh root@localhost -p 6666,

2. 此前,在通过QtCreator中,已经将qthello的rpm下载到i㎎中,并已经安装好.

3. 在ssh的命令行中,输入:# export DISPLAY=:0 ,这样,设置好环境,可以通过运行# qthello或者# /usr/local/bin/qthello,就可以在模拟器中显示。

相关链接:我的MeeGo/Moblin相关文章

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics