Continuing on from yesterdays adventure I built the PowerPC compiler to support the Cisco 1700 (and maybe the 7200 NPE-G2?).
Much to my surprise, this one works too!
Loading ELF file ‘../ciscoload.bin’…
ELF entry point: 0x8000cba0
C1700 ‘default’: starting simulation (CPU0 IA=0xfff00100), JIT enabled.
ROMMON emulation microcode.
Launching IOS image at 0x8000cba0…
Error: Unable to find any valid flash! Aborting load.
Building this was a lot more fun. Â I thought I could sidestep building a Linux to PowerPC ELF cross compiler, but as it turns out, to bootstrap libgcc, you really need a compiler that can do this. Â But with the steps basically down, it was trivial to whip up.
Although I did keep on hitting this error with the Win32 tools thatÂ “-mstrict-align” is not supported, while trying to build the startup and libgcc sources using the MinGW targeted compiler through wine. Â But once I had a native Linux to PowerPC toolchain in place, not only could I build the Windows based compiler, but I can also use the flag -mstrict-align on Windows without it complaining. Â So lesson learned, have a cross compiler built to the final target to make life easier when building a Canadian cross.
As always, building the binutils package was a snap, just run:
./configure --host=i686-mingw32 --target=ppc-elf -prefix=/ppc
and I had my assembler/linker/librarian in no time.
Because of the aforementioned -mstrict-align issue, I got more creative with the parameters for GCC.
./configure --target=ppc-elf --prefix=/ppc --disable-nls --disable-werror --disable-libssp --without-headers --disable-threads --build=i486-linux-gnu --host=i686-mingw32
But with the Linux to PowerPC cross compiler in place, I was able to quickly generate a working toolchain.
I copied in CILO, and added in a build batch file to manually build it, and updated the test directory to run it.
So for those who are interested here is my toolchains:
As a minor addendum, The 1700 can run stuff that is far more complicated than the MIPS. Â I’m not sure why I get so many TLB violations for doing something more complicated but I (poorly) ported aclock to run on the cisco 1700!
The Dynamips ROMMON emulator doesn’t provide the keyboard input function call so it can’t read from the keyboard. Â Also it can’t read the clock so I have it running 250,000 dhrystones between clock ticks. Â Although I think that is far too many, maybe 125,000 would be more like it but it runs on the PowerPC. Â While on the MIPS I get nothing but this:
*** TLB (Load/Fetch) Exception ***
PC = 0x80008964, Cause = 0x00008008, Status Reg = 0x00408103
Oh well. Â Maybe it’s a stack problem I guess I’ll have to break down and do a memory map and write a malloc if I want to go down this road. Â Although back in 1999 this would be incredible but today I don’t think anyone would run anything but IOS on their cisco hardware.