OpenWrt Forum Archive

Topic: NSLU2 Help getting initial firmware built and loaded

The content of this topic has been archived on 2 May 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

I was finally able to get what I believe is a correct build for the NSLU2.

my bin directory looks like this after the build

nslu2@ubuntu01:~/trunk/bin$ ls -la
total 25952
drwxr-xr-x  3 nslu2 nslu2    4096 2007-04-09 20:04 .
drwxr-xr-x 17 nslu2 nslu2    4096 2007-04-09 19:28 ..
-rw-r--r--  1 nslu2 nslu2  926664 2007-04-09 20:04 openwrt-avila-2.6-zImage
-rw-r--r--  1 nslu2 nslu2  926664 2007-04-09 20:04 openwrt-gateway7001-2.6-zImage
-rw-r--r--  1 nslu2 nslu2 1179648 2007-04-09 20:04 openwrt-ixp4xx-2.6-jffs2-128k.img
-rw-r--r--  1 nslu2 nslu2 1114112 2007-04-09 20:04 openwrt-ixp4xx-2.6-jffs2-64k.img
-rw-r--r--  1 nslu2 nslu2  917504 2007-04-09 20:04 openwrt-ixp4xx-2.6-squashfs.img
-rwxr-xr-x  1 nslu2 nslu2  926656 2007-04-09 20:04 openwrt-ixp4xx-2.6-zImage
-rw-r--r--  1 nslu2 nslu2  926664 2007-04-09 20:04 openwrt-nas100d-2.6-zImage
-rw-r--r--  1 nslu2 nslu2 8388608 2007-04-09 20:04 openwrt-nslu2-2.6-jffs2-128k.bin
-rw-r--r--  1 nslu2 nslu2 8388608 2007-04-09 20:04 openwrt-nslu2-2.6-squashfs.bin
-rw-r--r--  1 nslu2 nslu2  926664 2007-04-09 20:04 openwrt-nslu2-2.6-zImage
-rw-r--r--  1 nslu2 nslu2  926664 2007-04-09 20:04 openwrt-pronghornmetro-2.6-zImage
-rw-r--r--  1 nslu2 nslu2  926664 2007-04-09 20:04 openwrt-wg302v2-2.6-zImage
drwxr-xr-x  2 nslu2 nslu2    4096 2007-04-09 20:04 packages

My question is what is the correct way to load the image onto the NSLU2.

I currently have a serial cable connected to the board and can get control of Redboot.


I set my local IP address with the command ip_address -l 192.168.10.6
I set the address of the TFTP server with the command ip_address -h 192.168.10.53

Then I loaded the firmware with the command load -r -v -b 0x01000000 -h 192.168.10.53 openwrt-nslu2-2.6-squashfs.bin

The image loaded ok.

I then wrote the firmware to flash with the command fis write -f 0x50060000 -b 0x01060000 -l 0x7a0000

the write went ok too..

I then executed reset and the router rebooted, 

It got this far...
RedBoot> reset
... Resetting.+Ethernet eth0: MAC address 00:0f:66:88:14:dc
IP: 192.168.0.1/255.255.255.0, Gateway: 192.168.0.1
Default server: 0.0.0.0, DNS server IP: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Red Hat certified release, version 1.92 - built 15:16:07, Feb  3 2004

Platform: IXDP425 Development Platform (XScale)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.

RAM: 0x00000000-0x02000000, 0x000723a0-0x01ff3000 available
FLASH: 0x50000000 - 0x50800000, 64 blocks of 0x00020000 bytes each.
== Executing boot script in 2.000 seconds - enter ^C to abort
RedBoot> boot;exec 0x01d00000
have eRcOmM
copy kernel code from flash to RAM
copy ramdisk file from flash to RAM
run kernel
Using base address 0x01d00000 and length 0x0000a0f4


APEX Boot Loader 1.4.7 -- Copyright (c) 2004,2005,2006 Marc Singer

