织梦CMS - 轻松建站从此开始!

罗索

在linux平台下面开发Symbian S60应用程序

jackyhwei 发布于 2010-11-09 21:48 点击:次 
开发symbian s60的手机应用已经有一段时间了,突发奇想希望试试能否在linux环境下面开发S60手机应用程序。于是乎google了一下,果然,即使这么一个小想法也早有国外的“大拿”们捷足先登了。
TAG:

不可否认,偶是linux的fans(这是真的,偶的家人可以作证,家里的所有电脑和笔记本、iPod、Ps2、Psp、PDA、手机,都被偶装上了linux。。。)。但是生活所迫,在公司的时候都要在M$的系统里面开发应用,感觉很不爽。开发symbian s60的手机应用已经有一段时间了,突发奇想希望试试能否在linux环境下面开发S60手机应用程序。于是乎google了一下,果然,即使这么一个小想法也早有国外的“大拿”们捷足先登了。

基本上,只要认真看过下面的url的朋友应该都能自己搭建起来这个开发平台:

我这里只是简要把自己的搭建过程记录下来,备忘:

(1)准备工作,下载一些sdk包和工具包:
http://www.martin.st/symbian/gnupoc-package-1.11.tar.gz,这个是gnupoc的脚本包
S60-SDK-200634-3.1-Cpp-f.1090b.zip,这是sdk包,到nokia的论坛上下载
gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2这是arm的编译器,需要从下面的url下载:
http://www.codesourcery.com/gnu_toolchains/arm/releases/2005Q1C

(2)开始安装arm编译器
mkdir ~/works/csl-gcc
cd ~/works/csl-gcc
tar -jxvf ~/down/gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2
这一步是把arm编译器解压到csl-gcc这个目录下面,偶这里是直接用binary了。不嫌麻烦的朋友,可以用源代码自己编译工具链。

(3)安装gnupoc和for symbian的arm-gcc工具链
然后是要把gnupoc-package-1.11.tar.gz解压缩了
cd ~/works
tar jxvf ~/down/gnupoc-package-1.11.tar.gz . 
cd gnupoc-package-1.11/tools/
./install_eka2_tools ~/csl-gcc

(4)安装s60的sdk
cd ~/works/gnupoc-package-1.11/sdks
./install_gnupoc_s60_31 ~/down/60-SDK-200634-3.1-Cpp-f.1090b.zip ~/works/epoc_sdk/s60_31

(5)指定s60的一些命令行工具的包装
./install_wrapper ~/works/gnupoc

(6)设置环境变量(可以在/etc/profile里面加,也可以在.bashrc里面加)
export PATH=~/works/gnupoc:~/csl-gcc/bin:$PATH
export EPOCROOT=~/epoc_sdk/s60_31/
(注意,这里的EPOCROOT末尾的反斜杠‘/’是一定要加上去的,这是偶的血泪教训!!)

(7)好了,可以做实验了,编译一个hello world试试:
cd ~/works/epoc_sdk/s60_31/s60ex/helloworldbasic/group
bldmake bldfiles
abld build gcce urel
cd ../sis
makesis helloworldbasic_gcce.pkg

(8)手工生成一个自签名证书(有开发者证书的朋友可以跳过这一步)
makekeys -cert -expdays 3650 -password mykey.key mycert.cer

(9)对sis进行签名
signsis helloworldbasic_gcce.sis helloworldbasic_gcce.sisx mycert.cer mykey.key

(10)真机上测试一下
好了,如果可以看到sisx文件,就代表你已经生成了手机上可以用的安装包了。linux下面蓝牙设备一般用obex协议栈操作。

(11)插入usb蓝牙适配器,初始化系统,(以下操作需要在root权限下面操作)
# su -
# modprobe hci_usb
# modprobe rfcomm
# hciconfig hci0 up
这个时候,应该看到如下的输出:
  BD Address: xx:xx:xx:xx:68:9F ACL MTU: 192:8  SCO MTU: 64:8
  UP RUNNING PSCAN ISCAN
  RX bytes:1860 acl:10 sco:0 events:88 errors:0
  TX bytes:1432 acl:10 sco:0 commands:52 errors:0
  Features: 0xff 0xff 0x0f 0x00
  Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
  Link policy: HOLD SNIFF PARK
  Link mode: SLAVE ACCEPT
  Name: 'xxxxxxxxx'
  Class: 0x000100
  Service Classes: Unspecified
  Device Class: Computer, Uncategorized
  HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d
  Manufacturer: Cambridge Silicon Radio (10)

(12)打开手机的蓝牙通信,开始扫描蓝牙设备,得到蓝牙设备的Mac地址
# hcitool scan
结果将输出如下的内容:
Scanning...
00:80:37:B5:A8:3A     T68i
00:0E:07:1C:AE:1D     Nokia N81

(13)可以ping一下这个设备,看看是否可用:
# l2ping -c 6 00:0E:07:1C:AE:1D
100 bytes from 00:0E:07:1C:AE:1D id 200 time 39.62ms
100 bytes from 00:0E:07:1C:AE:1D id 201 time 35.25ms
6 sent, 6 received, 0% loss
这就代表蓝牙通了,可以把安装包发给手机了。

