1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
|
%include "default.mgp"
%default 1 bgrad
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
%nodefault
%back "blue"
%center
%size 5
Openmoko
Building a truly hackable device
%center
%size 4
by
Harald Welte <laforge@openmoko.org>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Introduction
Who is speaking to you?
an independent Free Software developer, consultant and trainer
who is a member of the free software community for 10 years
who has worked a lot on the Linux kernel
who had originally started OpenEZX for Motorola phones
and who's been lead hardware + system software architect for Openmoko until recently
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
WARNING
While I have been the Lead System Architect for hardware and system level software, throughout the first 16 months of the project,
I have quit working for Openmoko, Inc. or the FIC group in November 2007.
Thus, I do not officially represent either of these entities!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
What is Openmoko
The commercial side
First International Computer, Inc.
A large Taiwanese hardware vendor
Has a FIC Mobility business unit
Hardware R&D and production of Neo1973 GTA01 and GTA02 handsets
Openmoko, Inc., ("Openmoko, the Company")
Part of First International Computer (FIC) Group
Funding the Openmoko software R&D
Responsible for product definitil, sales, marketing, PR, ...
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
What is Openmoko
The community side
Openmoko, the overall Free Software project
A FOSS project working on
Openmoko kernel/u-boot patches (hardware support)
Openmoko GNU/Linux distribution
Openmoko UI / framework
Funded by Openmoko, Inc.
Openmoko, the embedded GNU/Linux distribution
An OE-built embedded GNU/Linux distribution for mobile communications devices
Primarily targetted at Openmoko/FIC handsets
Is being ported to other devices by the community
Maintained by OE coreteam member employed by Openmoko, Inc.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
What is Openmoko about?
Open
Opening up the formerly-closed mobile world
on any achievable level
Mobile
Mobile devices are the future
Free
100% Free Software from driver through UI
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
What is Openmoko about?
FIC provides
experience in mass production of consumer electronics
experience in production of GSM handsets
experience in hardware development of GSM handsets
Openmoko provides
good contacts within the FOSS communities
strong technical knowledge on GNU/Linux
software development
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Neo1973 GTA01 hardware
Neo1973 GTA01 hardware (07/2007)
S3C2410 SoC @ 266MHz
2.8" 480x640 LCM, 262k colors
128MB SDRAM
64MB SLC NAND (512/16k)
USB 1.1 device and host (unpowered)
A-GPS (without processor)
GSM+GPRS chipset (ARM7 based)
Wolfson audio codec
2 stereo speakers (1.2W)
2.5mm headset jack
CSR4 based Bluetooth
NXP PCF50606 power management unit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Application Processor
Closer look at Application Processor
SC2410 SoC @ 266MHz
three UART's
133MHz SDRAM interface
66MHz external bus
Two channels SPI
IIS
I2C
SDIO
TFT controller
NAND controller
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Neo1973 GTA02 hardware
Neo1973 GTA02 hardware ("soon")
S3C2442B SoC @ 400 MHz (500MHz option)
2.8" 480x640 LCM, 262k colors
128MB SDRAM
256MB SLC NAND (2048/128k)
USB 1.1 device and host (with power)
A-GPS (fully autonomous firmware-based)
GSM+GPRS chipset (Ti Calypso, ARM7 based)
CSR4 based Bluetooth
Atheros AR6k based 802.11b/g WiFi
2 3D accelerometers
Smedia Glamo 3362 GPU
NXP PCF50633 power management unit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
GTA02: Smedia Glamo GPU
Smedia Glamo 3362 GPU
8MB internal SDRAM
16bit local bus interface to S3C2410
2D acceleration
3D acceleration
H.263 codec (encode/decode)
LCM controller
SD-Card controller
hardware JPEG encoder/decoder
Camera interface and imapge processing (unused)
Openmoko is writing 100% FOSS drivers (GPL/MIT licensed)
kernel driver for core and framebuffer
Xglamofb accelerated X server
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
GSM Modem
Closer look at the GSM Modem
Ti Calypso/Iota based chipset
As proprietary as any other phone
runs proprietary nucleus OS
runs proprietary GSM stack
Supports GSM voice/data/fax and GPRS
Tri-Band GSM
Very good TS 07.05 / 07.07 / 07.10 compliance
eveyone can download the protocol docs from ETSI.org
no user/hacker needs access to NDA'd documents
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Free Software stack
Free Software stack
bootloader: u-boot current git (post-1.3)
kernel: linux 2.6.24 based
xserver: kdrive
glibc
glib
gtk+
pulseaudio
gsmd / libgsmd
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Development Model
Development Model
"do embedded GNU/Linux the right way"
use and track current mainline code
actively contribute our code upstream
all code is immediately committed to public svn repository
development discussions happen on public mailinglists
all code developed by Openmoko is FOSS licensed
everyone can contribute
no copyright assignments to Openmoko
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Build System
Openmoko builds
an embedded Linux distribution
split in ipk packages (just like dpkg/rpm)
ipk feeds (just like apt-get/yum)
Openmoko release
full source code in svn/git
all patches to all packages
the entire build system (built with OE)
Openmoko's build system is public
Everyone can rebuild everything
cross-toolchain
u-boot / kernel image
application/library packages
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Hackable Device
Hackable Device
Standards compliance wherever possible
The device shall be under full user control
Everyone should be able to hack it, at any level
Make entry barrier for development as easy as possible
bootloader prompt via USB serial emulation
Serial console
JTAG for the people
Provide Debug Board with embedded USB JTAG + serial adapter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Standards compliance
Standards compliance
Use open/documented/available standards wherever possible
Use official USB device firmware upgrade protocol
Have charger behave 100% to USB spec (100/500mA)
Use GSM chipset that follows GSM 07.07/07.10 closely
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
User control
User control
The phone needs to be under control of the user, and the free software he uses
Even backdoors or rogue GSM firmware shall not be able to intrude the privacy fo the user
So e.g. the Audio codec (under explicit control from the Linux-running AP) between microphone/speaker and the GSM modem
So the Linux-running AP is enabled to cut power of the GSM modem
Thus, free software (and thus the user) remains in ultimate control
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Hackable at any level
Hardware Hacking
Openmoko even encourages hardware hacking
I2C, SPI, GPIO and IRQ line on documented test pads and connector
allows for attachment of new peripherals to the device
even the hardware schematics available under FOSS-permissive NDA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Hackable at any level
System-level hacking (bootloader, OS)
entire bootloader from very first instruction FOSS
entire kernel including all drivers FOSS
JTAG accessible on debug connector
serial console on debug connector
debug board (USB JTAG adaptor and USB serial converter)
un-brickable through emergency boot loader in read-only NOR flash (GTA02)
DFU (Device Firmware Upgrade) for full-system re-flash via USB
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Hackable at any level
Userspace and UI level hacking
entire userspace world FOSS (libraries, daemons, UI, X driver, ...)
FOSS build system and toolchain/SDK enable anyone to build custom softwar packages and/or flash images
provide a programming environment as close as possible to the Linux desktop world
allow developers to re-use their existing Linux development skills
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
GSM Integration
Application Processor GSM integration
kernel line discipline implementation for GSM 07.10
userspace GSM daemon with unix domain socket
libgsmd with API for applications
kernel part intended for mainline submission
will support different phones / gsm chipsets
Various HTC devices with Linux
Motorola EZX phones using OpenEZX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
GSM Integration
But you can't hack the GSM stack
yes, that is true.
pretty much like you can't hack the firmware of your SCSI or RAID controller, WiFi card, Bluetooth chipset, etc.
even the firmware of a good old analogue phone line (voice) modem was not hackable
having proprietary firmware on a dedicated peripheral CPU is even acceptable to the FSF!
And no doubt, anyone inside Openmoko would love to ever have a open source GSM stack. Patches welcome :)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
GSM Integration
But you can't hack the GSM stack
so you get the maximum level of freedom that you can get with any other peripheral device:
open source low-level (mux, power mgmt) drivers
open source high-level drivers (gsm daemon)
openly documented serial protocol (TS 07.05, 07.07, 07.10)
asking for more freedom on the GSM side is hypocritical when accepting the very same level with other peripheral devices.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
GSM Integration
But you can't hack the GSM stack
besides that
GTA01 has baseband JTAG on test pins
Openmoko does not cryptographically sign GSM firmware images
GSM firmware is user-upgradable
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Difference
Difference from other Linux phones
'others' discourage third parties from writing apps
you need explicit permission? WTF!
'others' try to make customers pay for a device that's still under manufacturer / GSM operator control
'others' use proprietary kernel modules
locks you into some old kernel version
'others' use proprietary bootloaders
'others' dont give you JTAG/serial access
'others' use proprietary UI toolkits
vendor lock-in
'others' dont give out their build system
'others' dont give out their firmware update tools
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Neo1973 GTA01 Emulator
The Neo1973 GTA01 emulator
based on populer qemu project
full GTA01 hardware emulation, including
NAND controller
LCM controller
power management unit
GSM modem
touchscreen controller
SD card controller
...
you can run the exact same bootloader/kernel/rootfs images
thus, no need to buy real hardware to start hacking
e.g. NetBSD port has been done entirely on emulator!
http://wiki.openmoko.org/wiki/Openmoko_under_QEMU
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
How to contribute
First: get hands-on experience
with emulator (free, based on qemu, full GTA01 emulation)
with real hardware (GTA01 now, GTA02 soon)
follow instructions on the wiki, improve it with your feedback
start local user / developer groups
go through bugzilla, look for bugs in your favourite components
try to reproduce bug with current images
provide feedback
help by proividing additional debugging information
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
How to contribute
write your own gtk+/e17 applications fit for 480x640 screen size and limited CPU
do development on your host pc (native)
then cross-compile for Openmoko
then test on emulator or hardware
then build and package with OE
go through projects.openmoko.org and contact project teams, help them out
hang out on mailinglists and #openmoko on freenode.net
start sharing your experience with others with your experience
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%page
Openmoko
Online Resources
http://www.openmoko.org/
portal site, just links everywhere else
http://wiki.openmoko.org/
everything you (n)ever wanted to know about openmoko ;)
http://bugzilla.openmoko.org/
documents all known bugs, please add/report and debug!
http://lists.openmoko.org/
various mailing lists for Q&A and discussions
http://planet.openmoko.org/
planet aggregating RSS feeds of various blogs
irc.freenode.net #openmoko
lots of developers hanging out there
https://direct.openmoko.com/
for buying actual hardware
|