openmoko开发从无到有

OpenMoko开发指导手册

OpenMoko介绍

  1. 项目介绍
    Openmoko™ 是一个开源软件项目,目的是建立全球第一个自由的移动通讯操作系统平台,此平台运行在X server之上,并能运行大多数的X应用程序。OpenMoko 环境提供了一个完全免费的开发环境,可以在受支持的手机硬件上运行应用程序和系统代码,消除对私有代码的依赖性。现在的版本Neo FreeRunner 已经在其网络商店 开始销售了。
  2. 硬件特点

    Neo FreeRunner 规格
    Neo FreeRunnerNeo1973 共有的特质如下:

    • 高分辨率的触控式屏幕 (1.7" x 2.27" - 43mm x 58mm) 480x640 像素
    • 128MB SDRAM内存,允许同时控制多个应用程序。
    • 内建地图、追踪程序的GPS 模块
    • 与本地数据相互交换的蓝芽模块
    • 外观与Neo1973相仿。请参考 openmoko.com取得更多信息。
    但FreeRunner将会提供以下的其它功能:
    • 802.11 b/g WiFi ,提供WEB浏览及数据传输
    • 400Mhz高速处理器(升级自266MHz)
    • 硬件图形加速器芯片,允许包括影片播放等快速图片处理
    • 2加速器,让手机能自动转换到横向模式
    • 2 LED 可个由机款外围的按钮启动。(一为双色 [blue(蓝色)|orange(橘色)] 位于电源按钮后方,1单色 [red(红色)] 位于aux按钮后方)
    • 用于北美区之三频GSM 及GPRS,其它区域为 (850/1800/1900 Mhz) 等频率
    • 100mA 主USB插槽,提供使用者能在短时间内自USB装置中充电。(但先将FreeRunner电池用尽)

      请点选Neo FreeRunner GTA02 Hardware(内部代号为GTA02)取得更多更完整的Neo FreeRunner规 格。 您可以在here取得Neo 1973 及Neo FreeRunner两产品规格之比较

  3. 参考资料
    学习
    • Wikipedia OpenMoko 内容 提供了丰富的链接和信息。
    • 访问 OpenEmbedded 站点,详细了解这个交叉编译的开发环境。

开发环境安装配置

  • 安装所需软件包
$sudo  apt-get install subversion build-essential help2man diffstat texi2html texinfo cvs   gawk cogito libncurses5-dev zlib1g-dev libssl-dev libgtk2.0-dev ca-certificates  python-pysqlite2 sqlite3 sqlite3-doc python-pysqlite2-dbg quilt python-psyco ccache gcc-3.4 g++-3.4 libsdl1.2-dev lynx netpbm dosfstools git git-core gcc-3.4 lynx netpbm libsdl1.2-dev dosfstools subversion zlib1g-dev 
  • 创建工作目录和下载Makefile文件
$mkdir ~/moko
$cd ~/moko
$wget http://svn.projects.openmoko.org/svnroot/mokomakefile/trunk/Makefile

