Linux on IBM
Netvista 8363
1.- The Netvista 8363 presentation
The Netvista 8363 also refered as N2200 is a thin client made and
sold by IBM between 1999 and
2001. It was designed to operate as a Windows Terminal with Windows CE
3.1 or a Linux based Terminal X. It was declined in 3 versions:
the EXX, TXX and WXX series. The EXX and WXX have an Ethernet
10/100 network interface while the TXX series have a Token Ring
interface. The difference between the EXX and WXX series is that the
WXX is shipped with a 16MB compact flash
card with MS Windows CE 3.1 installed.
The interesting points of the Netvista 2200 are that theese thin
clients are nearly a standard PC architecture (at the BIOS near), that
they are small ( l x L x H = 3.6 cm x 28 cm x 20 cm ). They are low
power consummer (max 3A under 12V ) and total silents.
Theese PC are now discontinuated but you can buy it for about 20€.
Hardware inspection
The Netvista 8363 have 32 MB soldered RAM and
a socket for 100Mhz clocked SDRAM (also refered as PC100) that accept a
module of up to 256MB so that you can have a system with 288 MB RAM.
Now, we will take a look at the processor, reading /proc/cpuinfo :
processor : 0
vendor_id : CyrixInstead
cpu family : 5
model : 7
model name : Cyrix MediaGXtm MMXtm Enhanced
stepping : 4
cpu MHz : 233.867
cache size : 16 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu tsc msr cx8 cmov mmx cxmmx
bogomips : 466.94
Here, we can see that the processor is an i586 (cpu_family: 5) from
Cyrix clocked at 233 Mhz. Unfortunatly it haves only 16 KB cache. It
honors a Floating Point Unit (even if the Cyrix FPU was not very
reputed) and the MMX instructions set.
Then we will look at the installed PCI devices (all the PCI hardware
are soldered on the main board thus not removable/interchangeable )
reading
in /proc/pci :
PCI devices found:
Bus 0, device 0, function 0:
Host bridge: Cyrix Corporation PCI Master (rev 0).
Bus 0, device 14, function 0:
Ethernet controller: Silicon Integrated Systems [SiS] SiS900 10/100 Ethernet (rev 2).
IRQ 10.
Master Capable. Latency=64. Min Gnt=52.Max Lat=11.
I/O at 0xc000 [0xc0ff].
Non-prefetchable 32 bit memory at 0x44801000 [0x44801fff].
Bus 0, device 18, function 0:
ISA bridge: Cyrix Corporation 5530 Legacy [Kahlua] (rev 0).
Bus 0, device 18, function 1:
Bridge: Cyrix Corporation 5530 SMI [Kahlua] (rev 0).
Non-prefetchable 32 bit memory at 0x40012000 [0x400120ff].
Bus 0, device 18, function 2:
IDE interface: Cyrix Corporation 5530 IDE [Kahlua] (rev 0).
I/O at 0xfc00 [0xfc0f].
Bus 0, device 18, function 3:
Multimedia audio controller: Cyrix Corporation 5530 Audio [Kahlua] (rev 0).
Non-prefetchable 32 bit memory at 0x40011000 [0x4001107f].
Bus 0, device 18, function 4:
VGA compatible controller: Cyrix Corporation 5530 Video [Kahlua] (rev 0).
Non-prefetchable 32 bit memory at 0x40800000 [0x40ffffff].
Bus 0, device 19, function 0:
USB Controller: Compaq Computer Corporation ZFMicro Chipset USB (rev 6).
IRQ 11.
Master Capable. Latency=64. Max Lat=80.
Non-prefetchable 32 bit memory at 0x44800000 [0x44800fff].
We can notice that the Netvista embbed one IDE controler, one SiS
900 10/100 Ethernet Controler, One Compaq USB host controler, one Cyrix
integrated Video Adaptater and one Cyrix integrated SoundCard.
- The IDE controler is handled without problem by the default linux
IDE driver. It permit to use a Compact Flash card as first IDE drive
(/dev/hda device under linux) ( see the section about compatibles
Compact Flash Cards)
- The SiS
900 network chipset is full supported by the sis900 linux driver. It
permit the Netvista to be connected to an Ethernet 10 or 100 Mbit
network.
- The USB host controler is full supported by the linux usb-ohci
driver. You can plug any USB devices such as keyboard, mouse,
usb-storage devices, usb-serial converter... that comply to the USB 1.0
standard. Note that the Netvista as only 2 USB ports so that you need
an USB hub if you plan to use more than 2 USB devices.
- The Video Adapter will be handled by the VESA driver
(unfortunatly this
chipset don't support text modes). The screen resolution must be
choosen at boot time ( TOCHECK we can't hotswitch the screen resolution
due to a linux VESA driver limitation ?). It embbeds 3MB of video
memmory so that you can set up a resolution of 1024x768 in 16bit per
pixel (64K colors) or 1280x1024 in paletised 256 colors. Unfortunately
it doesn't support 24bpp colors. Another limitation is that
this controler doesn't support VGA text mode.
- The integrated sound chip is supported by the xxx OSS driver for
the 2.4
kernel
TODO ALSA 2.6. It provide one stereo 16 bits 44.1Khz audio line out and
a microphone audio input with 3.5mm jacks connectors.
Note:
The Netvista have no Clock (RTC). That is no problem when you use it as
a terminal but will be a problem when you use it as a standard PC. 2
possibilities are: asking the user during the initilisation for the
current date / time or better (if the Netvista is connected to a
network) using an automatic clock synchronisation service like NTP.
2. - The Netvista 8363 Firmwares
Even if the Netvista 8363 is near to be a standard PC, it doesn't come
with a true standard PC BIOS. It comes with a firmware developped by
IBM specifically designed for terminals. The differences are for
exemple that you can't set the date/time but instead of that you
can select the keyboard layout and the screen resolution...
Before
we go further we must say that there are different version of
the firmware. -TODO retrieve version history but links seems to be too
old and broken - I was able to boot linux after having upgraded to the
latest firmware ( NS boot version: BL072902 released by IBM in July
2002 ).
Updating the Firmware
In order to update the firmware, you can download the latest firmware
from IBM:
bflash.2200, (this is a
local link as the IBM link look broken since IBM has sold its Personal
Computer branch to Lenovo) Then 2 possibilities are available: flashing
via network with the TFTP protocol or flashing from the Compact Flash
Card.
- To update via the network configure a server with a TFTP service
(atftp works good) with the command #apt-get
install atftpd under Debian then copy the bflash.2200 file inthe
tftp root directory (use to be /srv/tftpboot by default). Then in the
Netvista "BIOS", .... TODO (I haven't the old BIOS any more)
- To update from the Compact Flash Card, copy the bflash.2200 file
to the root of your Compact Flash first partition (must be primary and
FAT (12?) or EXT2 ) . then in the Netvista "BIOS", ... TODO ( I
haven't the old BIOS any more)
In the following, we will talk about the Netvista with the latest
firmware.
Also, this firmware permit us to boot linux from the compact flash or
via the network. Unfortunately both methods have drawbacks but they
work:
Booting the kernel from the Compact Flash
Booting a kernel from the Compact Flash card will be easy but not very
fast. The bios won't start any bootloader as Lilo or Grub but will
instead act as a bootloader: The firmware will look in the first
primary partition ( this partition must be of type EXT2 or FAT
(12?) ) for the file
/kernel.2x000.
than will copy this file in memmory and execute it. Unfortunately the
kernel image format can't be bzip2 compressed ( the standard ) but must
be an uncompressed kernel image. That is the reason we will use
make vmlinux instead of
make bzImage when we will compile
the kernel in the next section. As a result we can't select a kernel
image a boot time (as the file is staticly determinated in firmware )
and the loading can last a bit depending on the reading speed of your
Compact Flash Card. ( with the livered 16 MB sandisk, the kernel
loading process last 8 seconds for a 2.9 MB kernel image)
Booting the kernel via the Network
The lastest firmware dosen't have any PXE implementation ( so Linux
will not be
bootable via a PXE scheme with pxelinux or pxegrub ) but the
IBM firmware support DHCP to configure the IP address --- TODO : is the
kernel image location only static or can be configurated via DHCP
? - at boot
time as well
as TFTP qnd NFS (version 2 ?) in order to download the kernel image
from
the server and boot it.
Plus and cons
+ That heisst dass we don't need a bootloader like
lilo or grub
- That we cn't use a bootloader lioke lilo or grub (
shade )
The new firmware won't look for a boot sector as standard PC BIOSes but
look for a kernel.2x00 file in the first partition of the conpact
flash. Supported partitions/filesystems seems to be linux second
extends Filesystem (ext2) or windows fat 16 / fat 32.
Conclusion about the firmware
The boot process last a bit and its interface has limitations (static
images locations) but will do its job as well as IDE as network
bootloader. To spare time it would be nice to hack then install
linuxbios,
openbios or
u-boot as replacement for
the IBM firmware. But without VGA text mode and an onboard soldered
firmware chip, the hacking task would be hard to achieve.
3.- Installing Linux
The first thing we must ask us about is : Why would we install linux
on a such machine ? Your reason may be one of theese:
- In order to use the Netvista 8363 as a low cost, small and low
power consumption server that can serve HTTP service with Perl and/or
PHP.
- To use it as a terminal (X terminal, rdekstop, vnc, textual
terminal with ssh...)
- To use it as a modest desktop machine to browse internet, ear
music... up to play old or simple games ( quake 1, works great for
exemple)
We will describe 4 linux installations for the N2200:
- Linux / uClibc based desktop operating system
- Linux / uClibc based server operating system
- Linux as a diskless operating system for desktop (TODO)
- Linux based X terminal with LTSP (TODO)
The Netvista as a normal PC under Linux:
You need a compatible Compact Flash Card (the size depend on what
you want to install but 512 MB will be enought in most cases).
Kernel Compilation
- kernel 2.4 branch
- gcc 3.3
Get the 2.4.32 kernel at kernel.org and extract it
$ wget http://kernel.org/pub/linux/kernel/v2.4/linux-2.4.32.tar.bz2
$ tar jxvf linux-2.4.32.tar.bz2
$ cd linux-2.4.32
Get the fixed address cmdline patch by IBM :
cmdline.patch
and apply it to the kernel:
$ wget netvista-cmdline.patch
$ patch -p1 < netvista-cmdline.patch
Configure the kernel:
$ make menuconfig
As the Netvista has a static devices/peripherals set ( exception made
of the USB peripherals) we propose here to build a static kernel with
the only
needed drivers.
1.- In the main section "Code maturity level options" check "Prompt for
development and/or incomplete code/drivers"
2.- In the main section "Loadable module support" we will simply
uncheck
"Enable loadable module support".
3.- In the main section "Processor type and features" we will select
"586/K5/5x86/6x86/6x86MX" as processor family enqble the "MTRR support"
and disable all the rest:
4.- In main section "General setup", select "Networking support", "PCI
support", "PCI device name database", "Support for hot-pluggable
devices", "System V IPC", "Sysctl support", "ELF" as "Kernel core
(/proc/kcore) format", "Kernel support for a.out binaries", "Kernel
support for ELF binaries", "Kernel support for MISC binaries" and
"Power Management support".
5.- In main section "Memory Technology Devices (MTD)" simply disable
"Memory Technology Device (MTD) support"
6.- In main section "Parallel port support" disable "Parallel port
support"
7.- in main section "Plug and Play configuration" select "Plug and Play
support"
8.- in main section "Block devices" disable everything
9.- in main section "Multi-device support (RAID and LVM)" disable
everything
10.- in main section "Networking options", select "Packet socket",
"Unix domain sockets", "TCP/IP networking" and disable everything else.
11.- in main section "Telephony Support", disable everything
12.- in main section "ATA/IDE/MFM/RLL support", enable "ATA/IDE/MFM/RLL
support".
Then in subsection "IDE, ATA and ATAPI Block devices", enable "
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support", "Include
IDE/ATA-2 DISK support", "Generic PCI IDE Chipset Support", "Sharing
PCI IDE interrupts support", "Generic PCI bus-master DMA support" and
"Use PCI DMA by default when available".
13.- in main section "SCSI support", enable "SCSI support" (
CHECK needed for USB sticks ? )
14.- in main section "Fusion MPT device support", disable everything
15.- in main section "I2O device support", disable everything
16.- in main section "Network device support", enable "Network device
support" then in the "Ethernet (10 or 100Mbit)" subsection, enable "SiS
900/7016 PCI Fast Ethernet Adapter support"
17.- in main section "Amateur Radio support", disable everything
18.- in main section "IrDA (infrared) support", disable everything
19.- in main section "ISDN subsystem", disable everything
20.- in main section "Old CD-ROM drivers (not SCSI, not IDE)", disable
everything
... TODO
21.- in main section "Input core support"
22.- in main section "Character devices"
23.- in main section "Multimedia devices"
24.- in main section "File systems"
25.- in main section "Console drivers"
26.- in main section "Sound"
27.- in main section "USB support"
28.- in main section "Bluetooth support"
29.- in main section "Kernel hacking"
30.- in main section "Cryptographic options"
31.- in main section "Library routines"
Your kernel is now configured.
You can also download this kernel configuration file or use the
automated script to build your kernel.
Compile the kernel:
$ make dep
$ make vmlinux
cp vmlinux kernel.2x00
There is also a script that automatise this process:
uClibc environement
The Netvista as a Diskless PC under Linux:
The Netvista as a Linux based X Terminal with LTSP:
1.- Kernel compilation
2.- LTSP Linux Terminal Server Project
4.- Resultats, usability
As linux based X terminal, there is no problem as the hardware was
designed for this kind of use. The only regret is that the screen bit
depth is limited 16
bits. The CPU is nearly not used
Console tools OK
HTTP server with lighthttp and PHP5 Ok but
Graphical use
IceWM ok
Dillo ok
Firefox ?
Boot times:
5.- References
- IBM Netvista type 8363 support page - broken
- uClibc - http://uclibc.org
- uClibc++ - http://cxx.uclibc.org
- Scratchbox - http://www.scratchbox.org
- Linux Terminal Server Project - http://ltsp.org
- Author HomePage - http://jeanchristophe.duber.free.fr
Last edited the 9