Back to home page

OSCL-LXR

 
 

    


0001 ============================================
0002 The Intel Assabet (SA-1110 evaluation) board
0003 ============================================
0004 
0005 Please see:
0006 http://developer.intel.com
0007 
0008 Also some notes from John G Dorsey <jd5q@andrew.cmu.edu>:
0009 http://www.cs.cmu.edu/~wearable/software/assabet.html
0010 
0011 
0012 Building the kernel
0013 -------------------
0014 
0015 To build the kernel with current defaults::
0016 
0017         make assabet_defconfig
0018         make oldconfig
0019         make zImage
0020 
0021 The resulting kernel image should be available in linux/arch/arm/boot/zImage.
0022 
0023 
0024 Installing a bootloader
0025 -----------------------
0026 
0027 A couple of bootloaders able to boot Linux on Assabet are available:
0028 
0029 BLOB (http://www.lartmaker.nl/lartware/blob/)
0030 
0031    BLOB is a bootloader used within the LART project.  Some contributed
0032    patches were merged into BLOB to add support for Assabet.
0033 
0034 Compaq's Bootldr + John Dorsey's patch for Assabet support
0035 (http://www.handhelds.org/Compaq/bootldr.html)
0036 (http://www.wearablegroup.org/software/bootldr/)
0037 
0038    Bootldr is the bootloader developed by Compaq for the iPAQ Pocket PC.
0039    John Dorsey has produced add-on patches to add support for Assabet and
0040    the JFFS filesystem.
0041 
0042 RedBoot (http://sources.redhat.com/redboot/)
0043 
0044    RedBoot is a bootloader developed by Red Hat based on the eCos RTOS
0045    hardware abstraction layer.  It supports Assabet amongst many other
0046    hardware platforms.
0047 
0048 RedBoot is currently the recommended choice since it's the only one to have
0049 networking support, and is the most actively maintained.
0050 
0051 Brief examples on how to boot Linux with RedBoot are shown below.  But first
0052 you need to have RedBoot installed in your flash memory.  A known to work
0053 precompiled RedBoot binary is available from the following location:
0054 
0055 - ftp://ftp.netwinder.org/users/n/nico/
0056 - ftp://ftp.arm.linux.org.uk/pub/linux/arm/people/nico/
0057 - ftp://ftp.handhelds.org/pub/linux/arm/sa-1100-patches/
0058 
0059 Look for redboot-assabet*.tgz.  Some installation infos are provided in
0060 redboot-assabet*.txt.
0061 
0062 
0063 Initial RedBoot configuration
0064 -----------------------------
0065 
0066 The commands used here are explained in The RedBoot User's Guide available
0067 on-line at http://sources.redhat.com/ecos/docs.html.
0068 Please refer to it for explanations.
0069 
0070 If you have a CF network card (my Assabet kit contained a CF+ LP-E from
0071 Socket Communications Inc.), you should strongly consider using it for TFTP
0072 file transfers.  You must insert it before RedBoot runs since it can't detect
0073 it dynamically.
0074 
0075 To initialize the flash directory::
0076 
0077         fis init -f
0078 
0079 To initialize the non-volatile settings, like whether you want to use BOOTP or
0080 a static IP address, etc, use this command::
0081 
0082         fconfig -i
0083 
0084 
0085 Writing a kernel image into flash
0086 ---------------------------------
0087 
0088 First, the kernel image must be loaded into RAM.  If you have the zImage file
0089 available on a TFTP server::
0090 
0091         load zImage -r -b 0x100000
0092 
0093 If you rather want to use Y-Modem upload over the serial port::
0094 
0095         load -m ymodem -r -b 0x100000
0096 
0097 To write it to flash::
0098 
0099         fis create "Linux kernel" -b 0x100000 -l 0xc0000
0100 
0101 
0102 Booting the kernel
0103 ------------------
0104 
0105 The kernel still requires a filesystem to boot.  A ramdisk image can be loaded
0106 as follows::
0107 
0108         load ramdisk_image.gz -r -b 0x800000
0109 
0110 Again, Y-Modem upload can be used instead of TFTP by replacing the file name
0111 by '-y ymodem'.
0112 
0113 Now the kernel can be retrieved from flash like this::
0114 
0115         fis load "Linux kernel"
0116 
0117 or loaded as described previously.  To boot the kernel::
0118 
0119         exec -b 0x100000 -l 0xc0000
0120 
0121 The ramdisk image could be stored into flash as well, but there are better
0122 solutions for on-flash filesystems as mentioned below.
0123 
0124 
0125 Using JFFS2
0126 -----------
0127 
0128 Using JFFS2 (the Second Journalling Flash File System) is probably the most
0129 convenient way to store a writable filesystem into flash.  JFFS2 is used in
0130 conjunction with the MTD layer which is responsible for low-level flash
0131 management.  More information on the Linux MTD can be found on-line at:
0132 http://www.linux-mtd.infradead.org/.  A JFFS howto with some infos about
0133 creating JFFS/JFFS2 images is available from the same site.
0134 
0135 For instance, a sample JFFS2 image can be retrieved from the same FTP sites
0136 mentioned below for the precompiled RedBoot image.
0137 
0138 To load this file::
0139 
0140         load sample_img.jffs2 -r -b 0x100000
0141 
0142 The result should look like::
0143 
0144         RedBoot> load sample_img.jffs2 -r -b 0x100000
0145         Raw file loaded 0x00100000-0x00377424
0146 
0147 Now we must know the size of the unallocated flash::
0148 
0149         fis free
0150 
0151 Result::
0152 
0153         RedBoot> fis free
0154           0x500E0000 .. 0x503C0000
0155 
0156 The values above may be different depending on the size of the filesystem and
0157 the type of flash.  See their usage below as an example and take care of
0158 substituting yours appropriately.
0159 
0160 We must determine some values::
0161 
0162         size of unallocated flash:      0x503c0000 - 0x500e0000 = 0x2e0000
0163         size of the filesystem image:   0x00377424 - 0x00100000 = 0x277424
0164 
0165 We want to fit the filesystem image of course, but we also want to give it all
0166 the remaining flash space as well.  To write it::
0167 
0168         fis unlock -f 0x500E0000 -l 0x2e0000
0169         fis erase -f 0x500E0000 -l 0x2e0000
0170         fis write -b 0x100000 -l 0x277424 -f 0x500E0000
0171         fis create "JFFS2" -n -f 0x500E0000 -l 0x2e0000
0172 
0173 Now the filesystem is associated to a MTD "partition" once Linux has discovered
0174 what they are in the boot process.  From Redboot, the 'fis list' command
0175 displays them::
0176 
0177         RedBoot> fis list
0178         Name              FLASH addr  Mem addr    Length      Entry point
0179         RedBoot           0x50000000  0x50000000  0x00020000  0x00000000
0180         RedBoot config    0x503C0000  0x503C0000  0x00020000  0x00000000
0181         FIS directory     0x503E0000  0x503E0000  0x00020000  0x00000000
0182         Linux kernel      0x50020000  0x00100000  0x000C0000  0x00000000
0183         JFFS2             0x500E0000  0x500E0000  0x002E0000  0x00000000
0184 
0185 However Linux should display something like::
0186 
0187         SA1100 flash: probing 32-bit flash bus
0188         SA1100 flash: Found 2 x16 devices at 0x0 in 32-bit mode
0189         Using RedBoot partition definition
0190         Creating 5 MTD partitions on "SA1100 flash":
0191         0x00000000-0x00020000 : "RedBoot"
0192         0x00020000-0x000e0000 : "Linux kernel"
0193         0x000e0000-0x003c0000 : "JFFS2"
0194         0x003c0000-0x003e0000 : "RedBoot config"
0195         0x003e0000-0x00400000 : "FIS directory"
0196 
0197 What's important here is the position of the partition we are interested in,
0198 which is the third one.  Within Linux, this correspond to /dev/mtdblock2.
0199 Therefore to boot Linux with the kernel and its root filesystem in flash, we
0200 need this RedBoot command::
0201 
0202         fis load "Linux kernel"
0203         exec -b 0x100000 -l 0xc0000 -c "root=/dev/mtdblock2"
0204 
0205 Of course other filesystems than JFFS might be used, like cramfs for example.
0206 You might want to boot with a root filesystem over NFS, etc.  It is also
0207 possible, and sometimes more convenient, to flash a filesystem directly from
0208 within Linux while booted from a ramdisk or NFS.  The Linux MTD repository has
0209 many tools to deal with flash memory as well, to erase it for example.  JFFS2
0210 can then be mounted directly on a freshly erased partition and files can be
0211 copied over directly.  Etc...
0212 
0213 
0214 RedBoot scripting
0215 -----------------
0216 
0217 All the commands above aren't so useful if they have to be typed in every
0218 time the Assabet is rebooted.  Therefore it's possible to automate the boot
0219 process using RedBoot's scripting capability.
0220 
0221 For example, I use this to boot Linux with both the kernel and the ramdisk
0222 images retrieved from a TFTP server on the network::
0223 
0224         RedBoot> fconfig
0225         Run script at boot: false true
0226         Boot script:
0227         Enter script, terminate with empty line
0228         >> load zImage -r -b 0x100000
0229         >> load ramdisk_ks.gz -r -b 0x800000
0230         >> exec -b 0x100000 -l 0xc0000
0231         >>
0232         Boot script timeout (1000ms resolution): 3
0233         Use BOOTP for network configuration: true
0234         GDB connection port: 9000
0235         Network debug at boot time: false
0236         Update RedBoot non-volatile configuration - are you sure (y/n)? y
0237 
0238 Then, rebooting the Assabet is just a matter of waiting for the login prompt.
0239 
0240 
0241 
0242 Nicolas Pitre
0243 nico@fluxnic.net
0244 
0245 June 12, 2001
0246 
0247 
0248 Status of peripherals in -rmk tree (updated 14/10/2001)
0249 -------------------------------------------------------
0250 
0251 Assabet:
0252  Serial ports:
0253   Radio:                TX, RX, CTS, DSR, DCD, RI
0254    - PM:                Not tested.
0255    - COM:               TX, RX, CTS, DSR, DCD, RTS, DTR, PM
0256    - PM:                Not tested.
0257    - I2C:               Implemented, not fully tested.
0258    - L3:                Fully tested, pass.
0259    - PM:                Not tested.
0260 
0261  Video:
0262   - LCD:                Fully tested.  PM
0263 
0264    (LCD doesn't like being blanked with neponset connected)
0265 
0266   - Video out:          Not fully
0267 
0268  Audio:
0269   UDA1341:
0270   -  Playback:          Fully tested, pass.
0271   -  Record:            Implemented, not tested.
0272   -  PM:                        Not tested.
0273 
0274   UCB1200:
0275   -  Audio play:        Implemented, not heavily tested.
0276   -  Audio rec:         Implemented, not heavily tested.
0277   -  Telco audio play:  Implemented, not heavily tested.
0278   -  Telco audio rec:   Implemented, not heavily tested.
0279   -  POTS control:      No
0280   -  Touchscreen:       Yes
0281   -  PM:                Not tested.
0282 
0283  Other:
0284   - PCMCIA:
0285   - LPE:                Fully tested, pass.
0286   - USB:                No
0287   - IRDA:
0288   - SIR:                Fully tested, pass.
0289   - FIR:                Fully tested, pass.
0290   - PM:                 Not tested.
0291 
0292 Neponset:
0293  Serial ports:
0294   - COM1,2:             TX, RX, CTS, DSR, DCD, RTS, DTR
0295   - PM:                 Not tested.
0296   - USB:                Implemented, not heavily tested.
0297   - PCMCIA:             Implemented, not heavily tested.
0298   - CF:                 Implemented, not heavily tested.
0299   - PM:                 Not tested.
0300 
0301 More stuff can be found in the -np (Nicolas Pitre's) tree.