We will have two main components in FreeSA: a flash-resident firmware image where, among other things, the kernel will live; and a hard disk-based filesystem containing the full operating system distribution.
The flash must contain the kernel and a small initial root filesystem. Under normal operations, the only thing this will be used for is activating the hard disk, mounting the real root filesystem on the hard disk, and then running init on the real root filesystem.
Under abnormal circumstances, the initial root filesystem must permit installation or recovery of the freesa system. This probably means, at a minimum, it should provide a way to obtain a root console prompt from the internal root filesystem. Ideally, this root shell could then be used to mount a full root filesystem image over NFS, for example; or partition and format the internal hard disk, then install an OS tarball found over the network using NFS or Samba or netcat.
The filesystem embedded in the flash image will be similar to the OpenWRT trx image -- that is, unless for some reason it turns out this is a bad idea, the kernel will be lzma compressed, and the root filesystem will be a squashfs image. It will also be built using a uClibc cross-toolchain, just like OpenWRT is.
- We will need to reverse-engineer the OpenWRT build process enough that we can build the cross-toolchain and all utilities ourselves, rather than relying on the OpenWRT build process. It's not that there is anything wrong with the OpenWRT build process; it's just that we don't understand it, and we want to understand the FreeSA construction process.
- The cross-toolchain for the firmware will be exactly like the OpenWRT cross-toolchain, uClibc-based and so on -- unless we can get away with using the glibc one, or unless we can build the firmware using native tools on a FreeSA system (in which case we might want to do that instead of using cross-tools).
- We will try to determine a minimal set of OpenWRT patches to apply to the Linus kernel to get something that works.
- The combination of the kernel plus the initial root filesystem will need to support:
- the IDE interface (aec92xx)
- root filesystem (xfs)
- network (b44)
- ssh or telnet server when in recovery mode; or maybe http://www.xenoclast.org/nca/
- possibly NFS or something similar
- tools like wget and fdisk and the like
- it won't need things like wireless
- It would be cool if we could use a USB gadget of some sort to provide a serial console; that would require:
- additional kernel drivers (homework: try these kernel config steps)
- some USB Console configuration homework on our part
- the purchase of a pair of gadgets perhaps like this USB to serial thing
It appears that there is just no way to access or control the CFE boot loader except using a real serial console, so an important goal of the FreeSA firmware is to make it unnecessary to access CFE.
(If we can use kexec on the FreeSA device, then the internal firmware's role will be a second-stage boot loader, whose job is to provide a way to load a "real" runtime kernel and boot it. But we suspect it will not be trivial to get kexec to work for us.)
Flash Image Contents¶
The initial goal is to support normal operations as stated above: activating the hard disk, mounting the real root filesystem on the hard disk, and then running init on the real root filesystem. What programs are needed to support this?
- exec
- pivot-root
- chroot
- the kernel modules that spin the hard disk.
- the "insmod" program
- udev to create the device node files as they are synthesized
- mount
- an init script
This will need to be based on a [ToolChain uClibc toolchain] busybox, since the root filesystem plus kernel image need to be 1728mb or less.
busybox¶
A really, really, (really!) minimal busybox is 106376 bytes. The other
stuff that needs to be present in SSBL is:
- the kernel image
- the kernel modules needed to turn on the hard drive
- some scripts, like the init script that does all the work of turning on the hard disk and so on
- ld-uClibc-0.9.29.so (22568 bytes)
- libuClibc-0.9.29.so (288732 bytes)
This probably gives us a lot of wiggle room for adding in other
convenience stuff -- maybe enough to have some networking utilities, or
USB disk mounting stuff ... we will see.
If we don't need other binaries besides busybox, then we can statically
link busybox and avoid having the shared libraries at all.
The busybox applets compiled in are:
- ash (a minimal shell)
- mount
- chroot
- init
- lsmod
- rmmod
- modprobe
- depmod
- insmod
- pivot_root
- sleep
- echo
- udev
- ... others? (what about "exec"?)
building busybox
There is no big trick to get it to use the new toolchain. Suppose that
your toolchain is in /opt/uclibc. Then all you have to do is:
- add /opt/uclibc/bin to $PATH
- in "make menuconfig", the option for cross-compiler prefix, say "mipsel-unknown-linux-uclibc-" (with the hyphen at the end)
init script¶
something like ...
#!/sbin/busybox sh
#
PATH=/sbin
export PATH
#hmmm seems like path is not working
/sbin/mount -t sysfs none /sys
/sbin/mount -t proc none /proc
#/sbin/mount -n -t ramfs none /dev
#/sbin/mount -t tmpfs mdev /dev
echo "Creating device nodes..."
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/sbin/mount -t tmpfs mdev /dev
#mkdir /dev/pts
#mount -t devpts devpts /dev/pts
#
# This activates the hard disk.
# The timing is quite sensitive. Shorter sleeps will certainly
# work but removing the sleeps entirely prevents the hard disk
# from being recognized. We do not yet understand why.
#
echo "activating hard disk"
cd /modules
echo "insmod diag.ko"
/sbin/insmod diag.ko
/sbin/sleep 10
echo "enabling pci devices"
cd /sys/devices/pci0000:00
for FILE in */enable
do
echo -n 1 > $FILE
done
cd /modules
/sbin/sleep 5
echo "insmod ide-core.ko"
/sbin/insmod ide-core.ko
/sbin/sleep 5
echo "insmod ide-disk.ko"
/sbin/insmod ide-disk.ko
/sbin/sleep 5
echo "insmod aec62xx.ko"
/sbin/insmod aec62xx.ko
echo "mount /dev/hde11 /mnt"
/sbin/mount /dev/hde11 /mnt
echo "cd /mnt"
cd /mnt
echo "pivot_root . old_root"
/sbin/pivot_root . old_root
echo "chrooting"
exec /sbin/chroot . /sbin/init </dev/console >/dev/console 2>&1
Notes¶
My idea is: start out with just this stuff ... see if it works by doing
the nfs-booting trick ... if it does, then turn it into a trx with a
non-NFS-boot kernel, and see how big it is. We have 1728kb to play
with; if the totally-minimal thing turns out to be like 1000kb then we
can layer in other stuff -- like USB modules so we can boot from an
external USB disk or flash stick; IP utilities so we can net-boot...
booting from an external disk using the same basic principle as the
above is probably one of the best "convert to freesa" options, come to
think of it. I mean if you have a stock wl-700ge and do the freesa
build in its entirety, that's great and you don't need anything else.
BUT if you don't want to do the freesa build yourself, and you don't
want to run an NFS server and so on, then it would be pretty nice to be
able to:
- download the freesa base disk image and TRX file
- use the rescue mode to flash the freesa TRX file
- put the disk image on a USB flash stick with standard VFAT filesystem and filename freesa.img
- hook up the USB stick, hit reset, and wait for ... something.
for that to work, we'd need the init script to be smarter:
- load USB modules and see if any usb storage devices are connected
- if so, mount them and look for freesa.img
- turn on the hard disk, create default partition table (maybe an alternate partition table can be defined on another file on the usb storage device)
- mount the internal hard disk partitions
- untar the disk image onto the hard disk
We COULD instead of untarring directly mount an alternate ramdisk image
also stored on the flash device -- that would give us more room than the
1728kb.
Offhand that sounds like adding:
- usb*.ko vfat.ko msdos.ko
- fdisk
- mkSOMETHINGfs (mkxfsfs? mkreiserfs?)
- tar
Results of Current Efforts¶
tft-booted nfs-rooted proof-of-concept¶
Eric created an example root directory for the SecondStageBootLoader and tested it with a tftp-booted and NFS-rooted configuration:
CFE-console: Serial init done.
Linux version 2.6.23.16-nb6eric (kernel@192.168.23.3) (gcc version 4.3.0 (GCC) ) #1 Mon Jan 19 09
<<< trimmed >>>
b44: eth1: BUG! Timeout waiting for bit 80000000 of register 428 to clear.
IP-Config: Complete:
device=eth0, addr=192.168.23.3, mask=255.255.255.0, gw=192.168.23.1,
host=192.168.23.3, domain=, nis-domain=(none),
bootserver=0.0.0.0, rootserver=192.168.23.5, rootpath=
Looking up port of RPC 100003/2 on 192.168.23.5
Looking up port of RPC 100005/1 on 192.168.23.5
VFS: Mounted root (nfs filesystem) readonly.
Freeing unused kernel memory: 124k freed
Creating device nodes...
mdev: mknod mtdblock4: Read-only file system
activating hard disk
insmod diag.ko
diag: Detected 'ASUS WL-700gE'
diag: Spinning up HDD and enabling leds
enabling pci devices
PCI: Device 0000:00:00.0 resource collisions detected. Ignoring...
PCI: Device 0000:00:00.0 resource collisions detected. Ignoring...
PCI: Fixing up device 0000:00:00.0
PCI: Enabling device 0000:00:02.0 (0000 -> 0003)
PCI: Fixing up device 0000:00:02.0
PCI: Enabling device 0000:00:03.0 (0000 -> 0001)
PCI: Fixing up device 0000:00:03.0
PCI: Enabling device 0000:00:03.1 (0000 -> 0001)
PCI: Fixing up device 0000:00:03.1
PCI: Enabling device 0000:00:03.2 (0000 -> 0002)
PCI: Fixing up device 0000:00:03.2
insmod ide-core.ko
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
insmod ide-disk.ko
insmod aec62xx.ko
AEC6280: IDE controller at PCI slot 0000:00:02.0
AEC6280: chipset revision 16
AEC6280: 100% native mode on irq 6
ide2: BM-DMA at 0x0180-0x0187, BIOS settings: hde:pio, hdf:pio
ide3: BM-DMA at 0x0188-0x018f, BIOS settings: hdg:pio, hdh:pio
hde: HDT722516DLAT80, ATA DISK drive
hde: host side 80-wire cable detection failed, limiting max speed to UDMA33
ide2 at 0x100-0x107,0x10a on irq 6
hde: max request size: 512KiB
hde: 321672960 sectors (164696 MB) w/7674KiB Cache, CHS=20023/255/63, UDMA(33)
hde: cache flushes supported
hde: hde1 < hde5 hde6 hde7 hde8 hde9 hde10 hde11 >
mount /dev/hde11 /mnt
kjournald starting. Commit interval 5 seconds
EXT3 FS on hde11, internal journal
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
cd /mnt
pivot_root . old_root
chrooting
Algorithmics/MIPS FPU Emulator v1.5
INIT: version 2.86 booting
[ OK ] kernel-based file systems: /proc /sys
[ OK ] /dev in tmpfs...
[ OK ]static entries...
[ OK ]Permissons on /dev/shm...
Starting udevd...
udevd[211]: lookup_group: specified group 'uucp' unknown
udevd[211]: lookup_group: specified group 'uucp' unknown
udevd[211]: lookup_group: specified group 'uucp' unknown
[ OK ]2]: main: the kernel does not support inotify, udevd can't monitor rules file changes
Performing Coldplugging...
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
ehci_hcd 0000:00:03.2: EHCI Host Controller
ehci_hcd 0000:00:03.2: new USB bus registered, assigned bus number 1
ehci_hcd 0000:00:03.2: irq 6, io mem 0x40005000
USB Universal Host Controller Interface driver v3.0
ehci_hcd 0000:00:03.2: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 4 ports detected
uhci_hcd 0000:00:03.0: UHCI Host Controller
uhci_hcd 0000:00:03.0: new USB bus registered, assigned bus number 2
uhci_hcd 0000:00:03.0: irq 6, io base 0x00000200
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
uhci_hcd 0000:00:03.1: UHCI Host Controller
uhci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:03.1: irq 6, io base 0x00000220
usb usb3: configuration #1 chosen from 1 choice
hub 3-0:1.0: USB hub found
[ OK ]1.0: 2 ports detected
[ OK ] root file system in read-only mode...
Checking file systems...
/dev/hde11 has gone 49710 days without being checked, check forced.
/dev/hde11: 82882/9191424 files (2.4% non-contiguous), 725465/18378359 blocks
/dev/hde5: Superblock last write time is in the future. FIXED.
/dev/hde5 was not cleanly unmounted, check forced.
/dev/hde5: 29/26208 files (17.2% non-contiguous), 28870/104420 blocks
/dev/hde8: recovering journal
/dev/hde8: Superblock last mount time is in the future. FIXED.
/dev/hde8: clean, 65/489600 files, 33804/977956 blocks
/dev/hde9: recovering journal
/dev/hde9: Superblock last mount time is in the future. FIXED.
/dev/hde9: clean, 11/734400 files, 58717/1465931 blocks
/dev/hde10: recovering journal
/dev/hde10: Superblock last mount time is in the future. FIXED.
[ WARN ]10: clean, 463/9191424 files, 335105/18380368 blocks
WARNING:
File system errors were found and have been corrected. You may want to double-check that everything was fixed properly.
Remounting root file system in read-write mode...
[ OK ]on hde11, internal journal
Recording existing mounts in /etc/mtab...
mount: according to mtab, /dev/hde11 is already mounted on /
mount: according to mtab, proc is already mounted on /proc
mount: according to mtab, sysfs is already mounted on /sys
[ FAIL ]
Mounting remaining file systems...
kjournald starting. Commit interval 5 seconds
EXT3 FS on hde8, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting. Commit interval 5 seconds
EXT3 FS on hde9, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting. Commit interval 5 seconds
EXT3 FS on hde10, internal journal
[ OK ] mounted filesystem with ordered data mode.
Activating all swap files/partitions...
Adding 1959920k swap on /dev/hde6. Priority:1 extents:1 across:1959920k
[ OK ]959920k swap on /dev/hde7. Priority:1 extents:1 across:1959920k
[ OK ] file systems: /tmp /var/lock /var/run
[ FAIL ]system clock...
[ OK ] up the loopback interface...
[ OK ]hostname to freesa-0...
INIT: Entering runlevel: 3
[ OK ] system log daemon...
[ FAIL ] kernel log daemon...
Bringing up the eth0 interface...
[ WARN ]e eth0 already configured with IP 192.168.23.3.
Starting ntpd...
[ OK ]me set +286724941.584186s
[ OK ] SSH Server...
INIT: Id "3" respawning too fast: disabled for 5 minutes
INIT: Id "1" respawning too fast: disabled for 5 minutes
INIT: Id "4" respawning too fast: disabled for 5 minutes
INIT: Id "2" respawning too fast: disabled for 5 minutes
INIT: Id "6" respawning too fast: disabled for 5 minutes
INIT: Id "5" respawning too fast: disabled for 5 minutes
INIT: no more processes left in this runlevel
Initially had problems with /dev/hde11 does not existing, which was perfectly reasonable as we hadn't set up udev yet. Maybe we should SetupUdevForSsbl ... also BusyBox's mdev applet seems to be useful.
just like the man says, /sbin/chroot needs to be in the same location in both systems.
And now we log in from remote ....
halle:~ eric$ ssh -A 192.168.23.3 Last login: Sat Jan 1 01:09:37 2000 from 192.168.23.2 eric:~$ uname -a Linux freesa-0 2.6.23.16-nb6eric #1 Mon Jan 19 00:56:34 CET 2009 mips Broadcom BCM3302 V0.6 Broadcom BCM47xx GNU/Linux eric:~$ cat /proc/cpuinfo system type : Broadcom BCM47xx processor : 0 cpu model : Broadcom BCM3302 V0.6 BogoMIPS : 262.14 wait instruction : yes microsecond timers : yes tlb_entries : 32 extra interrupt vector : no hardware watchpoint : no ASEs implemented : VCED exceptions : not available VCEI exceptions : not available eric:~$
And do the happy dance!
creating a trx¶
Blindly following the steps Brett extracted from the OpenWRT build processs:
bob:~/openwrt$ ./trx -o freesa-suicide0.trx -f lzma-loader/loader.gz -f /usr/src/kernel/linux/vmlinux.lzma -a 1024 -f ssbl.squashfs -a 0x10000 -A fs_mark mjn3's trx replacement - v0.81.1 bob:~/openwrt$ ls -ltr freesa-suicide0.trx -rw-rw-r-- 1 bob bob 1380352 2009-02-03 12:00 freesa-suicide0.trx bob:~/openwrt$
Then we flash it to the device:
eric@ijmac:/home/clfs/boot$ tftp tftp> bin tftp> connect 192.168.1.1 tftp> put freesa-suicide0.trx Sent 1380352 bytes in 1.7 seconds tftp> quit eric@ijmac:/home/clfs/boot$
And see that it is written:
Failed.: Timeout occured Reading :: TFTP Server. TFTP_BLKLEN!! Done. 1380352 bytes read Download of 0x151000 bytes completed Write kernel and filesystem binary to FLASH (0xbfc40000) flash device 'flash1.trx' Programming... done. 1380352 bytes written
Then we reboot the router. It did load the kernel, however, it gave "Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)" ... since it lacks driver for the mtd block device, we probably need to include more mtd stuff in our config.
We didn't even get to the point where it could try to un-lzma the SSBL in the flash using SquashFS-LZMA 3.4-457 .
Tried some different config options, got the same results.
Failed.: Timeout occured
Reading :: TFTP Server.
TFTP_BLKLEN!!
Done. 987136 bytes read
Download of 0xf1000 bytes completed
Write kernel and filesystem binary to FLASH (0xbfc40000)
flash device 'flash1.trx'
Programming...
done. 987136 bytes written
CFE version 1.0.37 for BCM947XX (32bit,SP,LE)
Build Date: ¥| 12¤ë 29 20:36:58 CST 2005 (root@localhost.localdomain)
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.
Initializing Arena
Initializing Devices.
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.23.0
rndis0: Broadcom USB RNDIS Network Adapter (P-t-P)
CPU type 0x29006: 264MHz
Total memory: 67108864 KBytes
Total memory used by CFE: 0x80800000 - 0x8089BA00 (637440)
Initialized Data: 0x80831B70 - 0x80834250 (9952)
BSS Area: 0x80834250 - 0x80835A00 (6064)
Local Heap: 0x80835A00 - 0x80899A00 (409600)
Stack Area: 0x80899A00 - 0x8089BA00 (8192)
Text (code) segment: 0x80800000 - 0x80831B70 (203632)
Boot area (physical): 0x0089C000 - 0x008DC000
Relocation Factor: I:00000000 - D:00000000
Device eth0: hwaddr 00-17-31-2A-90-0B, ipaddr 192.168.1.1, mask 255.255.255.0
gateway not set, nameserver not set
Null Rescue Flag.
Null Restore Flag.
set pivot_wait = 0
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)
Loading: .. 4092 bytes read
Entry at 0x80001000
Closing network.
Starting program at 0x80001000
CFE-console: Serial init done.
Linux version 2.6.23.16-fb7eric (kernel@192.168.23.4) (gcc version 4.3.0 (GCC) ) #1 Wed May 19 21:12:08 CEST 2010
CPU revision is: 00029006
ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x03, vendor 0x4243)
ssb: Core 1 found: Fast Ethernet (cc 0x806, rev 0x06, vendor 0x4243)
ssb: Core 2 found: Fast Ethernet (cc 0x806, rev 0x06, vendor 0x4243)
ssb: Core 3 found: USB 1.1 Hostdev (cc 0x808, rev 0x02, vendor 0x4243)
ssb: Core 4 found: PCI (cc 0x804, rev 0x08, vendor 0x4243)
ssb: Core 5 found: MIPS 3302 (cc 0x816, rev 0x00, vendor 0x4243)
ssb: Core 6 found: V90 (cc 0x807, rev 0x02, vendor 0x4243)
ssb: Core 7 found: IPSEC (cc 0x80B, rev 0x00, vendor 0x4243)
ssb: Core 8 found: MEMC SDRAM (cc 0x80F, rev 0x00, vendor 0x4243)
ssb: Initializing MIPS core...
ssb: set_irq: core 0x0806, irq 2 => 2
ssb: set_irq: core 0x0806, irq 3 => 3
ssb: set_irq: core 0x0804, irq 0 => 4
ssb: Sonics Silicon Backplane found at address 0x18000000
Determined physical RAM map:
memory: 04000000 @ 00000000 (usable)
Built 1 zonelists in Zone order. Total pages: 16256
Kernel command line: root=/dev/mtdblock2 rootfstype=squashfs init=/sbin/init noinitrd console=ttyS0,115200
Primary instruction cache 16kB, physically tagged, 2-way, linesize 16 bytes.
Primary data cache 16kB, 2-way, linesize 16 bytes.
Synthesized TLB refill handler (21 instructions).
Synthesized TLB load handler fastpath (33 instructions).
Synthesized TLB store handler fastpath (33 instructions).
Synthesized TLB modify handler fastpath (32 instructions).
PID hash table entries: 256 (order: 8, 1024 bytes)
Using 132.000 MHz high precision timer.
console [ttyS0] enabled
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 62212k/65536k available (2027k kernel code, 3264k reserved, 300k data, 104k init, 0k highmem)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
Time: MIPS clocksource has been installed.
ssb: PCIcore in host mode found
Registering a PCI bus after boot
PCI: Fixing up bridge 0000:00:00.0
PCI: Fixing up device 0000:00:00.0
PCI: Fixing latency timer of device 0000:00:00.0 to 168
PCI: Enabling device 0000:00:01.0 (0000 -> 0002)
PCI: Fixing up device 0000:00:01.0
ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x0D, vendor 0x4243)
ssb: Core 1 found: IEEE 802.11 (cc 0x812, rev 0x09, vendor 0x4243)
ssb: Core 2 found: PCI (cc 0x804, rev 0x0C, vendor 0x4243)
ssb: Core 3 found: PCMCIA (cc 0x80D, rev 0x07, vendor 0x4243)
ssb: Sonics Silicon Backplane found on PCI device 0000:00:01.0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing enabled
serial8250: ttyS0 at MMIO 0x0 (irq = 3) is a 16550A
serial8250: ttyS1 at MMIO 0x0 (irq = 3) is a 16550A
b44.c:v1.01 (Jun 16, 2006)
eth0: Broadcom 10/100BaseT Ethernet 00:17:31:2a:90:0b
eth1: Broadcom 10/100BaseT Ethernet 40:10:18:00:00:2c
flash init: 0x1c000000 0x02000000
Physically mapped flash: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0040
Physically mapped flash: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
Flash device: 0x200000 at 0x1fc00000
bootloader size: 262144
Updating TRX offsets and length:
old trx = [0x0000001c, 0x00000974, 0x000b9c00], len=0x000f1000 crc32=0x0b009a9c
new trx = [0x0000001c, 0x00000974, 0x000b9c00], len=0x000b9c00 crc32=0x2ae3c4e1
Done
Creating 4 MTD partitions on "Physically mapped flash":
0x00000000-0x00040000 : "cfe"
0x00040000-0x001f0000 : "linux"
0x000f9c00-0x001f0000 : "rootfs"
mtd: partition "rootfs" doesn't start on an erase block boundary -- force read-only
mtd: partition "rootfs" set to be root filesystem
mtd: partition "rootfs_data" created automatically, ofs=120000, len=D0000
0x00120000-0x001f0000 : "rootfs_data"
0x001f0000-0x00200000 : "nvram"
gpiodev: gpio device registered with major 254
gpiodev: gpio platform device registered with access mask FFFFFFFF
nf_conntrack version 0.5.0 (1024 buckets, 4096 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP vegas registered
NET: Registered protocol family 1
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
List of all partitions:
1f00 256 mtdblock0 (driver?)
1f01 1728 mtdblock1 (driver?)
1f02 985 mtdblock2 (driver?)
1f03 832 mtdblock3 (driver?)
1f04 64 mtdblock4 (driver?)
No filesystem could mount root, tried: squashfs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
Two notable differences between the believed good OpenWRT kernel config and config-2.6.23.16-fb7eric are:
1. the OpenWRT kernel is for 2.6.23 not 2.6.23.16
2. the OpenWRT config has initrd support on (even though we're saying noinitrd) ... but this gave me compile errors about invalid option to lzma, so I turned it off.