OpenMoko开发指导手册
OpenMoko介绍
- 项目介绍
Openmoko™ 是一个开源软件项目,目的是建立全球第一个自由的移动通讯操作系统平台,此平台运行在X server之上,并能运行大多数的X应用程序。OpenMoko 环境提供了一个完全免费的开发环境,可以在受支持的手机硬件上运行应用程序和系统代码,消除对私有代码的依赖性。现在的版本Neo FreeRunner 已经在其网络商店 开始销售了。 - 硬件特点
Neo FreeRunner 规格
Neo FreeRunner 与 Neo1973 共有的特质如下:- 高分辨率的触控式屏幕 (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两产品规格之比较
- 参考资料
学习- The OpenMoko Wiki OpenMoko 开发的理想起点。您可以找到以下内容:Foo
o Neo FreeRunner
o MokoMakefile
o OpenMoko under QEMU
o Flashing openmoko
- Wikipedia OpenMoko 内容 提供了丰富的链接和信息。
- 访问 OpenEmbedded 站点,详细了解这个交叉编译的开发环境。
- The OpenMoko Wiki OpenMoko 开发的理想起点。您可以找到以下内容:Foo
开发环境安装配置
- 安装所需软件包
$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* 现在查看ifconfig 就会发现多一个usb0网络设备被加载了
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
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:~#