Linux-on-thin-client links

Thin client related links

Manufacturer and hardware links

Miscellaneous links

WinNT/WinXP boot record info:

Evo T30

The Evo T30 looks like it might be a T20 with more I/O, but I've not yet laid my hands on one to check. I expect that the T30's should work with the process documented here, assuming you have a WinNT-based model.

hp T30 page: http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=96324&prodTypeId=12454

Debian boot from external USB HDD

The short version is this:

I modified my ordinary Debian initrd to include the usb modules and to specify the new root device (my boot files are on sda5, but sda1 is probably a more common option). (note: I have done this with both 2.4 and 2.6 kernels - slightly different methods needed for working with the initrd in each)

Patched grub according to the instructions by Dag Sverre.

Compiled grub with a fixed config file saying:

default 0
timeout 0

title Debian_sda5
root (hd0,0)
kernel /vmlinuz-2.4.27-2-386 root=/dev/sda5
initrd /initrd.img-2.4.27-2-386.usbboot

I believe that the standard firmware I used came from SP22462 and was named U96CPQ163.BIN - I chose that one because it is 95791kb (about as big as is possible, I think) which gave me plenty of room to work in (I don't know how to resize the image, so I'm stuck with whatever I start with)

Mounted a copy of the standard firmware as a loop device, modified the partition info to make the first partition be fat instead of ntfs, unmounted that loop.

Mounted the first partition as a loop device. Used dd to copy grub stage 1 & 2 files to the right sectors. Formatted it as a fat drive with extra large number of reserved sectors (to allow space for grub files before the filesystem). Used plain cp to copy my kernel and new initrd into place in the root of the drive. Unmounted the loop and flashed the T20 with the new bootp.bin

