With BIOS updated to v1.15 (which supports USB booting) I have successfully run:
These were installed on cheap unbranded 1GB pen drives using the USB Universal Installer - Easy as 1 2 3 from pendrivelinux.com or the LinuxLive USB Creator (LiLi) from linuxliveusb.com.
Note: The USB boot times are sloooow. DSL boots in a little under 2 minutes, Tiny Core around 2 minutes 15 seconds. With Tiny Core it takes 24 seconds to load the kernel, 90 seconds to load the initrd file, and the remainder of the time to start up and run the initialisation scripts. The initrd file is ~9MB in size, so these timings (~10Mb/s) imply USB 1.1 speeds rather than 2.0 speeds. I wonder why?
Work based on Tinycore Linux 2.7 with Linux kernel 2.6.29.1.
"To Do" list:
Having updated the BIOS to 1.15 the WT3150SE will boot from USB.
Trying the Wyse USB imaging tool results in error messages about the onboard memory.
The WT3150SE BIOS supports PXE (Pre eXecution Environment). If you want to know the full details about PXE then I suggest you download and read the specification or have a look at the wikipedia article. In essence you have a BIOS with an API that supports network operations such as UDP and FTP. In the first instance it will fetch a designated file (nominated by the DHCP server when it issues the IP address) and execute it. The file is downloaded to address 0x7C00, cannot be greater than 32K in size and is executed in real mode. This can then download other programs as required using the PXE API. This first downloaded program is often referred to as the NBP (Network Boot Program). As PXE is a standard we have a number of options...
My first step was to put a simple front-end on my hardware discovery program which prints out various details about the system environment it finds itself in. (Rebuilt to run at 0x7C00 and some preliminary code to switch into 32-bit protected mode). This showed that the GX2 processor/CS5535A combination is significantly different to the GX1/CS5530A used in many thin clients and the SC2200 used in the WT3125SE. Reading the Geode data sheet you find that system configuration is now controlled by a large set of MSRs (Machine Specific Registers). After a couple of tweaks to the program I was getting:
Memory size is 118MB GX2 processor has no DeviceID registers CPU info: 0: Vendor ID string = Geode by NSC 1: Family [5], Model [5], Step[2] 2-4: Marketing name = Geode(TM) Integrated Processor by National Semi Start and end of BIOS area... 000F0000: 24 58 50 52 03 15 00 0F 00 EB FF 00 00 EB FF 00 $XPR............ 000F0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ........ 000FFFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000FFFF0: EA 5B E0 00 F0 30 35 2F 32 34 2F 30 35 00 FC 00 .[...05/24/05... Scanning for BIOS PIRQ table Found PIR table @ 000FE100 Version = 1.0 Size = 80 Router Bus = 0 Rtr Dev Func = 15:0 Exclusive IRQs = 0x00 Comp. PCI rout. = 0x100B:0x002B Miniport data = 0x00000000 |------A-----|------B-----|------C-----|------D-----| Entry bus device link IRQbmap link IRQbmap link IRQbmap link IRQbmap slot 0 0 120 1 0x0800 2 0x0020 3 0x0400 4 0x0400 5 1 0 104 4 0x0400 3 0x0400 2 0x0020 1 0x0800 1 2 0 112 1 0x0800 2 0x0020 3 0x0400 4 0x0400 2 Network Interface: Device:Vendor ID : 002B:100B IO base address : 00000001 Memory base address : 00006101 IRQ register : 0
With the older thin clients most of the work in getting a basic kernel to run was in sorting out the interrupts. We see from the above that the WT3150's BIOS does provide an IRQ routing table - which solves that particular problem.
There is a PXE version of Grub. I downloaded version 1.98 of grub from here. Then I did:
./configure make
There were some brief instructions on building the PXE version on the grub wiki [was at http://grub.enbug.org/PXEBOOT, link now defunct when last checked]. As I hadn't installed grub on my system I used the following commands to generate a pxe boot image:
./grub-mkimage -d . --output=core.img --prefix="(pxe)/boot/grub" pxe pxecmd cat pxeboot.img core.img > grub2pxe mkdir ~/ftfp/boot mkdir ~/tftp/boot/grub cp *.mod *.lst ~/tftp/boot/grub/ cp grub2pxe ~/tftp/bootp.bin
The -d . switch tells it to look in the current directory for some files rather than the usual install directory.
The last command matches up to my DHCP configuration that names the file bootp.bin as the one to be downloaded from the TFTP root directory.
Powering up/resetting the WT3150SE gave me a grub boot screen on its display. The next step was to set up a configuration file. This is very simple. I ended creating a file with four variants - essentially with and without a serial console and with and without starting X.
# Timeout for menu set timeout=10 # Set default boot entry as Entry 0 set default=0 # Only difference between these options are the command line parameters # Entry 0 - Load Linux kernel - Text console menuentry "Text Console" { echo "Loading kernel..." linux (pxe)/boot/bzImage kmap=uk text console=tty0 echo "Loading initrd..." initrd (pxe)/boot/tinycore.gz echo "Booting..." } # Entry 1 - Load Linux kernel - Text mode with Serial console menuentry "Text Console + Serial" { echo "Loading kernel..." linux (pxe)/boot/bzImage kmap=uk text console=tty0 console=ttyS0,19200n8 echo "Loading initrd..." initrd (pxe)/boot/tinycore.gz echo "Booting..." } # Entry 2 - Load Linux kernel - Graphics menuentry "Graphics Console" { echo "Loading kernel..." linux (pxe)/boot/bzImage kmap=uk console=tty0 echo "Loading initrd..." initrd (pxe)/boot/tinycore.gz echo "Booting..." } # Entry 3 - Load Linux kernel - Graphics and a Serial Console menuentry "Graphics Console + Serial" { echo "Loading kernel..." linux (pxe)/boot/bzImage kmap=uk console=tty0 console=ttyS0,19200n8 echo "Loading initrd..." initrd (pxe)/boot/tinycore.gz echo "Booting..." }
There is a PXE version of the syslinux loader - see here. This option just boots and runs a Linux kernel and doesn't offer you the choices that you get with a Grub menu.
Still to be tried.
Being impatient I copied an existing WT3125SE bzImage file and tinycore.gz into the ~/tftp/boot/ directory and found I could boot and run Linux on the WT3150SE albeit with only a serial console. (At this point the monitor plugged into the WT3150SE just shows the three messages from grub).
Subsequently I built a kernel specifically for the 3150SE and had a running system with a working console. Once I found I also had to enable VM86 support in the kernel build I had an Xvesa graphical interface running as well.