(14)可以用sdptool查看一下,是否支持相应的服务(这个不多解释了,一试便知)
# sdptool browse local
# sdptool browse 00:0E:07:1C:AE:1D
# sdptool search OPUSH (这个命令用来查找object push服务的频道号)

(15)用obex_test客户端,直接发送(可以用普通用户操作了)
$ cd ~/works/epoc_sdk/s60_31/s60ex/helloworldbasic/sis
$ obex_test -b 00:0E:07:1C:AE:1D 9  (这里的9代表的是通道号,蓝牙push的通道号是9)
Using Bluetooth RFCOMM transport
OBEX Interactive test client/server.
> c [回车,连接手机的蓝牙push服务]
Connect OK!
Version: 0x10. Flags: 0x00
> p helloworldbasic_gcce.sisx  [回车,开始发送蓝牙push]
PUT file (local, remote)> name=helloworldbasic_gcce.sisx, size=xxxxx
Going to send xxxxx bytes
Made some progress...
Made some progress...
Made some progress...
Made some progress...
Made some progress...
PUT successful!
> q [回车,退出]

用这个方法稍微麻烦一些,可以直接使用下面的脚本,要简单得多:
文件: obexsend-v1.tar.bz2
大小: 6KB
下载: 下载
使用格式是:
sh obexsend.sh <Mac> <Channel> <filename>
注意,这里的通道号还是9,具体的设备都支持哪些服务,可以用sdptool的browse来查看。

(16)真机测试
如果不出意外的话,应该在s60 3rd的机器上可以直接安装。

总结一下,用上述方法可以为s60下至2nd上至5nd的所有sdk进行开发(这里需要提一点的是,在sdk的安装脚本中,已经把几乎全部文件名都变成了小写,可能win32的开发者们有一些郁闷了),也支持UIQ2和UIQ3的开发,具体方法与上面的类似。由于没有模拟器,无法进行pc上的调试(也没有所谓的abld build winscw udeb,这一点很郁闷了,可以以后考虑采用gdbserver和gdb利用蓝牙或数据线,在真机上直接调试)。
hoho,毕竟,gnupoc为许多“骨灰级”的玩家和开发者提供了一个很不错的开发symbian s60的方法。

(17)关于hci和rfcomm以及dbus的配置问题(/etc/bluetooth目录)
wayne@wayne:/etc/bluetooth$ cat hcid.conf
#
# HCI daemon configuration file.
#

# HCId options
options {
    # Automatically initialize new devices
    autoinit yes;

    # Security Manager mode
    #   none - Security manager disabled
    #   auto - Use local PIN for incoming connections
    #   user - Always ask user for a PIN
    #
    security user;

    # Pairing mode
    #   none  - Pairing disabled
    #   multi - Allow pairing with already paired devices
    #   once  - Pair once and deny successive attempts
    pairing multi;

    # Default PIN code for incoming connections
    passkey "0000";
}

# Default settings for HCI devices
device {
    # Local device name
    #   %d - device id
    #   %h - host name
    name "%h-%d";

    # Local device class
    class 0x000100;

    # Default packet type
    #pkt_type DH1,DM1,HV1;

    # Inquiry and Page scan
    iscan enable; pscan enable;

    # Default link mode
    #   none   - no specific policy
    #   accept - always accept incoming connections
    #   master - become master on incoming connections,
    #            deny role switch on outgoing connections
    lm accept;

    # Default link policy
    #   none    - no specific policy
    #   rswitch - allow role switch
    #   hold    - allow hold mode
    #   sniff   - allow sniff mode
    #   park    - allow park mode
    lp rswitch,hold,sniff,park;
        auth enable;
        encrypt enable;
}

wayne@wayne:/etc/bluetooth$ cat rfcomm.conf
#
# RFCOMM configuration file.
#

rfcomm0 {
#    # Automatically bind the device at startup
    bind no;
#
#    # Bluetooth address of the device
    device 11:11:11:11:11:11;
#
#    # RFCOMM channel for the connection
    channel    1;
#
#    # Description of the connection
    comment "Bluetooth device";
}

wayne@wayne:/etc/dbus-1/system.d$ cat bluetooth.conf
<!-- This configuration file specifies the required security policies
     for Bluetooth core daemon to work. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- ../system.conf have denied everything, so we just punch some holes -->

  <policy user="root">
    <allow own="org.bluez"/>
    <allow send_destination="org.bluez"/>
    <allow send_interface="org.bluez.Agent"/>
    <allow send_interface="org.bluez.PasskeyAgent"/>   (这里需要添加这个配置)
    <allow send_interface="org.bluez.HandsfreeAgent"/>
  </policy>

  <policy at_console="true">
    <allow send_destination="org.bluez"/>
  </policy>

  <!-- allow users of lp group (printing subsystem) to
       communicate with bluetoothd -->
  <policy group="lp">
    <allow send_destination="org.bluez"/>
  </policy>

  <policy context="default">
    <deny send_destination="org.bluez"/>
  </policy>

</busconfig>

另外,在/etc/bluetooth/passkeys里面,有一个default的文件,用来表示默认的密码的:
可以使用:
echo -n "0000" > /etc/bluetooth/passkeys/default
来设置默认的访问密码。
(陈罡)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201011/10440.html]
本文出处:北京理工大学 20981 作者:陈罡
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容