APEX comes with ABSOLUTELY NO WARRANTY.  It is free software and you
are welcome to redistribute it under certain circumstances.
For details, refer to the file COPYING in the program source.

  apex => mem:0x00200000+0xa0f4   (41204 bytes)
  env  => nor:0x7f8000+16k        (empty)

Use the command 'help help' to get started.

# copy fis://kernel 0x00008000
1048544 bytes transferred
# wait 10 Type ^C key to cancel autoboot.
Type ^C key to cancel autoboot.
# boot
ATAG_HEADER
ATAG_MEM: start 0x00000000  size 0x02000000
ATAG_CMDLINE: (67 bytes) 'root=/dev/mtdblock4 rootfstype=squashfs,jffs2 console=ttyS0,115200'
ATAG_END
Booting kernel at 0x00008000...
Uncompressing Linux............................................................... done, booting the kernel.
Linux version 2.6.19.2 (nslu2@ubuntu01) (gcc version 4.1.2) #1 Mon Apr 9 20:03:35 EDT 2007
CPU: XScale-IXP42x Family [690541f1] revision 1 (ARMv5TE), cr=000039ff
Machine: Linksys NSLU2
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Built 1 zonelists.  Total pages: 8128
Kernel command line: rtc-x1205.probe=0,0x6f root=/dev/mtdblock4 rootfstype=squashfs,jffs2 console=ttyS0,115200
PID hash table entries: 128 (order: 7, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 32MB = 32MB total
Memory: 30472KB available (1724K code, 165K data, 80K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
IXP4xx: Using 16MiB expansion bus window size
PCI: IXP4xx is host
PCI: IXP4xx Using direct access for memory space
PCI: bus0: Fast back to back transfers disabled
dmabounce: registered device 0000:00:01.0 on pci bus
dmabounce: registered device 0000:00:01.1 on pci bus
dmabounce: registered device 0000:00:01.2 on pci bus
NET: Registered protocol family 2
IP route cache hash table entries: 256 (order: -2, 1024 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 1024 bind 512)
TCP reno registered
NetWinder Floating Point Emulator V0.97 (double precision)
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered (default)
IXP4xx Watchdog Timer: heartbeat 60 sec
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xc8000000 (irq = 15) is a XScale
serial8250.0: ttyS1 at MMIO 0xc8001000 (irq = 13) is a XScale
IXP4XX Q Manager 0.2.1 initialized.
IXP4XX NPE driver Version 0.3.0 initialized
ixp4xx_mac driver 0.3.1: eth0 on NPE-B with PHY[1] initialized
ixp_crypto: No HW crypto available
IXP4XX-Flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
 Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
cfi_cmdset_0001: Erase suspend on write enabled
Searching for RedBoot partition table in IXP4XX-Flash.0 at offset 0x7e0000
6 RedBoot partitions found on MTD device IXP4XX-Flash.0
Creating 6 MTD partitions on "IXP4XX-Flash.0":
0x00000000-0x00040000 : "RedBoot"
nslu2 mac: 00:0f:66:88:14:dc
0x00040000-0x00060000 : "SysConf"
0x00060000-0x00080000 : "Loader"
0x00080000-0x00180000 : "Kernel"
0x00180000-0x007e0000 : "Flashdisk"
0x007e0000-0x00800000 : "FIS directory"
npe: searching for firmware...
npe: found at 0x1c010, IXP425/NPE-B func: 00, rev: 2.1, size: 11964, id: 01000201
Image loaded to NPE-B Func:0, Rel: 2:1, Status: 82400000
i2c /dev entries driver
x1205 0-006f: chip found, driver version 1.0.7
x1205 0-006f: rtc intf: sysfs
x1205 0-006f: rtc intf: proc
x1205 0-006f: rtc intf: dev (254:0)
x1205 0-006f: rtc core: registered x1205 as rtc0
ip_conntrack version 2.4 (256 buckets, 2048 max) - 248 bytes per conntrack
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP westwood registered
NET: Registered protocol family 1
NET: Registered protocol family 17
Bridge firewalling registered
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
x1205 0-006f: setting the system clock to 2007-04-10 08:47:54 (1176194874)
Time: OSTS clocksource has been installed.
VFS: Mounted root (squashfs filesystem) readonly.
Freeing init memory: 80K
Warning: unable to open an initial console.

and hangs here forever.

Am I doing the right process?

(Last edited by shm267 on 14 Apr 2007, 04:40)

I am trying to get OpenWRT to run on a custom IXP465 based board, and I am running into the same issue.  The kernel is unable to open an initial console on either the jffs2 or squashfs filesystems.  However, if I use the zImage with a built in ramdisk I am able to get a console.  Any one have any idea what is going on?  Is something broken with the IXP4xx port?

I get the same result as as shm267.  squashfs and jffs2 boot sequences are essentially identically except for:

< VFS: Mounted root (squashfs filesystem) readonly.
---
> VFS: Mounted root (jffs2 filesystem).
118c118,120
< Warning: unable to open an initial console (-30).
---
> init started:  BusyBox v1.4.1 (2007-04-21 18:44:24 EDT) multi-call binary
> syslogd: /dev/null: No such file or directory
> /etc/init.d/rcS: /etc/init.d/rcS: 19: Can't open /dev/null

The squashfs warning message is coming from ~/trunk/build_armeb/linux/init/main.c (I added the return code.)
Note that -30 -> EROFS 30 /* Read-only file system */  The jffs2 boot seems at least to be getting to the rcS
script but apparently there is no /dev yet.  I don't know enough about the boot sequence yet to take this much
further.  The boot does not appear to be using udev to create /dev?

Additional factoids:
The Makefile that builds the images is in ~/trunk/build_armeb/OpenWrt-ImageBuilder-ixp4xx-2.6-for-Linux-i686/target/linux/ixp4xx-2.6/image/
It calls the slugimage.pl script to package the apex boot loader, NPE-B microcode, openwrt-nslu2-2.6-zImage kernel, and
openwrt-ixp4xx-2.6-squashfs.img or openwrt-ixp4xx-2.6-jffs2-64k.img files into an 8MB .bin image file.  Forget about
mounting the .img ramdisk file; it is big-endian.  I also tried mknod of null and console in ~/trunk/build_armeb/root/dev
but no joy; this directory is cleaned by 'make image'

Any ideas?  I'd love for someone to tell me I have a config setting wrong.  Is the OpenWRT boot sequence documented
somewhere?

(Last edited by kerlyn2001 on 25 Apr 2007, 13:00)

kerlyn2001 wrote:

Additional factoids:
The Makefile that builds the images is in ~/trunk/build_armeb/OpenWrt-ImageBuilder-ixp4xx-2.6-for-Linux-i686/target/linux/ixp4xx-2.6/image/
It calls the slugimage.pl script to package the apex boot loader, NPE-B microcode, openwrt-nslu2-2.6-zImage kernel, and
openwrt-ixp4xx-2.6-squashfs.img or openwrt-ixp4xx-2.6-jffs2-64k.img files into an 8MB .bin image file.

Shouldn't you be using the 128k jffs2 img file (since the erase block size on the NSLU2 is 128KiB) ?

As for the booting problem, there is a known jffs2/mtd problem which requires you to boot *three* times before the rootfs will be loaded correctly.  Same thing after any time you change the rootfs enough that it uses or frees another jffs2 block.  It's a weird problem which we haven't been able to solve.

Kaloz thought it might be related to RTC drivers, but I have compiled the kernel without those drivers and it still fails to boot until the third time.

Can you try booting three times in a row (*without* flashing in between) and tell me if that boots?

-- Rod Whitby
-- NSLU2-Linux Project Lead

Has this worked for anyone?  I have tried using the 4/16 jffs 128k file and one that I rolled yesterday.  Restarted different ways and multiple times, but isn't working.

David Solomon
andLinux Founder

The discussion might have continued from here.