1The Intel Assabet (SA-1110 evaluation) board
2============================================
3
4Please see:
5http://developer.intel.com/design/strong/quicklist/eval-plat/sa-1110.htm
6http://developer.intel.com/design/strong/guides/278278.htm
7
8Also some notes from John G Dorsey <jd5q@andrew.cmu.edu>:
9http://www.cs.cmu.edu/~wearable/software/assabet.html
10
11
12Building the kernel
13-------------------
14
15To build the kernel with current defaults:
16
17	make assabet_config
18	make oldconfig
19	make dep
20	make zImage
21
22The resulting kernel image should be available in linux/arch/arm/boot/zImage.
23
24
25Installing a bootloader
26-----------------------
27
28A couple of bootloaders able to boot Linux on Assabet are available:
29
30BLOB (http://www.lart.tudelft.nl/lartware/blob/)
31
32   BLOB is a bootloader used within the LART project.  Some contributed
33   patches were merged into BLOB to add support for Assabet.
34
35Compaq's Bootldr + John Dorsey's patch for Assabet support
36(http://www.handhelds.org/Compaq/bootldr.html)
37(http://www.wearablegroup.org/software/bootldr/)
38
39   Bootldr is the bootloader developed by Compaq for the iPAQ Pocket PC.
40   John Dorsey has produced add-on patches to add support for Assabet and
41   the JFFS filesystem.
42
43RedBoot (http://sources.redhat.com/redboot/)
44
45   RedBoot is a bootloader developed by Red Hat based on the eCos RTOS
46   hardware abstraction layer.  It supports Assabet amongst many other
47   hardware platforms.
48
49RedBoot is currently the recommended choice since it's the only one to have
50networking support, and is the most actively maintained.
51
52Brief examples on how to boot Linux with RedBoot are shown below.  But first
53you need to have RedBoot installed in your flash memory.  A known to work
54precompiled RedBoot binary is available from the following location:
55
56ftp://ftp.netwinder.org/users/n/nico/
57ftp://ftp.arm.linux.org.uk/pub/linux/arm/people/nico/
58ftp://ftp.handhelds.org/pub/linux/arm/sa-1100-patches/
59
60Look for redboot-assabet*.tgz.  Some installation infos are provided in
61redboot-assabet*.txt.
62
63
64Initial RedBoot configuration
65-----------------------------
66
67The commands used here are explained in The RedBoot User's Guide available
68on-line at http://sources.redhat.com/ecos/docs-latest/redboot/redboot.html.
69Please refer to it for explanations.
70
71If you have a CF network card (my Assabet kit contained a CF+ LP-E from
72Socket Communications Inc.), you should strongly consider using it for TFTP
73file transfers.  You must insert it before RedBoot runs since it can't detect
74it dynamically.
75
76To initialize the flash directory:
77
78	fis init -f
79
80To initialize the non-volatile settings, like whether you want to use BOOTP or
81a static IP address, etc, use this command:
82
83	fconfig -i
84
85
86Writing a kernel image into flash
87---------------------------------
88
89First, the kernel image must be loaded into RAM.  If you have the zImage file
90available on a TFTP server:
91
92	load zImage -r -b 0x100000
93
94If you rather want to use Y-Modem upload over the serial port:
95
96	load -m ymodem -r -b 0x100000
97
98To write it to flash:
99
100	fis create "Linux kernel" -b 0x100000 -l 0xc0000
101
102
103Booting the kernel
104------------------
105
106The kernel still requires a filesystem to boot.  A ramdisk image can be loaded
107as follows:
108
109	load ramdisk_image.gz -r -b 0x800000
110
111Again, Y-Modem upload can be used instead of TFTP by replacing the file name
112by '-y ymodem'.
113
114Now the kernel can be retrieved from flash like this:
115
116	fis load "Linux kernel"
117
118or loaded as described previously.  To boot the kernel:
119
120	exec -b 0x100000 -l 0xc0000
121
122The ramdisk image could be stored into flash as well, but there are better
123solutions for on-flash filesystems as mentioned below.
124
125
126Using JFFS2
127-----------
128
129Using JFFS2 (the Second Journalling Flash File System) is probably the most
130convenient way to store a writable filesystem into flash.  JFFS2 is used in
131conjunction with the MTD layer which is responsible for low-level flash
132management.  More information on the Linux MTD can be found on-line at:
133http://www.linux-mtd.infradead.org/.  A JFFS howto with some infos about
134creating JFFS/JFFS2 images is available from the same site.
135
136For instance, a sample JFFS2 image can be retrieved from the same FTP sites
137mentioned below for the precompiled RedBoot image.
138
139To load this file:
140
141	load sample_img.jffs2 -r -b 0x100000
142
143The result should look like:
144
145RedBoot> load sample_img.jffs2 -r -b 0x100000
146Raw file loaded 0x00100000-0x00377424
147
148Now we must know the size of the unallocated flash:
149
150	fis free
151
152Result:
153
154RedBoot> fis free
155  0x500E0000 .. 0x503C0000
156
157The values above may be different depending on the size of the filesystem and
158the type of flash.  See their usage below as an example and take care of
159substituting yours appropriately.
160
161We must determine some values:
162
163size of unallocated flash:	0x503c0000 - 0x500e0000 = 0x2e0000
164size of the filesystem image:	0x00377424 - 0x00100000 = 0x277424
165
166We want to fit the filesystem image of course, but we also want to give it all
167the remaining flash space as well.  To write it:
168
169	fis unlock -f 0x500E0000 -l 0x2e0000
170	fis erase -f 0x500E0000 -l 0x2e0000
171	fis write -b 0x100000 -l 0x277424 -f 0x500E0000
172	fis create "JFFS2" -n -f 0x500E0000 -l 0x2e0000
173
174Now the filesystem is associated to a MTD "partition" once Linux has discovered
175what they are in the boot process.  From Redboot, the 'fis list' command
176displays them:
177
178RedBoot> fis list
179Name              FLASH addr  Mem addr    Length      Entry point
180RedBoot           0x50000000  0x50000000  0x00020000  0x00000000
181RedBoot config    0x503C0000  0x503C0000  0x00020000  0x00000000
182FIS directory     0x503E0000  0x503E0000  0x00020000  0x00000000
183Linux kernel      0x50020000  0x00100000  0x000C0000  0x00000000
184JFFS2             0x500E0000  0x500E0000  0x002E0000  0x00000000
185
186However Linux should display something like:
187
188SA1100 flash: probing 32-bit flash bus
189SA1100 flash: Found 2 x16 devices at 0x0 in 32-bit mode
190Using RedBoot partition definition
191Creating 5 MTD partitions on "SA1100 flash":
1920x00000000-0x00020000 : "RedBoot"
1930x00020000-0x000e0000 : "Linux kernel"
1940x000e0000-0x003c0000 : "JFFS2"
1950x003c0000-0x003e0000 : "RedBoot config"
1960x003e0000-0x00400000 : "FIS directory"
197
198What's important here is the position of the partition we are interested in,
199which is the third one.  Within Linux, this correspond to /dev/mtdblock2.
200Therefore to boot Linux with the kernel and its root filesystem in flash, we
201need this RedBoot command:
202
203	fis load "Linux kernel"
204	exec -b 0x100000 -l 0xc0000 -c "root=/dev/mtdblock2"
205
206Of course other filesystems than JFFS might be used, like cramfs for example.
207You might want to boot with a root filesystem over NFS, etc.  It is also
208possible, and sometimes more convenient, to flash a filesystem directly from
209within Linux while booted from a ramdisk or NFS.  The Linux MTD repository has
210many tools to deal with flash memory as well, to erase it for example.  JFFS2
211can then be mounted directly on a freshly erased partition and files can be
212copied over directly.  Etc...
213
214
215RedBoot scripting
216-----------------
217
218All the commands above aren't so useful if they have to be typed in every
219time the Assabet is rebooted.  Therefore it's possible to automatize the boot
220process using RedBoot's scripting capability.
221
222For example, I use this to boot Linux with both the kernel and the ramdisk
223images retrieved from a TFTP server on the network:
224
225RedBoot> fconfig
226Run script at boot: false true
227Boot script:
228Enter script, terminate with empty line
229>> load zImage -r -b 0x100000
230>> load ramdisk_ks.gz -r -b 0x800000
231>> exec -b 0x100000 -l 0xc0000
232>>
233Boot script timeout (1000ms resolution): 3
234Use BOOTP for network configuration: true
235GDB connection port: 9000
236Network debug at boot time: false
237Update RedBoot non-volatile configuration - are you sure (y/n)? y
238
239Then, rebooting the Assabet is just a matter of waiting for the login prompt.
240
241
242
243Nicolas Pitre
244nico@cam.org
245June 12, 2001
246
247
248Status of peripherals in -rmk tree (updated 14/10/2001)
249-------------------------------------------------------
250
251Assabet:
252 Serial ports:
253  Radio:		TX, RX, CTS, DSR, DCD, RI
254   PM:			Not tested.
255  COM:			TX, RX, CTS, DSR, DCD, RTS, DTR, PM
256   PM:			Not tested.
257  I2C:			Implemented, not fully tested.
258  L3:			Fully tested, pass.
259   PM:			Not tested.
260
261 Video:
262  LCD:			Fully tested.  PM
263			(LCD doesn't like being blanked with
264			 neponset connected)
265  Video out:		Not fully
266
267 Audio:
268  UDA1341:
269   Playback:		Fully tested, pass.
270   Record:		Implemented, not tested.
271   PM:			Not tested.
272
273  UCB1200:
274   Audio play:		Implemented, not heavily tested.
275   Audio rec:		Implemented, not heavily tested.
276   Telco audio play:	Implemented, not heavily tested.
277   Telco audio rec:	Implemented, not heavily tested.
278   POTS control:	No
279   Touchscreen:		Yes
280   PM:			Not tested.
281
282 Other:
283  PCMCIA:
284   LPE:			Fully tested, pass.
285  USB:			No
286  IRDA:
287   SIR:			Fully tested, pass.
288   FIR:			Fully tested, pass.
289   PM:			Not tested.
290
291Neponset:
292 Serial ports:
293  COM1,2:	TX, RX, CTS, DSR, DCD, RTS, DTR
294   PM:			Not tested.
295  USB:			Implemented, not heavily tested.
296  PCMCIA:		Implemented, not heavily tested.
297   PM:			Not tested.
298  CF:			Implemented, not heavily tested.
299   PM:			Not tested.
300
301More stuff can be found in the -np (Nicolas Pitre's) tree.
302
303