===== MILO ===== MILO, the Alpha Linux Miniloader, is a boot loader and minimal firmware for Alpha systems. It initializes the machine, loads Linux, and provides the PALcode that Linux runs on. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 1)] It is used on systems with the [[software:firmware:arc|ARC or AlphaBIOS]] firmware, whose PALcode is designed for Windows NT and cannot run Linux. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-January.mbox#L26796|"Re: Does DEC have a clue?"]], Jay Estabrook, axp-list, 21 Jan 1998)] Systems with the [[software:firmware:srm|SRM console]] boot Linux with [[software:boot_loaders:aboot|aboot]] instead, which is simpler. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-November.mbox#L54844|"Re: Jakma,Paul and warp"]], Rich Payne, axp-list, 30 Nov 1999)] MILO is therefore needed only on systems without an SRM console. The Alpha XL, the Alpha XLT, and the [[hardware:motherboards:pc164ux|AlphaPC 164UX]] (Ruffian) can boot Linux only with MILO, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2004-September.mbox#L5923|"Alpha Core ISO Images"]], Jay Estabrook, axp-list, 29 Sep 2004)] as can the [[hardware:motherboards:pc164rx|AlphaPC 164RX]], for which no SRM console was released. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-August.mbox#L9150|"Re: switching from ARC back to SRM"]], Jay Estabrook, axp-list, 16 Aug 2000)] Current kernels require an EV56 (21164A) or later processor, which rules out the Alpha XL 233, 266, and 300; the XL 366 and 433 have 21164A processors. [(>{{wiki:hardware:systems:alpha_xl:alpha_xl_systems_and_options_catalog.pdf?linkonly|Alpha XL Personal Workstation for Windows NT, Digital Systems and Options Catalog}}, September 1996, p. 1)] MILO does not support multiprocessor systems or 21264 systems. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-July.mbox#L37024|"Re: SMP for AlphaServer?"]], Jay Estabrook, axp-list, 14 Jul 1998)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-November.mbox#L43450|"Re: XP1000 & MILO & SCSI"]], Rich Payne, axp-list, 24 Nov 2000)] MILO's last release, 2.2-18, dates from July 2001 and is based on Linux 2.2. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/2001-July.mbox#L89|"[Milo-list] Milo 2.2-18 released."]], Stefan Reinauer, milo-list, 23 Jul 2001)] It cannot boot kernels from Linux 2.6.23 on, which have a ''PT_NOTE'' program header. The source repository, [[https://github.com/alphalinux/milo]], fixed this in 2026, so a current kernel needs a MILO built from it. [(>[[https://github.com/alphalinux/milo/commit/dd79b34|"fix(boot): skip non-PT_LOAD segments when loading kernel image"]], alphalinux/milo)] No current kernel has been reported booting through MILO, with a repository build or otherwise. MILO reads the kernel from ext2 (or ext3, read as ext2), and from FAT, ISO 9660, or ReiserFS if built with them, but not from ext4 or XFS; see [[#known_issues|Known issues]]. An initrd must fit below MILO in the first 13 MiB of memory, and cannot be used at all with a kernel built without ''CONFIG_ALPHA_LEGACY_START_ADDRESS''; see [[#initrd|initrd]]. The simplest kernel for MILO therefore has the drivers for its root file system built in and no initrd. ==== System support ==== The MILO image for each system is: [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-March.mbox#L30004|"Re: AlphaServer 800"]], Jay Estabrook, axp-list, 25 Mar 1998)] ^ System ^ Code name ^ MILO image ^ | AlphaStation 600, AlphaStation 500, Alpha XL 300/366/433 | Alcor, XLT | ''xlt-alcor'' | | AlphaStation 200, 205, 250, 255, 300, 400 | Avanti | ''avanti'' | | Alpha XL 233/266 | XL | ''xl'' | | Digital Personal Workstation | Miata | ''miata'' | | AXPpci33, Multia | Noname, UDB | ''udb-noname'' | | [[hardware:motherboards:pc64|AlphaPC 64]] | Cabriolet | ''cabrio'' | | [[hardware:motherboards:pc164|AlphaPC 164]] | PC164 | ''pc164'' | | [[hardware:motherboards:pc164lx|AlphaPC 164LX]] | LX164 | ''lx164'' | | [[hardware:motherboards:pc164sx|AlphaPC 164SX]] | SX164 | ''sx164'' | | [[hardware:motherboards:eb164|EB164]] | EB164 | ''eb164'' | | [[hardware:motherboards:eb64plus|EB64+]] | EB64+ | ''eb64p'' | | [[hardware:motherboards:eb66plus|EB66+]] | EB66+ | ''eb66p'' | | [[hardware:motherboards:eb66|EB66]] | EB66 | ''eb66'' | | [[hardware:motherboards:pc164ux|AlphaPC 164UX]], 164BX | Ruffian | ''ruffian'' [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-November.mbox#L47939|"Re: 2.1.x on UX -- How?"]], Jay Estabrook, axp-list, 17 Nov 1998)] [(>[[https://github.com/alphalinux/milo/blob/main/config.in|config.in]], alphalinux/milo)] | The Noname, EB64+, EB66 and EB66+, Cabriolet, Alcor, AlphaStation 500, PC164, LX164, SX164, and Miata can boot Linux either with MILO or from SRM. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2004-September.mbox#L5923|"Alpha Core ISO Images"]], Jay Estabrook, axp-list, 29 Sep 2004)] Digital listed no MILO image for the Jensen, the AlphaServer 1000, 1000A, 1200, 2000, 2100, 4000, and 4100, or the AlphaBook 1, all of which have SRM. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-March.mbox#L30004|"Re: AlphaServer 800"]], Jay Estabrook, axp-list, 25 Mar 1998)] * **Ruffian:** the Deskstation [[hardware:motherboards:pc164ux|AlphaPC 164UX]] and BX use ARCSBIOS, which loads MILO with ''ldmilo.exe'' instead of ''linload.exe''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-May.mbox#L28263|"Re: Installation problems on a APC 164UX/BX"]], Rich Payne, axp-list, 13 May 1999)] ''ldmilo'' was written by Deskstation, and requires the MILO file to be named ''milo''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-January.mbox#L43156|"Re: DeskStation/Ruffian booting methods"]], Jay Estabrook, axp-list, 18 Jan 1999)] Digital's images for it were ''ldmilo-ruffian-981020'' and ''milo-ruffian-981020''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-November.mbox#L47939|"Re: 2.1.x on UX -- How?"]], Jay Estabrook, axp-list, 17 Nov 1998)] * **Other systems:** MILO 2.2 can also be built for the AlphaBook 1, Mikasa, Takara, and Platform 2000. [(>[[https://github.com/alphalinux/milo/blob/main/config.in|config.in]], MILO 2.2)] * **Multiprocessor systems:** MILO does not support multiple CPUs. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-July.mbox#L37024|"Re: SMP for AlphaServer?"]], Jay Estabrook, axp-list, 14 Jul 1998)] Many servers also lacked MILO PALcode for their EISA buses, full ECC, multiple CPUs, or multiple PCI buses. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-October.mbox#L45053|"Re: Install problems"]], Jay Estabrook, axp-list, 29 Oct 1998)] * **EV6 systems:** there is no usable MILO for 21264 systems. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-November.mbox#L43450|"Re: XP1000 & MILO & SCSI"]], Rich Payne, axp-list, 24 Nov 2000)] The [[hardware:motherboards:up1000|UP1000]] uses APB instead. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2001-August.mbox#L763|"Re: New bootdisks / first install report / help needed"]], Rich Payne, debian-alpha, 4 Aug 2001)] ==== Obtaining and installing MILO ==== MILO must be built from the repository for the system's platform (see [[#building|Building]]), since no released binary can boot a current kernel. The loader that ARC or AlphaBIOS runs to start MILO, ''linload.exe'', was only ever distributed as a binary, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-September.mbox#L466|"ARC/Linload/MILO/Linux - a maze of twisty little packages"]], David Rusling, axp-list, 2 Sep 1996)] and the Ruffian's ''ldmilo.exe'' came from Deskstation. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-January.mbox#L43156|"Re: DeskStation/Ruffian booting methods"]], Jay Estabrook, axp-list, 18 Jan 1999)] A disk that boots Linux through MILO is set up as follows: - Give the disk a PC (MBR) partition table, not a BSD disklabel, since ARC and AlphaBIOS cannot read BSD disklabels. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-July.mbox#L59698|"Re: Questions."]], Jay Estabrook, axp-list, 23 Jul 1998)] - Create a small FAT partition at the start of the disk, and copy ''linload.exe'' (or ''ldmilo.exe'') and the MILO image to it. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-May.mbox#L60487|"Re: Floppyless boot on SX164"]], Rich Payne, axp-list, 28 May 1999)] A floppy works as well; the files are copied to it, not written with ''rawrite''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-October.mbox#L68745|"Re: AS 200 machines from onsale"]], Rich Payne, axp-list, 7 Oct 1998)] - Put the kernel on an ext2 ''/boot'' file system; see [[#known_issues|Known issues]] for the file system limits. - Add a boot selection in ARC or AlphaBIOS that loads ''linload.exe'', with ''OSLOADFILENAME'' naming the MILO image and ''OSLOADOPTIONS'' holding the MILO command to run, such as ''boot sda2:''. See [[software:firmware:arc#booting_milo|ARC]] and [[software:firmware:arc#booting_milo1|AlphaBIOS]] for the settings. - Describe the kernels in ''/etc/milo.conf'' on the ''/boot'' file system; see [[#configuration|Configuration]]. ==== Building ==== The [[https://github.com/alphalinux/milo|alphalinux/milo]] repository contains releases 2.2-9 to 2.2-18 as imported commits, followed by work from 2026. That work vendors the Linux 2.2.26 sources, so that no external kernel tree is needed, and fixes building with a current cross-compiler. [(>[[https://github.com/alphalinux/milo/commit/e5a4a2a|"vendor Linux 2.2.26 sources and fix MIATA cross-compilation"]], alphalinux/milo)] ''make config'' selects the platform, and ''make'' then builds MILO with the cross-compiler named by ''CROSS_COMPILE'', by default ''alpha-unknown-linux-gnu-''. [(>[[https://github.com/alphalinux/milo/blob/main/Makefile|Makefile]], alphalinux/milo)] ''make config'' first asks for the path to the kernel sources, which is no longer used, then for the system type, and then for options such as serial console echo, its port and speed, and the file systems to include (ext2 by default; FAT, ReiserFS, and ISO 9660 are off). [(>[[https://github.com/alphalinux/milo/blob/main/config.in|config.in]], alphalinux/milo)] [(>[[https://github.com/alphalinux/milo/blob/main/Makefile|Makefile]], alphalinux/milo)] ''make oldconfig'' reuses an existing ''.config''. A build for the Ruffian, for example: [(>[[https://github.com/alphalinux/milo/blob/main/Makefile|Makefile]], alphalinux/milo)] git clone https://github.com/alphalinux/milo.git cd milo make config # choose "Ruffian" as the Alpha system type make CROSS_COMPILE=alpha-linux-gnu- # or CROSS_COMPILE= on an Alpha Every platform produces ''milo'', the image loaded by ''linload.exe'' or ''ldmilo.exe''. Most also produce ''milo.dd'' for an SRM boot floppy, and some also produce ''milo.rom'' or the flash utility ''fmu.gz'', or both; the Ruffian build produces only ''milo'' and ''mboot''. [(>[[https://github.com/alphalinux/milo/blob/main/Makefile|Makefile]], alphalinux/milo)] The released MILO 2.2 was instead built against a separately configured generic Linux 2.2 kernel, at least 2.2.18, without modules or sysctl support. [(>[[https://github.com/alphalinux/milo/blob/main/Documentation/README.milo|README.milo]], MILO 2.2)] By 2007, that source could not be built with a current toolchain. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2007-November.mbox#L4736|"Re: miata linux kernel"]], Steve Langasek, debian-alpha, 19 Nov 2007)] ==== Loading MILO ==== MILO can be loaded from ARC, AlphaBIOS, the SRM console, an evaluation board Debug Monitor, a fail-safe boot block floppy, or flash. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 5)] The build produces ''milo'' for booting from ARC or AlphaBIOS, ''milo.dd'' for writing to a floppy and booting from SRM, and ''milo.rom'' for flashing. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-May.mbox#L19565|"Re: Building MILO (2.0.30)"]], Jay Estabrook, axp-list, 15 May 1997)] === From ARC or AlphaBIOS === ARC and AlphaBIOS run ''linload.exe'', which passes the memory size and boot selection from the firmware to MILO and switches to MILO's PALcode. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-April.mbox#L50716|"Re: MILO and PCI and BIOS ... gory details >LONG<"]], Jay Estabrook, axp-list, 30 Apr 1998)] ''linload.exe'' was built with the Windows NT ARC firmware tree and Microsoft tools, and its source was never released. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-September.mbox#L466|"ARC/Linload/MILO/Linux - a maze of twisty little packages"]], David Rusling, axp-list, 2 Sep 1996)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-January.mbox#L43156|"Re: DeskStation/Ruffian booting methods"]], Jay Estabrook, axp-list, 18 Jan 1999)] * The contents of ''OSLOADOPTIONS'' (the OS options in AlphaBIOS) are run by MILO as a command, e.g. ''boot sda2:vmlinux.gz root=/dev/sda2'', which allows the system to boot unattended. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-January.mbox#L18403|"Re: RedHat Install Help Please"]], Michal Jaegermann, axp-list, 16 Jan 1998)] Only one command can be given this way. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-November.mbox#L24237|"Re: Autoboot Linux/Alpha using milo-2029-pc164 ?"]], Jay Estabrook, axp-list, 20 Nov 1997)] * ''OSLOADFILENAME'' names the MILO image, so several MILO versions can be kept on the same partition. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-January.mbox#L19840|"Re: RedHat Install Help Please"]], Jay Estabrook, axp-list, 16 Jan 1998)] * The ''linload.exe'' version must match MILO, or MILO gets the memory size wrong. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-March.mbox#L23716|"Re: mem= option"]], Jay Estabrook, axp-list, 21 Mar 1997)] Version 1.3 or later is needed with more than 128 MiB of memory [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-April.mbox#L759|"Miniloader area on gatekeeper cleaned up, new images available"]], David A Rusling, axp-list, 2 Apr 1996)] and with AlphaBIOS: earlier versions load MILO at a fixed address, which crashes AlphaBIOS, while 1.3 searches the memory map for a free location. 1.3 also accepts a directory for ''OSLOADFILENAME'', for AlphaBIOS versions that only accept a directory. [(>linload 1.3 ''README'', Linux-Alpha archive, ftp.digital.com, 19 Dec 1996)] The Alpha XLT 366 needs the latest version. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-February.mbox#L6604|"Re: Booting XLT-366 with 256 meg?"]], Jay Estabrook, axp-list, 6 Feb 1997)] * MILO can also be started by copying it to a FAT floppy as ''fwupdate.exe'' and selecting "Install new firmware" in ARC, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-April.mbox#L6752|"RE: cabriolet and RedHAt 2.1 AXP"]], David A Rusling, axp-list, 15 Apr 1996)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-August.mbox#L7350|"Rescue Disks, the result..."]], Ryan Kirkpatrick, axp-list, 11 Aug 1997)] or by setting the fail-safe boot jumper, which makes the fail-safe booter run it. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-March.mbox#L65937|"Re: AlphaPC 164SX, AlphaBIOS, and SRM"]], Oleg Gusev, axp-list, 22 Mar 1999)] === From SRM === On systems that also have SRM, ''milo.dd'' can be written to a floppy with ''dd'' and booted with ''boot dva0''. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 5.6)] Booting Linux directly with aboot is simpler. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-November.mbox#L54844|"Re: Jakma,Paul and warp"]], Rich Payne, axp-list, 30 Nov 1999)] === From flash === On the AlphaPC 64, Noname, EB66+, EB164, and AlphaPC 164, MILO could also be written to flash with its Flash Management Utility and started directly. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, sections 5.5 and 7)] MILO relies on the previous console for some hardware initialization, and Digital stopped supporting flashing it in 1998. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-January.mbox#L949|"Re: fmu on PC164"]], Jay Estabrook, axp-list, 2 Jan 1998)] ==== Booting Linux ==== A kernel is booted with ''boot'' //device//'':''//file// followed by the kernel arguments, e.g.: [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 6.2)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-December.mbox#L38661|"Re: RH 6.1 installer"]], Jay Estabrook, axp-list, 21 Dec 1999)] MILO> boot sda2:vmlinux.gz root=/dev/sda3 MILO> boot sda2:vmlinux.gz root=/dev/sda3 console=ttyS0 * The kernel must be an ELF image, and can be compressed with gzip. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 6.2)] [(>[[https://github.com/alphalinux/milo/blob/main/Documentation/ChangeLog|ChangeLog]], MILO 2.2, 25 Nov 1999)] * MILO's version number is the kernel it was built against, not the kernels it can boot. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-April.mbox#L16381|"Re: Milo/Alpha/Kernel"]], Jay Estabrook, axp-list, 11 Apr 1998)] Kernels from Linux 2.6.23 on need a repository build (see above), which loads kernels with several ''PT_LOAD'' segments. [(>[[https://github.com/alphalinux/milo/commit/d27d5c8|"support kernels with multiple PT_LOAD segments"]], alphalinux/milo)] [(>[[https://github.com/alphalinux/milo/commit/dd79b34|"fix(boot): skip non-PT_LOAD segments when loading kernel image"]], alphalinux/milo)] * MILO 2.2-17 and later take the kernel's load address from its ELF headers. [(>[[https://github.com/alphalinux/milo/blob/main/Documentation/ChangeLog|ChangeLog]], MILO 2.2, 26 Jun 2000)] Older MILOs hardcode the old start address, so kernels for them need ''CONFIG_ALPHA_LEGACY_START_ADDRESS''; [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-June.mbox#L18501|"Re: Linux-2.4.0-test2"]], Richard Henderson, axp-list, 24 Jun 2000)] see [[documentation:kernel#kernel_start_address|Kernel]]. The option also matters for an initrd, below. * A single-platform kernel for a MILO system must be built without ''CONFIG_ALPHA_SRM'' ("Use SRM as bootloader"). [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2002-November.mbox#L288|"Re: SCSI broken on 2.4.18?"]], Jay Estabrook, debian-alpha, 2 Nov 2002)] [(>[[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/alpha/Kconfig?h=v7.3-rc1|arch/alpha/Kconfig]], Linux 7.3)] A generic kernel runs from either. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-December.mbox#L62453|"GENERIC kernels (was: Re: disparities in hardware?)"]], Jay Estabrook, axp-list, 30 Dec 1998)] * When booted from ARC or AlphaBIOS, the system clock uses the ARC epoch. See [[software:firmware:arc#known_issues|ARC known issues]]. === initrd === MILO 2.2-17 and later load an initial ramdisk given with ''initrd=''//path// on the command line. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2001-January.mbox#L14660|"Re: Upgrading my XL266 from 6.2 to 7.0 MILO"]], Stefan Reinauer, axp-list, 11 Jan 2001)] The path has no device, since MILO only has one device open at a time. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2002-April.mbox#L11600|"Re: initrd problems"]], Jay Estabrook, debian-alpha, 11 Apr 2002)] MILO runs at 13 MiB (''0xd00000'') and places the initrd directly below itself; if the initrd would reach down into the kernel, MILO refuses to load it. [(>[[https://github.com/alphalinux/milo/blob/main/Makefile|Makefile]], alphalinux/milo)] [(>[[https://github.com/alphalinux/milo/blob/main/boot.c|boot.c]], alphalinux/milo)] A kernel built with ''CONFIG_ALPHA_LEGACY_START_ADDRESS'' starts at 3 MiB, leaving less than 10 MiB for the kernel and initrd together. A kernel without it starts at 16 MiB, above MILO, so MILO cannot load any initrd for it. [(>[[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/alpha/include/asm/setup.h?h=v7.3-rc1|arch/alpha/include/asm/setup.h]], Linux 7.3)] A kernel for a MILO system therefore needs either a small initrd and the legacy start address, or no initrd, with the drivers for the root file system built in. ==== Configuration ==== === milo.conf === MILO 2.2 reads a configuration file similar to ''lilo.conf'' when given ''boot'' with only a device, e.g. ''boot sda2:''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/1998-July.mbox#L3919|"MILO status"]], Nikita Schmidt, debian-alpha, 11 Jul 1998)] [(>[[https://github.com/alphalinux/milo/blob/main/tools/boot/milo.conf.5|milo.conf(5)]], MILO 2.2)] It looks for ''/etc/milo.conf'', then ''/milo.cfg''. [(>[[https://github.com/alphalinux/milo/blob/main/milo.c|milo.c]], MILO 2.2)] With ''/boot'' on ''sda2'' and the root file system on ''sda3'', paths are relative to ''sda2'': timeout = 50 image = /vmlinux.gz label = linux root = /dev/sda3 append = "console=ttyS0" * ''timeout'' is in tenths of a second. It boots the first image; 0 means no time limit. [(>[[https://github.com/alphalinux/milo/blob/main/tools/boot/milo.conf.5|milo.conf(5)]], MILO 2.2)] * ''command'' runs a MILO command when the file is read, or, inside an image section, just before booting that image. It can be repeated. [(>[[https://github.com/alphalinux/milo/blob/main/tools/boot/milo.conf.5|milo.conf(5)]], MILO 2.2)] * Each ''image'' starts a section, with ''label'' (case sensitive), ''root'', ''append'', and ''device''. The image can include a device, e.g. ''sda1:/vmlinux.gz''. [(>[[https://github.com/alphalinux/milo/blob/main/tools/boot/milo.conf.5|milo.conf(5)]], MILO 2.2)] * At the MILO prompt, ''boot sda2:'' followed by a label boots that image. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-July.mbox#L6347|"Re: Finally booted RH6, but [p|th]ings still go wrong"]], Michal Jaegermann, axp-list, 5 Jul 1999)] === miloctl === ''miloctl'' edits the parameter block inside a MILO image file (not the copy in memory): [(>[[https://github.com/alphalinux/milo/blob/main/tools/boot/miloctl.8|miloctl(8)]], Nikita Schmidt, MILO 2.2)] * ''cmd=''//command// sets a startup command, run when MILO is about to show its prompt, with one second to abort it. ''OSLOADOPTIONS'' overrides it. A typical startup command is ''boot sda2:'', which reads ''milo.conf''. * ''mem=''//size// overrides the memory size in MiB. * ''+S'' and ''+V'' set the ''SERIAL_OUTPUT'' and ''VERBOSE'' flags, which are off by default. For example, ''miloctl -v /dev/fd0 +S +V'' enables output to the serial port during startup on a MILO floppy. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/2000-December.mbox#L489|"Re: [Milo-list] RE: Milo problem on Alpha XL 300"]], Nikita Schmidt, milo-list, 5 Dec 2000)] A startup command and ''milo.conf'' can be combined by using the startup command only to point to ''milo.conf''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/1999-June.mbox#L890|"Re: Milo - question"]], Nikita Schmidt, debian-alpha, 4 Jun 1999)] Linux itself needs ''console=ttyS0'' to use the serial port; see [[documentation:srm#serial_console|Using the SRM Console: Serial console]] for the cabling and terminal settings. ==== Commands ==== The MILO 2.2 commands are: [(>[[https://github.com/alphalinux/milo/blob/main/milo.c|milo.c]], MILO 2.2)] ^ Command ^ Description ^ | ''ls'' [//path//] | List files in a directory | | ''cd'' //path// | Change the current directory | | ''boot'' [//path// [//arguments//]] | Boot a kernel | | ''read'' [//dev//'':''] //block// | Read a block from a device | | ''run'' //path// | Run a standalone program | | ''show'' | Display all known devices and file systems | | ''sleep'' //seconds// | Wait | | ''pci'' | Display the PCI configuration | | ''set'' [//variable// //value//], ''unset'' //variable// | Set, display, or delete variables | | ''setenv'', ''unsetenv'', ''resetenv'' | Set or delete variables stored in NVRAM, instead of ''set'' and ''unset'' on systems with NVRAM support | | ''bootopt'' //num// | Select the firmware to start at power-on (Cabriolet, EB66+, EB164, and PC164 only) | | ''help'' | Print the command summary | * Paths are given as //device//'':''//file//, with devices named as in Linux, e.g. ''fd0'', ''hda1'', ''sda2'', or ''scd0''. Devices are only initialized by the first ''show'', ''ls'', ''boot'', or ''run''. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 6.1)] Forgetting the colon can cause MILO to fail. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-October.mbox#L19964|"Re: Trouble with installation"]], Rich Payne, axp-list, 13 Oct 1999)] * Commands can be abbreviated, e.g. ''b sda2:vmlinux.gz root=/dev/sda3''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-February.mbox#L3610|"New Milo images and source on gatekeeper.dec.com"]], David Rusling, axp-list, 15 Feb 1996)] * Adding ''| more'' to a command pages its output. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/1998-October.mbox#L1802|"enhancements to MILO"]], Arnaud Installe, debian-alpha, 8 Oct 1998)] * MILO takes commands from both the keyboard and COM1 (see [[#known_issues|Known issues]]). [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-September.mbox#L30442|"Re: MILO boot issues"]], Jay Estabrook, axp-list, 19 Sep 1998)] ==== Environment variables ==== ^ Variable ^ Description ^ | ''MEMORY_SIZE'' | Memory size in MiB | | ''BOOT_DEV'', ''BOOT_FILE'', ''BOOT_STRING'' | Default boot device, kernel file, and kernel arguments | | ''AUTOBOOT'', ''AUTOBOOT_TIMEOUT'' | Boot at power-on, after a timeout in seconds | | ''SCSI//n//_HOSTID'' | Host ID of the //n//th SCSI controller (default 7) | | ''PCI_LATENCY'' | PCI bus master latency (default 32, maximum 255) | | ''CPU_CLOCK'' | CPU speed in MHz, for systems that report it wrongly | | ''VERBOSE'' | Print more information | Sources: [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, sections 6.1 and 6.2)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/1999-October.mbox#L948|"New MILO and SX164 clock"]], Nikita Schmidt, debian-alpha, 8 Oct 1999)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/2000-April.mbox#L59|"Re: XLT 300+IDE+milo = 8-("]], Nikita Schmidt, milo-list, 10 Apr 2000)] * Setting ''AUTOBOOT'' without ''AUTOBOOT_TIMEOUT'' boots immediately. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 6.1)] * Variables are only kept across a reset on boards where MILO has NVRAM. Otherwise MILO prints "NVRAM not supported". [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-July.mbox#L18632|"Re: AS255 and S3 Trio64"]], Nikita Schmidt, axp-list, 16 Jul 1997)] On the UDB, the NVRAM is shared with ARC, and ''resetenv'' erases the Windows NT variables. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-May.mbox#L9137|"RE: MILO on Multia: environment corruption?"]], David Rusling, axp-list, 13 May 1996)] * ''set MEMORY_SIZE'' is the usual workaround when MILO detects the wrong memory size. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-August.mbox#L45013|"FAQ: MILO gets memory size wrong"]], Jay Estabrook, axp-list, 18 Aug 1998)] ==== Known issues ==== * **File systems:** MILO has its own file system code, not the kernel's. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-September.mbox#L30442|"Re: MILO boot issues"]], Jay Estabrook, axp-list, 19 Sep 1998)] It reads ext2, MS-DOS, ISO 9660, and ReiserFS, [(>[[https://github.com/alphalinux/milo/blob/main/config.in|config.in]], MILO 2.2)] and reads ext3 as ext2, ignoring the journal. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2003-October.mbox#L9840|"Re: 7.2 on XL366 - help!"]], Stefan Reinauer, axp-list, 31 Oct 2003)] It cannot read XFS, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2001-July.mbox#L38559|"SGI XFS Red Hat 7.1 Installer for Alpha"]], Martin K. Petersen, axp-list, 30 Jul 2001)] or files stored in ext4 extents. Its ext2 code expects 1 KiB blocks, since it reads the block group descriptors from directly after the superblock, and 128-byte inodes, since it ignores the inode size recorded in the superblock. [(>[[https://github.com/alphalinux/milo/blob/main/fs/ext2.c|fs/ext2.c]], alphalinux/milo)] Current ''mke2fs'' uses 256-byte inodes, and 4 KiB blocks on all but small file systems, so ''/boot'' should be a small ext2 file system created with ''mke2fs -t ext2 -b 1024 -I 128''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/1999-November.mbox#L72|"Re: Milo 2.2 (release)"]], Matt Wilson, milo-list, 15 Nov 1999)] Alternatively, the kernel can be kept on the FAT partition next to MILO. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2001-August.mbox#L7288|"Re: (alpha) YES, we have working boot-floppies"]], Falk Hueffner, debian-alpha, 21 Aug 2001)] * **Serial port:** MILO is built by default with serial console support on COM1 at 9600 baud. It then always accepts input from COM1, but only echoes its output there once the ''SERIAL_OUTPUT'' flag is set (see [[#miloctl|miloctl]]) or a character has been received on the port. [(>[[https://github.com/alphalinux/milo/blob/main/config.in|config.in]], alphalinux/milo)] [(>[[https://github.com/alphalinux/milo/blob/main/uart.c|uart.c]], alphalinux/milo)] [(>[[https://github.com/alphalinux/milo/blob/main/kbd.c|kbd.c]], alphalinux/milo)] A modem or other device on COM1 can therefore fill the screen with ''O>'' and block input. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 9)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-September.mbox#L30442|"Re: MILO boot issues"]], Jay Estabrook, axp-list, 19 Sep 1998)] * **VGA behind a PCI bridge:** MILO cannot initialize a VGA card behind a PCI-to-PCI bridge, e.g. in the 32-bit slots of the AlphaPC 164UX. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-August.mbox#L26968|"Re: PC164UX doesnt work - anyone got details"]], Jay Estabrook, axp-list, 11 Aug 1998)] * **SCSI controllers:** a controller can only be used if its driver is built into MILO. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 9)] MILO cannot be booted from a BusLogic controller (see [[software:firmware:arc#known_issues|ARC: Known issues]]). Driver options cannot be passed to MILO's drivers. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-May.mbox#L17155|"Re: milo and 4.3 GB scsi drive"]], Michal Jaegermann, axp-list, 24 May 2000)] * **Ruffian ldmilo:** ''ldmilo.exe'' fails a hardware check on AlphaPC 164UX boards made by Deskstation, though not on those made by Samsung. A patched ''ldmilo.exe'' by Jay Estabrook skips the check. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2001-April.mbox#L55538|"Re: ldmilo problem on ruffian"]], Ron Farrer, axp-list, 28 Apr 2001)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2002-April.mbox#L4764|"Re: Alpha newbie install woes"]], Jay Estabrook, debian-alpha, 4 Apr 2002)] * **Low power idle:** MILO's PALcode generally lacks the ''wtint'' call, which Nikita Schmidt added only for the Avanti. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-October.mbox#L23394|"Low power idle mode patch"]], Nikita Schmidt, axp-list, 15 Oct 1999)] ==== Design ==== MILO consists of PALcode, memory and video setup, block device drivers taken unmodified from the Linux kernel it is built against, its own file system code, a user interface, and the code that builds the HWRPB for Linux. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 2)] MILO does not configure network devices. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-October.mbox#L9820|"Re: Red Hat Linux/Alpha 4.0 Available Now! (fwd)"]], David Rusling, axp-list, 8 Oct 1996)] === PALcode === MILO's PALcode is based on the sample PALcode in Digital Semiconductor's Evaluation Board System Developers Kit (EBSDK). [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-September.mbox#L11650|"Re: DEC PWS 433a(Miata) clock problem"]], Jay Estabrook, axp-list, 14 Sep 1997)] The loader that starts MILO from ARC switches from the Windows NT PALcode to MILO's. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 5.1)] Each board has its own PALcode. Systems not built by Digital Semiconductor, such as the Avanti and Mikasa, use modified evaluation board PALcode. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-November.mbox#L46991|"Re: Can't get my PC164 to boot"]], Jay Estabrook, axp-list, 25 Nov 1996)] The EBSDK PALcode is less complete than the SRM PALcode: Digital supplied it as-is, for informational purposes, and recommended SRM wherever it was available. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2004-February.mbox#L913|"XL-266 install"]], Jay Estabrook, axp-list, 20 Feb 2004)] It lacks access to the performance counters and support for the prefetch code generated by Compaq's C compiler, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-February.mbox#L38911|"RE: srm / ide"]], John Jemiolo, axp-list, 29 Feb 2000)] ECC error reporting, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2003-January.mbox#L13340|"Re: EB164 SRM Problems - Followup"]], Jay Estabrook, debian-alpha, 29 Jan 2003)] and the PAL calls needed by NetBSD and OpenBSD. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-November.mbox#L52015|"Re: XP1000 & MILO & SCSI"]], Stefan Reinauer, axp-list, 27 Nov 2000)] MILO also does not provide the SRM console callbacks. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-December.mbox#L2306|"Re: Milo Development"]], Jay Estabrook, axp-list, 1 Dec 1997)] On many systems, the MILO and SRM PALcode deliver interrupts differently, so kernels built for one would not boot from the other. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-August.mbox#L45013|"FAQ: MILO gets memory size wrong"]], Jay Estabrook, axp-list, 18 Aug 1998)] On the Noname, UDB, Avanti, and Platform 2000, the same kernel boots from both. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-May.mbox#L29482|"Re: 2.1.40 wont boot on Noname"]], Jay Estabrook, axp-list, 26 May 1997)] Generic kernels run from either. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-December.mbox#L62453|"GENERIC kernels (was: Re: disparities in hardware?)"]], Jay Estabrook, axp-list, 30 Dec 1998)] === Video === MILO uses a VGA card if one is present, otherwise a TGA card. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 2)] VGA cards are initialized by running their x86 BIOS in an emulator. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-October.mbox#L35725|"Re: Milo problems."]], Jay Estabrook, axp-list, 23 Oct 1996)] === HWRPB and rebooting === MILO builds the HWRPB and memory cluster descriptions that tell Linux the system type and the available memory. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 2)] Because it must describe the system itself, there is a separate MILO for each platform. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-June.mbox#L66835|"Re: /proc/cpuinfo"]], Jay Estabrook, axp-list, 29 Jun 1998)] MILO sets the system serial number to ''MILO-'' followed by the version, e.g. ''MILO-2.0.35-c7'', which lets Linux tools detect that MILO was used, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2000-February.mbox#L3844|"Re: Alpha issues (SRM installation)"]], Nikita Schmidt, debian-alpha, 11 Feb 2000)] and each CPU's serial number to ''Linux_is_Great!''. [(>[[https://github.com/alphalinux/milo/blob/main/hwrpb.c|hwrpb.c]], alphalinux/milo)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-December.mbox#L32014|"Re: Linux_is_Great!"]], Jay Estabrook, axp-list, 15 Dec 1998)] The kernel itself checks the ''MILO'' prefix of the system serial number to tell whether it was booted from SRM. [(>[[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/alpha/kernel/setup.c?h=v7.3-rc1|arch/alpha/kernel/setup.c]], Linux 7.3)] The UP1000's APB loader also uses ''MILO-0000''. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2000-March.mbox#L466|"Re: MILO size problems"]], Rich Payne, debian-alpha, 3 Mar 2000)] MILO leaves a compressed copy of itself in memory. When Linux reboots, it returns to that copy, which boots the same kernel with the same command after a 30 second timeout. [(>{{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto}}, section 6.3)] It is not possible to return to ARC. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-July.mbox#L28154|"Re: Rebooting UDB w/ RedHat 4.1"]], David A Rusling, axp-list, 28 Jul 1997)] ==== Licensing ==== MILO's ''LICENSE'' file contains three licenses: Digital's PALcode license, which allows use only in products with an Alpha processor; a license for the BIOS emulation libraries, which forbids modifying them; and the GNU GPL. [(>[[https://github.com/alphalinux/milo/blob/main/Documentation/LICENSE|LICENSE]], MILO 2.2)] Most MILO source files carry a separate Digital notice that permits use, copying, modification, and distribution. [(>[[https://github.com/alphalinux/milo/blob/main/milo.c|milo.c]], MILO 2.2)] The ''LICENSE'' file and the source headers are therefore inconsistent about which parts are under the GPL. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/1999-September.mbox#L446|"Re: Milo 2.2 - things are becoming generic."]], Stefan Reinauer, milo-list, 8 Sep 1999)] ''linload.exe'' is not free, since it uses parts of the Windows NT SDK. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1999-January.mbox#L43156|"Re: DeskStation/Ruffian booting methods"]], Jay Estabrook, axp-list, 18 Jan 1999)] ==== History ==== David A. Rusling of Digital's European Semiconductor Applications Engineering group in Reading, England, wrote MILO and its Flash Management Utility. [(>''READ.ME'', Miniloader directory, Linux-Alpha archive, ftp.digital.com, 26 Nov 1996)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-January.mbox#L949|"Re: fmu on PC164"]], Jay Estabrook, axp-list, 2 Jan 1998)] MILO was first released publicly in BLADE 0.2 on 9 August 1995, as a console firmware replacement for systems without SRM support. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/comp-os-linux-announce-mbox/googlegroups-1995-August.mbox#L4599|"BLADE 0.2 now available! (Linux for Alpha)"]], Jim Paradis, comp.os.linux.announce, 9 Aug 1995)] Jay Estabrook took over MILO in 1997, when Rusling moved to StrongARM work. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1997-July.mbox#L21443|"Re: NEW and IMPROVED Alpha Patches and MILO Sources!"]], David A Rusling, axp-list, 18 Jul 1997)] Nikita Schmidt at University College Dublin maintained a separate branch from 1998 to 2000, which added ''/etc/milo.conf'', a startup command stored in the image, and the ''miloctl'' tool, and was used by Debian, Red Hat, and SuSE. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/1998-July.mbox#L3919|"MILO status"]], Nikita Schmidt, debian-alpha, 11 Jul 1998)] [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/1999-June.mbox#L354|"Re: Milo * bootp"]], Nikita Schmidt, milo-list, 29 Jun 1999)] Stefan Reinauer of SuSE ported Schmidt's sources to Linux 2.2 as MILO 2.2 in November 1999. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/1999-November.mbox#L1|"Milo 2.2 (release)"]], Stefan Reinauer, milo-list, 9 Nov 1999)] [(>[[https://github.com/alphalinux/milo/blob/main/Documentation/README.milo|README.milo]], MILO 2.2)] Release 2.2-17 added initrd support and fixes for Linux 2.4, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/2000-June.mbox#L45|"[Milo-list] Milo 2.2-17"]], Stefan Reinauer, milo-list, 29 Jun 2000)] and the last release, 2.2-18 in July 2001, support for the UDB flash ROM and ReiserFS. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/milo-list-mbox/2001-July.mbox#L89|"[Milo-list] Milo 2.2-18 released."]], Stefan Reinauer, milo-list, 23 Jul 2001)] An attempt to port MILO to Linux 2.4 hung during PCI initialization on all machines. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2001-August.mbox#L14468|"Kernel 2.4 PCI init on CIA/PYXIS (Milo issue)"]], Stefan Reinauer, axp-list, 21 Aug 2001)] Once Windows NT for Alpha was discontinued, MILO was only needed on systems without SRM. [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2000-June.mbox#L17559|"Re: Benefits of Linux/Alpha over Linux/x86?"]], Rich Payne, axp-list, 23 Jun 2000)] Reinauer stopped working on MILO in 2004, [(>[[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/2004-January.mbox#L184|"Re: Ruffian without floppy drive"]], Stefan Reinauer, axp-list, 5 Jan 2004)] and development resumed in the alphalinux repository in 2026. [(>[[https://github.com/alphalinux/milo/commit/e5a4a2a|"vendor Linux 2.2.26 sources and fix MIATA cross-compilation"]], alphalinux/milo)] ==== Conflicting information ==== The following sources conflict with each other or with the account given above. They are listed here for further investigation. * **Whether MILO should be booted from SRM** * [[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2000-March.mbox#L4861|"Re: Bad Debian/Alpha potato rescue floppy image?"]], David Huggins-Daines, debian-alpha, 27 Mar 2000: "booting MILO from SRM is just a bad idea" * [[https://github.com/alphalinux/mailing-list-archives/blob/main/debian-alpha-mbox/2000-March.mbox#L4976|"Re: Bad Debian/Alpha potato rescue floppy image?"]], Nikita Schmidt, debian-alpha, 28 Mar 2000: "Booting MILO from SRM is not always a bad idea." * **Large ext2 partitions** * [[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-September.mbox#L29271|"Re: Milo/kernel problem"]], Nikita Schmidt, axp-list, 18 Sep 1998: "Current MILO can't handle ext2fs partitions larger than 2Gb." * [[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1998-September.mbox#L31739|"Re: Milo/kernel problem"]], Michal Jaegermann, axp-list, 19 Sep 1998: "This time milo had to read this 3.7G partition to load my kernel" * **Boards where MILO 2.2 works** * [[https://github.com/alphalinux/milo/blob/main/Documentation/README.milo|README.milo]], MILO 2.2: "This version is known to work on LX164, SX164, Ruffian, Miata, but no successful tests on XL/XLT until now?" * The same file, later: "These sources are currently working/tested on Ruffian, LX164, Avanti. It is untested on most other platforms." * **Size of the FAT partition for MILO** * [[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-August.mbox#L16012|"Re: UDB: Problems with fdisk"]], Jay Estabrook, axp-list, 15 Aug 1996: "partition 1: ~2Mb DOS format, to hold linload/MILO" * [[https://github.com/alphalinux/mailing-list-archives/blob/main/axp-list-mbox/1996-November.mbox#L7583|"Re: milo"]], David Rusling, axp-list, 4 Nov 1996: "a small (~10Mbyte) DOS partition" ==== Documentation ==== ^ Document ^ Part number ^ Date ^ | {{wiki:software:boot_loaders:milo_howto.pdf?linkonly|Alpha Miniloader Howto, v0.85}} | | April 1997 | | [[https://github.com/alphalinux/milo/blob/main/Documentation/README.milo|README.milo]] (MILO 2.2) | | | | [[https://github.com/alphalinux/milo/blob/main/tools/boot/milo.conf.5|milo.conf(5)]] and [[https://github.com/alphalinux/milo/blob/main/tools/boot/miloctl.8|miloctl(8)]] | | | | [[https://github.com/alphalinux/milo/blob/main/Documentation/ChangeLog|ChangeLog]] (MILO 2.2) | | | | [[https://github.com/alphalinux/mailing-list-archives/tree/main/milo-list-mbox|milo-list archive]] (1999 to 2001) | | | {{tag>software boot_loader linux}}