123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- .HTML "The Various Ports
- .TL
- The Various Ports
- .PP
- This document collects comments about the various
- architectures supported by Plan 9.
- The system tries to hide most of the differences between machines,
- so the machines as seen by a Plan 9
- user look different from how they are perceived through commercial software.
- Also, because we are a small group, we couldn't do everything:
- exploit every optimization, support every model,
- drive every device.
- This document records what we
- .I have
- done.
- The first section discusses the compiler/assembler/loader suite for each machine.
- The second talks about
- the operating system implemented on each of the various
- machines.
- .SH
- The Motorola MC68020 compiler
- .PP
- This is the oldest compiler of the bunch. Relative to its
- competitors\(emcommercial compilers for the same machine\(emit generates
- quite good code.
- It assumes at least a 68020 architecture: some of the addressing
- modes it generates are not on the 68000 or 68010.
- .PP
- We also use this compiler for the 68040. Except for a few
- instructions and registers available only from assembly language,
- the only user-visible difference between these machines is in
- floating point. Our 68020s all have 68881 or 68882 floating
- point units attached, so to execute floating point programs we
- depend on there being appropriate hardware.
- Unfortunately, the 68040 is not quite so thorough in its implementation
- of the IEEE 754 standard or in its provision of built-in instructions
- for the
- transcendental functions. The latter was easy to get around: we
- don't use them on the 68020 either, but we do have a library,
- .CW -l68881 ,
- that you can use if you need the performance (which can be
- substantial:
- .CW astro
- runs twice as fast).
- We don't use this library by default because we want to run the same
- binaries on both machines and don't want to emulate
- .CW FCOSH
- in the operating system.
- .PP
- The problem with IEEE is nastier. We didn't really want to deal
- with gradual underflow and all that, especially since we had
- half a dozen machines we'd need to do it on, so on the 68040
- we implement non-trapping underflow as truncation to zero and
- do nothing about denormalized numbers and not-a-numbers.
- This means the 68020
- and the 68040 are not precisely compatible.
- .SH
- The Motorola MC68000 compiler
- .PP
- This compiler is a stripped-down version of the MC68020 compiler
- built for an abortive port to the Dragonball processor on the Palm Pilot.
- It generates position-independent code whose overall quality is much
- poorer than the code for the MC68020.
- .SH
- The MIPS compiler
- .PP
- This compiler generates code for the R2000, R3000, and R4000 machines configured
- to be big-endians. The compiler generates no R4000-specific instructions
- although the assembler and loader support the new user-mode instructions.
- There are options to generate code for little-endian machines.
- Considering its speed, the Plan 9 compiler generates good code,
- but the commercial
- MIPS compiler with all the stops pulled out consistently beats it
- by 20% or so, sometimes more. Since ours compiles about 10 times
- faster and we spend most of our time compiling anyway,
- we are content with the tradeoff.
- .PP
- The compiler is solid: we've used it for several big projects and, of course,
- all our applications run under it.
- The behavior of floating-point programs is much like on the 68040:
- the operating system emulates where necessary to get past non-trapping
- underflow and overflow, but does not handle gradual underflow or
- denormalized numbers or not-a-numbers.
- .SH
- The SPARC compiler
- .PP
- The SPARC compiler is also solid and fast, although we haven't
- used it for a few years, due to a lack of current hardware. We have seen it do
- much better than GCC with all the optimizations, but on average
- it is probably about the same.
- .PP
- We used to run some old SPARC machines with no multiply or divide instructions,
- so the compiler
- does not produce them by default.
- Instead it calls internal subroutines.
- A loader flag,
- .CW -M ,
- causes the instructions to be emitted. The operating system has
- trap code to emulate them if necessary, but the traps are slower than
- emulating them in user mode.
- In any modern lab, in which SPARCS have the instructions, it would be worth enabling the
- .CW -M
- flag by default.
- .PP
- The floating point story is the same as on the MIPS.
- .SH
- The Intel i386 compiler
- .PP
- This is really an
- .I x 86
- compiler, for
- .I x >2.
- It works only
- if the machine is in 32-bit protected mode.
- It is solid and generates tolerable code; it is our main compiler these days.
- .PP
- Floating point is well-behaved, but the compiler assumes i387-compatible
- hardware to execute
- the instructions. With 387 hardware,
- the system does the full IEEE 754 job, just like
- the MC68881. By default, the libraries don't use the 387 built-ins for
- transcendentals.
- If you want them,
- build the code in
- .CW /sys/src/libc/386/387 .
- .SH
- The Intel i960 compiler
- .PP
- This compiler was built as a weekend hack to let us get the Cyclone
- boards running. It has only been used to run one program\(emthe on-board
- code in the Cyclone\(emand is therefore likely to be buggy.
- There are a number of obvious optimizations to the code that have
- never been attempted.
- For example, the compiler does not support pipelining.
- The code runs in little-endian mode.
- .SH
- The DEC Alpha compiler
- .PP
- The Alpha compiler is based on a port done by David Hogan while
- studying at the Basser Department of Computer Science, University of Sydney.
- It has been used to build a running version of the operating system, but has
- not been stressed as much as some of the other compilers.
- .PP
- Although the Alpha is a 64-bit architecture, this compiler treats
- .CW int s,
- .CW long s
- and pointers as 32 bits. Access to the 64-bit operations is available through the
- .CW vlong
- type, as with the other architectures.
- .PP
- The compiler assumes that the target CPU supports the optional byte and
- word memory operations (the ``BWX'' extension).
- If you have an old system, you can generate code without using the extension
- by passing the loader the
- .CW -x
- option.
- .PP
- There are a number of optimizations that the Alpha Architecture Handbook
- recommends, but this compiler does not do. In particular, there is currently
- no support for the code alignment and code scheduling optimizations.
- .PP
- The compiler tries to conform to IEEE, but some Alpha CPUs do not implement
- all of the rounding and trapping modes in silicon. Fixing this problem requires
- some software emulation code in the kernel; to date, this has not been attempted.
- .SH
- The PowerPC compiler
- .PP
- The PowerPC compiler supports the 32-bit PowerPC architecture only;
- it does not support either the 64-bit extensions or the POWER compatibility instructions.
- It has been used for production operating system work on the 603, 603e, 604e, 821, 823, and 860,
- and experimental work on the 405, 440 and 450.
- On the 8xx floating-point instructions must be emulated.
- Instruction scheduling is not implemented; otherwise the code generated
- is similar to that for the other load-store architectures.
- The compiler makes little or no use of unusual PowerPC features such as the
- counter register, several condition code registers, and multiply-accumulate
- instructions, but they are sometimes
- used by assembly language routines in the libraries.
- .SH
- The ARM compiler
- .PP
- The ARM compiler is fairly solid; it has been used for some production
- operating system work including Inferno and the Plan 9 kernel
- for the iPAQ, which uses a StrongArm SA1, and the Sheevaplug.
- The compiler supports the ARMv4 architecture;
- it does not support the Thumb instruction sets.
- It has been used on ARM7500FE, ARM926 and Cortex-A8 processors
- and the Strongarm SA1 core machines.
- The compiler generates instructions for the ARM floating-point coprocessor.
- .SH
- The AMD 29000 compiler
- .PP
- This compiler was used to port an operating system to an AMD 29240 processor.
- The project is long abandoned, but the compiler lives on.
- .SH
- The Carrera operating system
- .PP
- We used to have a number of MIPS R4400 PC-like devices called Carreras,
- with custom-built frame buffers, that we used as terminals.
- They're almost all decommissioned now, but we're including the source as a reference
- in case someone wants to get another MIPS-based system running.
- .SH
- The IBM PC operating system
- .PP
- The PC version of Plan 9 can boot either from MS-DOS
- or directly from a disk created by the
- .CW format
- command; see
- .I prep (8).
- Plan 9 runs in 32-bit mode\(emwhich requires a 386 or later model x86 processor\(emand
- has an interrupt-driven I/O system, so it does not
- use the BIOS (except for a small portion of the boot program and floppy boot block).
- This helps performance but limits the set of I/O devices that it can support without
- special code.
- .PP
- Plan 9 supports the ISA, EISA, and PCI buses as well as PCMCIA and PC card devices.
- It is infeasible to list all the supported machines, because
- the PC-clone marketplace is too volatile and there is
- no guarantee that the machine you buy today will contain the
- same components as the one you bought yesterday.
- (For our lab, we buy components and assemble the machines
- ourselves in an attempt to lessen this effect.)
- Both IDE/ATA and SCSI disks are supported, and
- there is support for large ATA drives.
- CD-ROMs are supported two ways, either on the SCSI bus, or as ATA(PI) devices.
- The SCSI adapter must be a member of the Mylex Multimaster (old Buslogic BT-*) series
- or the Symbios 53C8XX series.
- Supported Ethernet cards include the
- AMD79C790,
- 3COM Etherlink III and 3C589 series,
- Lucent Wavelan and compatibles,
- NE2000,
- WD8003,
- WD8013,
- SMC Elite and Elite Ultra,
- Linksys Combo EthernetCard and EtherFast 10/100,
- and a variety of controllers based on the
- Intel i8255[789] and Digital (now Intel) 21114x chips.
- We mostly use Etherlink III, i8255[789], and 21114x, so those drivers may be more robust.
- There must be an explicit Plan 9 driver for peripherals;
- it cannot use DOS or Windows drivers.
- Also,
- Plan 9 cannot exploit special hardware-related features that fall outside of the
- IBM PC model,
- such as power management,
- unless architecture-dependent code is added to the kernel.
- For more details see
- .I plan9.ini (8).
- .PP
- Over the years,
- Plan 9 has run on a number of VGA cards.
- Recent changes to the graphics system have not been
- tested on most of the older cards; some effort may be needed to get them working again.
- In our lab, most of our machines use the ATI Mach64, S3 ViRGE, or S3 Savage chips,
- so such devices are probably
- the most reliable.
- We also use a few Matrox and TNT cards.
- The system requires a hardware cursor.
- For more details see
- .I vgadb (6)
- and
- .I vga (8).
- The wiki
- .CW http://plan9.bell-labs.com/wiki/plan9 ) (
- contains the definitive list of cards that are known to work; see the ``supported PC hardware''
- page.
- .PP
- For audio, Plan 9 supports the Sound Blaster 16 and compatibles.
- (Note that audio doesn't work under Plan 9 with 8-bit Sound Blasters.)
- There is also user-level support for USB audio devices; see
- .I usb (4).
- .PP
- Finally, it's important to have a three-button mouse with Plan 9.
- The system currently works only with mice on the PS/2 port or USB.
- Serial mouse support should return before long.
- .PP
- Once you have Plan 9 installed (see the wiki's installation document)
- run the program
- .CW ld
- from DOS
- or use a boot disk. See
- .I booting (8),
- .I 9load (8),
- and
- .I prep (8)
- for more information.
- .SH
- The Alpha PC operating system
- .PP
- Plan 9 runs on the Alpha PC 164.
- The Alpha port has not been used as much as the others,
- and should be considered a preliminary release.
- .PP
- The port uses the OSF/1 flavor
- of PALcode, and should be booted from the SRM firmware (booting
- from ARC is not supported).
- Supported devices are a subset of the PC ones; currently
- this includes DECchip 2114x-based ethernet cards, S3 VGA cards,
- Sound Blaster 16-compatible audio, floppy drives, and ATA hard disks.
- .PP
- The system has to be booted via tftp.
- See
- .I booting (8)
- for details.
- .SH
- The PowerPC operating system
- .PP
- We have a version of the system that runs on the PowerPC
- on a home-grown machine called Viaduct.
- The Viaduct minibrick is a small (12x9x3 cm) low-cost embedded
- computer consisting of a 50Mhz MPC850, 16MB sdram, 2MB flash,
- and two 10Mb Ethernet ports. It is designed for home/SOHO
- networking applications such as VPN, firewalls, NAT, etc.
- .PP
- The kernel has also been ported to the Motorola MTX embedded motherboard;
- that port is included in the distribution.
- The port only works with a 604e processor (the 603e is substantially different)
- and at present only a single CPU is permitted.
- .SH
- The Compaq iPAQ operating system
- .PP
- Plan 9 was ported to Compaq's iPAQ Pocket PC,
- which uses the StrongArm SA1 processor.
- The model we have is a 3630; neighboring models also work.
- The kernel can drive a PCMCIA sleeve with a WaveLAN card, but no other PCMCIA
- devices have been ported yet.
- .PP
- The iPAQ runs
- .CW rio
- with a small keyboard application that allows Palm-style handwriting
- input as well as typing with the stylus on a miniature keyboard.
- .PP
- Fco. J. Ballesteros
- .CW nemo@plan9.escet.urjc.es ) (
- added support for hibernation, but we haven't been able to
- get that to work again in the new kernel; the code is there, however,
- for volunteers to play with.
- See the file
- .CW /sys/src/9/bitsy/Booting101
- for information about installing Plan 9 on the iPAQ.
- .SH
- The Marvell Kirkwood operating system
- .PP
- This is an ARM kernel for the ARM926EJ-S processor
- and it emulates floating-point and
- CAS (compare-and-swap) instructions.
- It is known to run on the Sheevaplug and Openrd-client boards.
- It is derived from a port of native Inferno to the Sheevaplug
- by Salva Peir\f(Jpó\fP and Mechiel Lukkien.
- There are many features of the Kirkwood system-on-a-chip
- that it does not exploit.
- There are currently drivers for up to two
- Gigabit Ethernet interfaces,
- USB and the console serial port;
- we hope to add crypto acceleration, and a video driver for the Openrd-client.
- .SH
- The TI OMAP35 operating system
- .PP
- This is an ARM kernel for the Cortex-A8 processor
- and it emulates pre-VFPv3 floating-point and
- CAS (compare-and-swap) instructions.
- It is known to run on the IGEPv2 board and the Gumstix Overo,
- and might eventually run on the Beagleboard, once USB is working.
- There are many features of the OMAP system-on-a-chip that it does not exploit.
- Initially, there are drivers for the SMSC 9221 100Mb/s Ethernet
- interface in the IGEPv2 and Overo,
- and the console serial port;
- we hope to add USB, flash memory and video drivers.
- .
- .ig
- .SH
- The file server
- .PP
- The file server runs on only a handful of distinct machines.
- It is a stand-alone program, distantly related to the CPU server
- code, that runs no user code: all it does is serve files on
- network connections.
- It supports only SCSI disks, which can be interleaved for
- faster throughput.
- A DOS file on
- an IDE drive can hold the configuration information.
- See
- .I fsconfig (8)
- for an explanation of how
- to configure a file server.
- .PP
- To boot a file server, follow the directions for booting a CPU server
- using the file name
- .CW 9\f2machtype\fPfs
- where
- .I machtype
- is
- .CW pc ,
- etc. as appropriate.
- We are releasing only the PC version.
- .SH
- The IBM PC file server
- .PP
- Except for the restriction to SCSI disks,
- the PC file server has the same hardware requirements as
- the regular PC operating system.
- However, only a subset of the supported SCSI (Adaptec 1542, Mylex Multimaster,
- and Symbios 53C8XX) and Ethernet (Digital 2114x,
- Intel 8255x, and 3Com) controllers
- may be
- used.
- Any of the boot methods described in
- .I 9load (8)
- will work.
- .PP
- To boot any PC, the file
- .CW 9load
- must reside on a MS-DOS formatted floppy, IDE disk,
- or SCSI disk.
- However, PCs have no non-volatile RAM in which the
- file server can store its configuration information, so the system
- stores it in a file on an MS-DOS file system instead.
- This file, however, cannot live on a SCSI disk, only a floppy or IDE.
- (This restriction avoids a lot of duplicated interfaces in the
- system.)
- Thus the file server cannot be all-SCSI.
- See
- .I plan9.ini (8)
- for details about the
- .I nvr
- variable and specifying the console device.
- .SH
- Backup
- .PP
- Our main file server is unlikely to be much like yours.
- It is a PC with 128 megabytes
- of cache memory, 56 gigabytes of SCSI magnetic
- disk, and a Hewlett-Packard SureStore Optical 1200ex
- magneto-optical jukebox, with 1.2 terabytes of storage.
- This driver runs the SCSI standard jukebox protocol.
- We also have a driver for a (non-standard)
- SONY WDA-610
- Writable Disk Auto Changer (WORM),
- which stores almost 350 gigabytes of data.
- .PP
- The WORM is actually the prime storage; the SCSI disk is just
- a cache to improve performance.
- Early each morning the system constructs on WORM an image of
- the entire system as it appears that day. Our backup system
- is therefore just a file server that lets
- you look at yesterday's (or last year's) file system.
- .PP
- If you don't have a magneto-optical jukebox,
- you might consider attaching a CD-R jukebox or even just
- using a single WORM drive and managing the dumps a little less
- automatically. This is just a long way of saying that the
- system as distributed has no explicit method of backup other
- than through the WORM jukebox.
- .PP
- Not everyone can invest in such expensive hardware, however.
- Although it wouldn't be as luxurious,
- it would be possible to use
- .I mkfs (8)
- to build regular file system archives and use
- .I scuzz (8)
- to stream them to a SCSI 8mm tape drive.
- .CW Mkext
- could then extract them.
- Another alternative is to use
- .I dump9660
- (see
- .I mk9660 (8)),
- which stores incremental backups on CD images
- in the form of a dump hierarchy.
- .PP
- It is also possible to treat a regular disk, or even a part of a disk,
- as a fake WORM, which can then be streamed to tape when it fills.
- This is a bad idea for a production system but a good way to
- learn about the WORM software.
- Again, see
- .I fsconfig (8)
- for details.
- ..
|