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