The usb hdd has Debian installed on it, in an ext3 partition (can't remember for certain how I got it there, but I think I just did an ordinary Debian install to the usb hdd using another computer).

I learned a lot from this:
http://www.ukhoneynet.org/research/honeystick-howto/

Testing speed of USB1.1 ports

booting 2.6 kernel off USB HDD with various init.d things disabled
= from 13:20..15:30
= 2:10 boot (min:sec)

copying from UF to UH via usb1.1
= from 58:10..59:40
= 90s for 49M
=> 500M/49M*90/60
= 15min for 500Meg

kernel 2.4 vs 2.6

I just used stock Debian kernels, with initrd patched for usb boot, as mentioned above. For the T20 (and my particular interests), the 2.4 kernel is clearly better - the difference in speed is obvious without any fancy timing tests. In order to quantify things better, I used lmbench to run some tests (I don't know if there is a better tool, but it did what I needed).

kernel 2.4.27-2-386 (first column) vs kernel 2.6.18-3-486

Simple syscall:                 0.80     0.88 microseconds
Simple read:                    1.91     4.03 microseconds
Simple write:                   1.46     2.77 microseconds
Simple stat:                   19.10    25.21 microseconds
Simple fstat:                   2.75     5.05 microseconds
Simple open/close:             32.40    53.69 microseconds

Select on 10 fd's:              8.48     9.18 microseconds
Select on 100 fd's:            61.24    56.88 microseconds
Select on 250 fd's:           153.99   136.52 microseconds
Select on 500 fd's:           297.15   276.52 microseconds

Select on 10 tcp fd's:         11.14    12.38 microseconds
Select on 100 tcp fd's:       142.28   117.54 microseconds
Select on 250 tcp fd's:       328.67   294.07 microseconds
Select on 500 tcp fd's:       663.27   600.42 microseconds

Signal handler installation:    4.23     5.98 microseconds
Signal handler overhead:        9.29    17.93 microseconds
Protection fault:               3.02     2.00 microseconds
Pipe latency:                  24.59    90.61 microseconds
AF_UNIX sock stream latency:   94.51   210.00 microseconds

Process fork+exit:           1806.6   2522.65 microseconds
Process fork+execve:         6574.2   8860.50 microseconds
Process fork+/bin/sh -c:    26363    31827    microseconds

Yes, I know that I mistakenly tested a 386 kernel vs a 486 kernel, but my understanding is that it won't have made much difference, and I don't care enough to re-test. A regular part of my daily usage is running unison (it's like rsync) on local files - that accesses a lot of files and was deathly slow with the 2.6 kernel.

Speed

Whilst it certainly isn't a speed demon, the T20 running DSL is good enough to be useful. Firefox is slow to load, but once loaded it's fine for basic browsing (I have no idea about flash or streaming media). Dillo is faster (but I haven't played with it much yet, so can't comment more). Running as a client for viewing remote desktop of a windows machine also runs well.

Physical memory found in the model I have:

This T20 is listed at http://www.hp-store.com/PD_00320.aspx as being: "Base Unit, T20 NTe 96F/128R 238365-001 242305-001"

Inside the box I found:

  • 64M Flash (2 x Toshiba TC58256AFT) + 32MB SmartMedia = 96M
  • 128M SDRAM (4 x Hynix HY57V561620BT-H)

==> 96/128

The SmartMedia card is mapped at the end of memory (ie. the end of the disk image), so if you're not using all of memory then the T20 will run fine without it installed. This is the case where only kernel and initrd are installed (with the rest of the system on USB flash) - the kernel/initrd typically only amount to a few meg.

I haven't tried, but I suspect that download will fail if you are using a model that is meant to have a SmartMedia card but doesn't have it installed.

to reduce kernel messages on console

to get rid of eth0 wakeup messages either edit /etc/default/klogd and add "-c 5" (for example) - deprecated!

or use sysctl:

# sysctl -w kernel.printk=5

or fix it properly by patching broken natsemi module, as described on OpenEvoT20 mailling list?

I don't know if it changes elsewhere in DSL, but in linuxrc (in the initrd), the message level is set to 6.

"pci=" boot options

Trying to find an option which might enable access to internal flash drive via IDE ports:

  • pci=bios - can't find usb at all and fails to boot
  • pci=conf2 - can't find usb at all and fails to boot
  • pci=nobios - no change
  • pci=biosirq - no change
  • pci=conf1 - no change

(None of these options produced anything useful)

General Notes

  • seem to need USB keyboard for netxfer - holding down 'p' on PS2 kybd connected to PS2/USB adapter is just ignored (might work by tapping 'p' repeatedly - UPDATE: yes, tapping the key repeatedly does seem to work with a PS2/USB adapter)
  • PS2/USB adapter seems to be OK for everything (although mouse plugged into same adapter as kybd seems to stop working sometimes and needs replugging)
  • something seems to put the mouse into an unfortunate mode - I'm using it with another computer and a KVM - if I power up the T20 first then the other computer ignores the wheel/middlebutton of the mouse. If I power up the other computer first then both fully recognise the wheelmouse. I haven't tried to solve this yet - it may be trivial.
  • NFS on Debian: need to edit /etc/default/portmap to remove restriction of NFS to localhost (comment out the line that says: OPTIONS="-i 127.0.0.1")
  • in /opt/ltsp/i386/etc/lts.conf change server to "nsc"
  • need to make sure NFS shares have readable permissions?
  • to see what is being exported by NFS: showmount -e

WinNT diagnostic tools

  • Windows NT 4.0 Diagnostics - On the Task bar, click Start, then Run. Enter WINMSD.EXE, then click OK
  • Windows Sector Inspector, "SecInspect.exe - View the contents of master boot records, boot sectors, and IA64 GUID partition tables."

Administrator mode of standard firmware

  • if your T20 never lets you get to a desktop (just gives a login screen) then you may need to re-flash it with standard firmware to allow login-free booting
  • Once you have the standard NTe firmware running, at the desktop press these 5 keys in order: tab home end left right
  • Then you'll get an auto-login dialog
  • Set both username and password to "administrator" (all lowercase??)
  • It will then want to reboot - do so.
  • You will now be in administrator mode and will have access to the control panel etc.
  • In order to get the admin mode to keep working indefinitely, you may need to repeat the process, then don't reboot, then flush WriteFilter Cache???

NetXfer of new firmware

(See articles for linux netxfer method)

For flashing the T20, I used netxfer18.exe from sp22454, running under WinXP and the Microsoft Java VM.

Either download msjavx86.exe JVM from somewhere (I found it on the laplink website) and use HP/Compaq netxfer software, or setup a bootp server under linux.

To start download (assuming T20 is powered up, with power button showing green):

  1. run netxfer or bootp server.
  2. press & hold T20 power button until it turns amber.
  3. press and hold 'p' (lowercase) until T20 reboots and displays netxfer message.
  4. T20 will contact server and then display something relevant.

Notes:

  • netxfer doesn't work with ordinary Sun JVM, you need the Microsoft JVM (msjavx86.exe).
  • takes about 13s total from starting pressing power button until netxfer message is displayed.
  • no need to physically disconnect/reconnect power.
  • if you're using a PS/2 keyboard through a PS/2-to-USB adapter then you probably need to tap the 'p' key repeatedly until the netxfer message comes up (rather than just holding down p, as you can do on a USB keyboard).
  • you don't need to be terribly quick pressing 'p' after power button goes amber - you can do it all with one hand without hurrying.
  • netxfer works with ports 10067 + 10068 (dhcp), and port 10069 (tftp). If you press 'q' instead of 'p' then it uses ports 67/68/69 (which are 'normal' ports for dhcp/tftp)

Test copying speed to and from T20 over SSH

L400b $ scp -P 22 bootp.bin.std dsl@192.168.1.10:/dev/null
bootp.bin.std    100%   94MB   1.1MB/s   01:28    
scp: /dev/null: truncate: Invalid argument

copying in opposite direction managed about half the bitrate. note: L400b is only a PII-400, but it's faster than the T20, so the T20 should be the only limiting factor. Copying from 667MHz machine to 400MHz machine, for comparison:

L667 $ scp  bootp.bin 192.168.1.40:/dev/null
bootp.bin    100%   94MB   1.9MB/s   00:50

Using cfdisk on loop-mounted disk image

                                    cfdisk 2.12r

                               Disk Drive: /dev/loop1
                            Size: 97255424 bytes, 97 MB
                 Heads: 212   Sectors per Track: 56   Cylinders: 16

    Name        Flags       Part Type  FS Type           [Label]           Sectors
 ----------------------------------------------------------------------------------
    loop1p1     Boot, NC     Primary   NTFS                                 189952

from NetXfer of standard firmware SP22454

Note: I was unable to accurately apply Dag Sverre's method for finding files inside image, but these are the notes I made anyway:

filename:      size:     sizehex:     sizehexbytes:     supposedstartaddressinfile:
ulc_code.bin   262144 =   0x40000          04 00 00          00 04 01 8C = 262540
poweron.bmp     14120 =    0x3728       00 00 37 28          00 08 01 94 = 524692                dd bs=1 count=14120 if=bootp.bin of=poweron.bmp skip=820116       0xc8394
filesys0.img 31719424 = 0x1e40000 --> 0x01 e4 00 00    start=00 08 38 BC = 538812        actual start address is 0xcbabc ('partition' starts at 0xcbcbc)
filesys1.img 32768000 = 0x1f40000 --> 0x01 f4 00 00    start=01 EC 38 BC = 32258236
filesys2.img 32768000 = 0x1f40000                      start=03 E0 38 BC = 65026236
  • files appear to be stored consecutively with no gaps between them

patched legacy grub

$ bash ./configure \
           --enable-preset-menu=presetmenu \
           --enable-natsemi \
           --enable-pci-direct \
           --disable-ext2fs \
           --disable-fat \
           --disable-ffs \
           --disable-ufs2 \
           --disable-minix \
           --disable-reiserfs \
           --disable-vstatfs \
           --disable-jfs \
           --disable-xfs \
           --disable-iso9660 \
           --disable-md5-password \
           --disable-serial
  • needed to patch out test for running compiled c code in configure script, otherwise configure fails (this might be related to my umask or drive mounting options - it's not related to grub)
  • still didn't compile; something wrong with natsemi code?

grub NatSemi problem

$ ./configure --enable-preset-menu=presetmenu --enable-natsemi --enable-pci-direct --disable-ext2fs --disable-fat --disable-ffs --disable-ufs2 --disable-minix --disable-reiserfs --disable-vstatfs --disable-jfs --disable-xfs --disable-iso9660--disable-md5-password --disable-serial
$ make clean
$ make all
make  all-recursive
make[1]: Entering directory `/home/karlmw/prj/c-x86/grub-0.97'
Making all in netboot
make[2]: Entering directory `/home/karlmw/prj/c-x86/grub-0.97/netboot'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../stage2 -I../stage1  -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -falign-jumps=1 -falign-loops=1 -falign-functions=1 -Wundef -Os -fno-stack-protector -fno-builtin -nostdinc -DFSYS_TFTP=1 -DINCLUDE_NATSEMI=1 -DCONGESTED=1 -DCONFIG_PCI_DIRECT=1 -DNE_SCAN=0x280,0x300,0x320,0x340 -DWD_DEFAULT_MEM=0xCC000 -g -MT libdrivers_a-config.o -MD -MP -MF ".deps/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.o `test -f 'config.c' || echo './'`config.c; \                                                                                                                                            then mv -f ".deps/libdrivers_a-config.Tpo" ".deps/libdrivers_a-config.Po"; else rm -f ".deps/libdrivers_a-config.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../stage2 -I../stage1  -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -falign-jumps=1 -falign-loops=1 -falign-functions=1 -Wundef -Os -fno-stack-protector -fno-builtin -nostdinc -DFSYS_TFTP=1 -DINCLUDE_NATSEMI=1 -DCONGESTED=1 -DCONFIG_PCI_DIRECT=1 -DNE_SCAN=0x280,0x300,0x320,0x340 -DWD_DEFAULT_MEM=0xCC000 -g -MT libdrivers_a-fsys_tftp.o -MD -MP -MF ".deps/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo './'`fsys_tftp.c; \                                                                                                                             then mv -f ".deps/libdrivers_a-fsys_tftp.Tpo" ".deps/libdrivers_a-fsys_tftp.Po"; else rm -f ".deps/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../stage2 -I../stage1  -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -falign-jumps=1 -falign-loops=1 -falign-functions=1 -Wundef -Os -fno-stack-protector -fno-builtin -nostdinc -DFSYS_TFTP=1 -DINCLUDE_NATSEMI=1 -DCONGESTED=1 -DCONFIG_PCI_DIRECT=1 -DNE_SCAN=0x280,0x300,0x320,0x340 -DWD_DEFAULT_MEM=0xCC000 -g -MT libdrivers_a-main.o -MD -MP -MF ".deps/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.o `test -f 'main.c' || echo './'`main.c; \                                                                                                                                                      then mv -f ".deps/libdrivers_a-main.Tpo" ".deps/libdrivers_a-main.Po"; else rm -f ".deps/libdrivers_a-main.Tpo"; exit 1; fi
main.c:57: error: static declaration of 'bootp_data' follows non-static declaration
./etherboot.h:534: error: previous declaration of 'bootp_data' was here
main.c:59: error: static declaration of 'end_of_rfc1533' follows non-static declaration
./etherboot.h:536: error: previous declaration of 'end_of_rfc1533' was here
main.c: In function 'udp_transmit':
main.c:231: warning: pointer targets in passing argument 1 of 'eth_transmit' differ in signedness
main.c:276: warning: pointer targets in passing argument 1 of 'eth_transmit' differ in signedness
main.c:290: warning: pointer targets in passing argument 1 of 'eth_transmit' differ in signedness
main.c: In function 'tftp':
main.c:462: warning: pointer targets in passing argument 1 of 'fnc' differ in signedness
main.c: In function 'rarp':
main.c:509: warning: pointer targets in passing argument 1 of 'eth_transmit' differ in signedness
main.c: In function 'udpchksum':
main.c:729: warning: dereferencing type-punned pointer will break strict-aliasing rules
main.c: In function 'await_reply':
main.c:893: warning: pointer targets in passing argument 1 of 'grub_memcmp' differ in signedness
main.c:895: warning: pointer targets in passing argument 1 of 'grub_memcmp' differ in signedness
main.c:925: warning: pointer targets in passing argument 1 of 'decode_rfc1533' differ in signedness
main.c: In function 'decode_rfc1533':
main.c:973: warning: pointer targets in passing argument 1 of 'grub_memcmp' differ in signedness
main.c:973: warning: pointer targets in passing argument 2 of 'grub_memcmp' differ in signedness
main.c:984: warning: pointer targets in passing argument 1 of 'grub_memcmp' differ in signedness
main.c:984: warning: pointer targets in passing argument 2 of 'grub_memcmp' differ in signedness
main.c:1057: warning: pointer targets in passing argument 1 of 'grub_memcmp' differ in signedness
main.c:1057: warning: pointer targets in passing argument 2 of 'grub_memcmp' differ in signedness
make[2]: *** [libdrivers_a-main.o] Error 1
make[2]: Leaving directory `/home/karlmw/prj/c-x86/grub-0.97/netboot'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/karlmw/prj/c-x86/grub-0.97'
make: *** [all] Error 2

Sector 0 of standard Evo T20 WinNT firmware

            /
           |   /
           |  |   /
           |  |  |   /
           |  |  |  |   /
           |  |  |  |  |   /
           |  |  |  |  |  |   /
           |  |  |  |  |  |  |   /
           |  |  |  |  |  |  |  |    /
           |  |  |  |  |  |  |  |   |   /
           |  |  |  |  |  |  |  |   |  |   /
           |  |  |  |  |  |  |  |   |  |  |   /
           |  |  |  |  |  |  |  |   |  |  |  |   /
           |  |  |  |  |  |  |  |   |  |  |  |  |   /
           |  |  |  |  |  |  |  |   |  |  |  |  |  |   /
           |  |  |  |  |  |  |  |   |  |  |  |  |  |  |   /
00000000  fa 33 c0 8e d0 bc 00 7c  8b f4 50 07 50 1f fb fc  |.3.....|..P.P...|
00000010  bf 00 06 b9 00 01 f2 a5  ea 1d 06 00 00 be be 07  |................|
00000020  b3 04 80 3c 80 74 0e 80  3c 00 75 1c 83 c6 10 fe  |...<.t..<.u.....|
00000030  cb 75 ef cd 18 8b 14 8b  4c 02 8b ee 83 c6 10 fe  |.u......L.......|
00000040  cb 74 1a 80 3c 00 74 f4  be 8b 06 ac 3c 00 74 0b  |.t..<.t.....<.t.|
00000050  56 bb 07 00 b4 0e cd 10  5e eb f0 eb fe bf 05 00  |V.......^.......|
00000060  bb 00 7c b8 01 02 57 cd  13 5f 73 0c 33 c0 cd 13  |..|...W.._s.3...|
00000070  4f 75 ed be a3 06 eb d3  be c2 06 bf fe 7d 81 3d  |Ou...........}.=|
00000080  55 aa 75 c7 8b f5 ea 00  7c 00 00 49 6e 76 61 6c  |U.u.....|..Inval|
00000090  69 64 20 70 61 72 74 69  74 69 6f 6e 20 74 61 62  |id partition tab|
000000a0  6c 65 00 45 72 72 6f 72  20 6c 6f 61 64 69 6e 67  |le.Error loading|
000000b0  20 6f 70 65 72 61 74 69  6e 67 20 73 79 73 74 65  | operating syste|
000000c0  6d 00 4d 69 73 73 69 6e  67 20 6f 70 65 72 61 74  |m.Missing operat|
000000d0  69 6e 67 20 73 79 73 74  65 6d 00 00 00 00 00 00  |ing system......|
000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000150  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000180  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

                                      CE 94 C0 96 = NT Drive Serial Number
                                     /  /  /  /         80=bootable
                                    |  |  |  |         /  00=head of starting sector
                                    |  |  |  |       |  /
000001b0  00 00 00 00 00 00 00 00  ce 94 c0 96 00 00 80 00  |................|

             02 = cyl of starting sector
            /   00 = sector of starting sector
           |   /   07 = partition type=NTFS
           |  |   /   d3 38 0f = last sector (packed CHS)    d3=Head  38=S  f=Cyl
           |  |  |   /  /  /   01 00 00 00 = relative sectors = 0x00000001 = starting position within drive?
           |  |  |  |  |  |   /  /   /  /   ff e5 02 00 = total sectors = 0x0002e5ff = 189951 ==> 189951*512 = 92.75MB
           |  |  |  |  |  |  |  |   |  |   /  /  /  /            
           |  |  |  |  |  |  |  |   |  |  |  |  |  |   _____0x1CE..0x1DD = second partition entry = all zeroes             
           |  |  |  |  |  |  |  |   |  |  |  |  |  |  /               
000001c0  02 00 07 d3 38 0f 01 00  00 00 ff e5 02 00 00 00  |....8...........|

                                                       _____0x1DE..0x1ED = third partition entry = all zeroes
                                                      / 
000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

                                                       _____0x1EE..0x1FD = third partition entry = all zeroes
                                                      / 
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

                                                        55 aa = 0xAA55 = signature of valid partition table
                                                       /  / 
                                                      |  |                    
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

Sector 1

            /   
           |   /   
           |  |   /   
           |  |  |   /                 
           |  |  |  |   /                 
           |  |  |  |  |   /                 
           |  |  |  |  |  |   /                 
           |  |  |  |  |  |  |   /                 
           |  |  |  |  |  |  |  |    /                 
           |  |  |  |  |  |  |  |   |   /                 
           |  |  |  |  |  |  |  |   |  |   /   00 02 = 0x0200 = 512 bytes per sector                 
           |  |  |  |  |  |  |  |   |  |  |  |   /   01 = 1 sector per cluster                 
           |  |  |  |  |  |  |  |   |  |  |  |  |   /   00 00 = reserved (always 0)
           |  |  |  |  |  |  |  |   |  |  |  |  |  |   /  /
           |  |  |  |  |  |  |  |   |  |  |  |  |  |  |  |
00000200  eb 5b 90 4e 54 46 53 20  20 20 20 00 02 01 00 00  |.[.NTFS    .....|

             00 00 00 00 00 = always zeroes for NTFS
            /  /  /  /  /   f8 = fixed disk media ID
           |  |  |  |  |   /   00 00 = always zeroes for NTFS
           |  |  |  |  |  |   /  /    38 00 = 0x0038 = sectors per track = 56 sectors
           |  |  |  |  |  |  |  |    /  /   d4 00 = 0x00d4 = number of heads = 212 heads
           |  |  |  |  |  |  |  |   |  |   /  /   01 00 00 00 = 0x00000001 = number of hidden sectors
           |  |  |  |  |  |  |  |   |  |  |  |   /  /  /  /
00000210  00 00 00 00 00 f8 00 00  38 00 d4 00 01 00 00 00  |........8.......|

             00 00 00 00 = not used by NTFS
            /  /  /  /   80 = drive number
           |  |  |  |   /   00 80 00 = not important              
           |  |  |  |  |   /  /  /    ff e5 02 00 00 00 00 00 = 0x000000000002e5ff = total number of sectors in volume = 189951
           |  |  |  |  |  |  |  |    /  /  /  /  /  /  /  /                 
00000220  00 00 00 00 80 00 80 00  ff e5 02 00 00 00 00 00  |................|
00000230  20 00 00 00 00 00 00 00  ff 72 01 00 00 00 00 00  | ........r......|
00000240  02 00 00 00 08 00 00 00  9a fd 6d 80 11 6e 80 10  |..........m..n..|
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 fa 33 c0  |..............3.|
00000260  8e d0 bc 00 7c fb b8 c0  07 8e d8 c7 06 54 00 00  |....|........T..|
00000270  00 c7 06 56 00 00 00 c7  06 5b 00 10 00 b8 00 0d  |...V.....[......|
00000280  8e c0 2b db e8 07 00 68  00 0d 68 66 02 cb 50 53  |..+....h..hf..PS|
00000290  51 52 06 66 a1 54 00 66  03 06 1c 00 66 33 d2 66  |QR.f.T.f....f3.f|
000002a0  0f b7 0e 18 00 66 f7 f1  fe c2 88 16 5a 00 66 8b  |.....f......Z.f.|
000002b0  d0 66 c1 ea 10 f7 36 1a  00 88 16 25 00 a3 58 00  |.f....6....%..X.|
000002c0  a1 18 00 2a 06 5a 00 40  3b 06 5b 00 76 03 a1 5b  |...*.Z.@;.[.v..[|
000002d0  00 50 b4 02 8b 16 58 00  b1 06 d2 e6 0a 36 5a 00  |.P....X......6Z.|
000002e0  8b ca 86 e9 8a 36 25 00  b2 80 cd 13 58 72 2a 01  |.....6%.....Xr*.|
000002f0  06 54 00 83 16 56 00 00  29 06 5b 00 76 0b c1 e0  |.T...V..).[.v...|
00000300  05 8c c2 03 d0 8e c2 eb  8a 07 5a 59 5b 58 c3 be  |..........ZY[X..|
00000310  59 01 eb 08 be e3 01 eb  03 be 39 01 e8 09 00 be  |Y.........9.....|
00000320  ad 01 e8 03 00 fb eb fe  ac 3c 00 74 09 b4 0e bb  |.........<.t....|
00000330  07 00 cd 10 eb f2 c3 1d  00 41 20 64 69 73 6b 20  |.........A disk |
00000340  72 65 61 64 20 65 72 72  6f 72 20 6f 63 63 75 72  |read error occur|
00000350  72 65 64 2e 0d 0a 00 29  00 41 20 6b 65 72 6e 65  |red....).A kerne|
00000360  6c 20 66 69 6c 65 20 69  73 20 6d 69 73 73 69 6e  |l file is missin|
00000370  67 20 66 72 6f 6d 20 74  68 65 20 64 69 73 6b 2e  |g from the disk.|
00000380  0d 0a 00 25 00 41 20 6b  65 72 6e 65 6c 20 66 69  |...%.A kernel fi|
00000390  6c 65 20 69 73 20 74 6f  6f 20 64 69 73 63 6f 6e  |le is too discon|
000003a0  74 69 67 75 6f 75 73 2e  0d 0a 00 33 00 49 6e 73  |tiguous....3.Ins|
000003b0  65 72 74 20 61 20 73 79  73 74 65 6d 20 64 69 73  |ert a system dis|
000003c0  6b 65 74 74 65 20 61 6e  64 20 72 65 73 74 61 72  |kette and restar|
000003d0  74 0d 0a 74 68 65 20 73  79 73 74 65 6d 2e 0d 0a  |t..the system...|
000003e0  00 17 00 5c 4e 54 4c 44  52 20 69 73 20 63 6f 6d  |...\NTLDR is com|
000003f0  70 72 65 73 73 65 64 2e  0d 0a 00 00 00 00 55 aa  |pressed.......U.|
  • note that WinXP uses a slightly different bootsector.
  • WinCE is different again - I can't even figure out if there is a bootsector at all!

6/9/06

  • used wireshark to get MAC address
  • setup /etc/dhcp3/dhcpd.conf
  • added eth1 to /etc/network/interfaces
  • change/disable firewall for eth1
  • run ltspadmin, 1st option, accept defaults and install all options

Setting up ltsp-server (0.93debian1) ...

NOTE: you will probably want to add to /etc/exports:

/opt/ltsp *(ro,no_root_squash,async)

and then run:

# invoke-rc.d nfs-kernel-server reload
Setting up ltsp-server-standalone (0.93debian1) ...
Stopping DHCP server: dhcpd3.
Starting DHCP server: dhcpd3 failed to start - check syslog for diagnostics.
invoke-rc.d: initscript dhcp3-server, action "force-reload" failed.

Notes to self, about patch creation

Dir structure, and method:

 $ tree -d -L 1
 .
 |-- grub-0.97
 `-- grub-0.97-DEvoSL

 $ diff grub-0.97 grub-0.97-DEvoSL -ruN >devosl-grub.patch
  • grub-0.97 contains unpatched original sourcecode
  • grub-0.97-DEvoSL contains sourcecode which I have patched

T20 pcb pics

Note: the board is rectangular - these pictures are non-rectangular because I took them at an angle to avoid flash reflections.

Front

Compaq Evo T20 pcb front

  • the big silver socket at bottom left normally has a 32MB SmartMedia card in it.
  • the square socketed Winbond chip at bottom left is labelled: "(C) Wyse Tech" "02'V9.0" "251805-10"

Back

Compaq Evo T20 pcb back

  • the four Hynix ram chips at the top middle are HY57V561620BT-H (32MB each)
  • the big NatSemi Geode chip on a diagonal near the middle is a CS5530A-UCE
  • the two Toshiba flash chips in the bottom right are TC58256AFT (32MB each)
  • the square chip just above the flash is labelled: "Wyse Tech" "251815-01"