summaryrefslogtreecommitdiff
path: root/2008/openmoko-cluc2008/openmoko-tech.mgp
blob: ac4ee65c597306cdbd09d3a96e435a1e8bcb5e5b (plain)
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
personal git repositories of Harald Welte. Your mileage may vary