这个版本的Makefile 不直接支持USB gadget方式连接Qemu emulation,就需要给这个Makefile打上这个 makefile.patch 就不会出现 *"couldn't add device gadget:1"*这个问题了。USB gadget模式的支持,可將USB slave转包到Linux 2.6的内核gadgetfs,如此一來,我们就可以建立USB (emulated) network,两端也可以用NFS或sshfs来作文档存取。
==========================================
--- ./Makefile 2008-07-01 15:03:42.000000000 +0800
+++ /home/ben/moko/Makefile 2008-07-11 16:29:30.000000000 +0800
@@ -309,7 +309,8 @@
[ -e build/qemu/Makefile ] || /
( . ./setup-env && cd build/qemu && /
$${OMDIR}/openmoko/trunk/src/host/qemu-neo1973/configure /
- --target-list=arm-softmmu )
+ --cc="gcc-3.4 -I/usr/src/linux-source-`uname -r`/include" /
+ --target-list=arm-softmmu )
[ -e build/qemu/openmoko ] || /
( . ./setup-env && cd build/qemu && mkdir openmoko && /
for f in $${OMDIR}/openmoko/trunk/src/host/qemu-neo1973/openmoko/* ; do /
@@ -346,11 +347,13 @@
.PHONY: run-qemu
run-qemu: stamps/qemu build/qemu/openmoko/openmoko-sd.image
( cd build/qemu && arm-softmmu/qemu-system-arm /
- -M gta01 -m 130 -usb -show-cursor /
- -usbdevice keyboard /
+ -M gta01 -m 130 -usb -show-cursor -parallel none/
+ -usbdevice keyboard -usbgadget -serial stdio /
-mtdblock openmoko/openmoko-flash.image /
-sd openmoko/openmoko-sd.image /
- -kernel openmoko/openmoko-kernel.bin )
+ -kernel openmoko/openmoko-kernel.bin/
+ -monitor unix:"$qemu_monitor",server,nowait /
+ "$@")

.PHONY: run-qemu-snapshot
run-qemu-snapshot: stamps/qemu build/qemu/openmoko/openmoko-sd.image
@@ -359,7 +362,7 @@
-usbdevice keyboard /
-mtdblock openmoko/openmoko-flash.image /
-sd openmoko/openmoko-sd.image /
- -kernel openmoko/openmoko-kernel.bin )
+ -kernel openmoko/openmoko-kernel.bin)

.PHONY: run-qemu-vnc
run-qemu-vnc: stamps/qemu build/qemu/openmoko/openmoko-sd.image
=====================================

$patch -p0 < makefile.patch
  • 通过Makefile来安装配置开发环境
初学者或者只做应用开发就可以
$make setup && make build-qemu

如果想完整的编译开发环境,这个可能需要5~7个小时
$make setup && make 

编译内核模块支持gadgetfs

  • 下载机器对应的内核原代码和相应的头文件
$sudo apt-get install linux-source linux-headers-`uname -r`
  • 解压源代码和创建工作目录
$mkdir ~/usb_module_dir
$sudo tar jxf /usr/src/linux-source-2.6.##.tar.bz2
  • 进入工作目录编译dummy_hcd.ko and gadgetfs.ko两个模块
$cd ~/usb_module_dir
$sudo cp -a /usr/src/linux-source-2.6.24-16-generic/drivers/usb/* .
$cd gadgetfs
  • 编辑Makefile文件,加入如下内容
echo "KDIR := /lib/modules/`uname -r`/build" >> Makefile
echo "PWD := `pwd`" >> Makefile
echo "obj-m := dummy_hcd.o gadgetfs.o" >> Makefile
echo "default: " >> Makefile
echo -e "/t/$(MAKE) -C /$(KDIR) SUBDIRS=/$(PWD) modules" >> Makefile
make

如果编译顺利,则会在当前目录下,发现有dummy_hcd.ko and gadgetfs.ko两个模块
  • 安装dummy_hcd.ko and gadgetfs.ko两个模块
sudo insmod ./dummy_hcd.ko
sudo insmod ./gadgetfs.ko default_uid=`id -u`

配置Host主机端的USB Network

编辑 /etc/network/interfaces 文件,添加如下内容
auto usb0
mapping hotplug
script grep
map usb0
iface usb0 inet static
address 192.168.0.200
netmask 255.255.255.0
network 192.168.0.0
up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 &
up echo 1 > /proc/sys/net/ipv4/ip_forward &
up iptables -P FORWARD ACCEPT &
down iptables -D POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 &

启动Qemu emulation
注意:编译与加载flash的Makefile一定要是打完patch的makefile.

$make run-qemu

等X Window的界面都出现,就是运用gadgetfs的时候。按下Ctrl-Alt-2组合键切入Qemu Monitor(Ctrl-Alt-1退出终端),我们就可以监控管理Qemu的状态,当我们打入"info usbslave"指令时候,应该出现如下输出:
USB2.2 device 1457:5122:
Manufacturer: Linux 2.6.24/s3c2410_udc
Product: RNDIS/Ethernet Gadget
Configuration 0: RNDIS
Configuration 1: CDC Ethernet

openmoko在启动X的时候会顺便将上面配置的USB network带起,这时候我们就可以通过gadgetfs去让Host与(emulated) target互联。同样在Qemu Monitor终端,打入 "usb_add gadget:1" 指令或者进入qemu编译目录 "openmoko/qemu-gadget.sh",若无错误信息,表示已成功。

* 在Host上的终端检查USB gadgetfs的状态:
sudo lsusb -vvv | grep s3c2410
iManufacturer 1 Linux 2.6.24/s3c2410_udc

sudo dmesg | tail
[ 8865.019170] gadgetfs: connected
[ 8865.019473] gadgetfs: disconnected
[ 8865.154839] gadgetfs: connected
[ 8865.191111] usb 5-1: configuration #1 chosen from 1 choice
[ 8865.194771] gadgetfs: configuration #1
[ 8866.587207] usb0: register 'cdc_ether' at usb-dummy_hcd-1, CDC Ethernet Device, 46:80:02:a5:0c:de
[ 8866.587249] usbcore: registered new interface driver cdc_ether
[ 8867.058152] usb0: CDC: unexpected notification 70!
[ 8867.354782] nf_conntrack version 0.5.0 (8192 buckets, 32768 max)
[ 8877.201114] usb0: no IPv6 routers present
* 现在查看ifconfig 就会发现多一个usb0网络设备被加载了
ifconfig
eth0 Link encap:以太网 硬件地址 00:16:e6:91:89:4c
inet 地址:172.16.16.100 广播:172.16.19.255 掩码:255.255.252.0
inet6 地址: fe80::216:e6ff:fe91:894c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:33910 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:10474 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:11603153 (11.0 MB) 发送字节:2566683 (2.4 MB)
中断:21 基本地址:0xa800

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:2864 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:2864 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:143200 (139.8 KB) 发送字节:143200 (139.8 KB)

usb0 Link encap:以太网 硬件地址 46:80:02:a5:0c:de
inet 地址:192.168.0.200 广播:192.168.0.255 掩码:255.255.255.0
inet6 地址: fe80::4480:2ff:fea5:cde/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:1 丢弃:0 过载:0 帧数:1
发送数据包:33 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:0 (0.0 B) 发送字节:5005 (4.8 KB)


这是表明我们的qemu emulated已经与Host PC 建立了USB Network连接了,现在就可以通过ssh与qemu emulated连接了,emulated 默认是没有密码的。
 ssh root@192.168.0.202
The authenticity of host '192.168.0.202 (192.168.0.202)' can't be established.
RSA key fingerprint is b2:a0:77:58:f2:05:8a:8e:6c:8e:49:22:7a:43:af:2f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.202' (RSA) to the list of known hosts.
root@192.168.0.202's password:
root@om-gta01:~# ls
Applications Settings log packages
root@om-gta01:~#

开发OpenMoko手机的软件
  1. 构建一个简单的应用程序helloworld
  2. 构建一个小型Gtk应用程序
  3. 获取系统信息
  4. 添加更多应用

      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值