Contents:
1. Introduction
This log is intended to be used to track progress and (eventually) show release history. All entries in the log are in chronological order. All dates listed here are approximate only, mostly due to time zone differences (the dates reflect Central Australian Time and are subject to local daylight savings changes rather than being based on UTC, and sometimes things that were done very early in the morning may have been listed as being done the night before).
2. Year 2019
2.1. June 2019
- June 15:
- Code to obtain client's MAC address (converted to ASCII), client's IP address and TFTP server's IP address, for the "booting from PXE over IPv4" case in UEFI boot loader.
- Code to obtain MTU for network device and determine (intended) TFTP block size, for the "booting from PXE" cases in UEFI boot loader.
- June 7:
- Code to obtain PXE base protocol interface, for the "booting from PXE" case in UEFI boot loader.
- Code to dump contents of memory areas (for debugging) in UEFI boot loader.
- June 3:
- Code to load Faulty Ram List file, in the CD boot loader for BIOS and UEFI boot loader.
2.2. May 2019
- May 31:
- TFTP support (open, read, close) in the PXE boot loader for BIOS.
- Code to download Faulty Ram List file; in the PXE boot loader for BIOS.
- May 30:
- UDP support (open connection, close, send packet, receive packet), in the PXE boot loader for BIOS.
- Code to get the next random number, and slight improvement in code to get a random number generator seed (seed size increased to 128 bits); in UEFI boot loader, CD boot loader for BIOS and PXE boot loader for BIOS.
- May 27:
- Code to check !PXE and PXENV+ structure and obtain PXE API entry point; in the PXE boot loader for BIOS.
- Code to handle PXE API (including abstracting calling convention differences between newer API and older API, and code to display PXEI API error codes), in the PXE boot loader for BIOS.
- Code to get cached info and UNDI info from PXE API, and extract (client) computer's MAC address and determine max. block size for TFTP; in the PXE boot loader for BIOS.
- May 25:
- Code to read "/boot" and "/backup/boot" directories, do sanity checks, and find information for all files needed for boot, for the "booting from CD" case in the UEFI boot loader.
- Created dummy Boot Abstraction Layer (so boot loaders stop complaining about "bal.bin not found on boot CD").
- May 21:
- Code to read "/boot" and "/backup/boot" directories, do sanity checks, and find information for all files needed for boot; in the CD boot loader for BIOS.
- May 20:
- Code to read path tables and search for locations of "/boot" and "/backup/boot" directories on the CD (using big-endian path as a redundant copy in case little-endian path table can't be read), CD boot loader for BIOS.
- May 19:
- Imported BCOS Event Log Specification from previous version of project
- Code to establish "time at boot" (so that later it can be used to calibrate TSC and convert any values from TSC into "ticks since boot" format); in UEFI boot loader, CD boot loader for BIOS and PXE boot loader for BIOS.
- Added support for "pre-log" data (to keep track of when data was received/read from the boot device and how much in a "pre log", so that the information can be used to retroactively create events when the event log is initialised); in UEFI boot loader, CD boot loader for BIOS and PXE boot loader for BIOS.
- Code to read path tables and search for locations of "/boot" and "/backup/boot" directories on the CD (using big-endian path as a redundant copy in case little-endian path table can't be read); for the "booting from CD" case in the UEFI boot loader.
- May 16:
- Abstracted "read bytes at byte offset" function in the UEFI boot loader.
- Code to display BIOS status/error codes, in the CD boot loader for BIOS.
- Low level "read blocks at LBA offset using block IO protocol" wrapper in the CD boot loader for BIOS.
- Code to read Primary Volume Descriptor, perform sanity checks, and extract useful information from it; in the CD boot loader for BIOS and the "booting from CD" case in the UEFI boot loader.
- May 14:
- Low level "read blocks at LBA offset using block IO protocol" wrapper in the UEFI boot loader.
- May 13:
- Code to check the media information for the "block IO protocol" interface for the underlying CD and determine minimum transfer size and "blocks per transfer" values; for the "booting from CD" case, in the UEFI boot loader.
- Code to display UEFI status codes, in the UEFI boot loader.
- May 12:
- Code to convert boot loader's device path into the underlying CD's device path, then convert that into a "block IO protocol" handle, then convert that into a "block IO protocol" interface; for the "booting from CD" case, in the UEFI boot loader.
- Code to determine if boot loader's device path represents a known/supported boot device type (currently only "booting from CD" is supported), in UEFI boot loader.
- Created script to generate a default "Faulty RAM List" file, and made changes to include the resulting file where needed.
- Imported "Faulty RAM List" generator utility from previous version of project
- Imported BCOS Faulty RAM List File Format Specification, BCOS Native File Format Specification, BCOS File Type Specification, BCOS File Metadata Specification and BCOS Compressed Native File Format Specification from previous version of project
- Code to try to inform BIOS that OS 64-bit, in CD boot loader for BIOS and PXE boot loader for BIOS.
- Code to determine "boot type" (e.g. if boot loader was started from CD, network or disk) from UEFI device path for boot loader (and display error and device path if it can't be determined), in UEFI boot loader.
- May 11:
- Code to obtain UEFI device path for boot loader and decode/display device paths, in UEFI boot loader.
- Code to display values in hexadecimal in UEFI boot loader.
- IVT sanity/security check in CD boot loader for BIOS and PXE boot loader for BIOS
- Sanity checks (signature, table size and CRC32) for UEFI's System Table, Boot Services Table and Run-Time Services Table; in UEFI boot loader.
- May 10:
- Initial code to get a random number generator seed (using RDTSC and firmware's date and time, and RDRAND and RDSEED where supported); in UEFI boot loader, CD boot loader for BIOS and PXE boot loader for BIOS.
- May 9:
- Added code to control "abort boot" strategy (halt forever or return to firmware with error status after time delay), in UEFI boot loader
- May 8:
- Code to convert strings from UTF-8 to UTF-16 and output them to console (including support for "highlight mode" and "normal mode" special characters), in UEFI boot loader
- Code to abort boot (including PC speaker beep) and "early CPU feature test" code, in CD boot loader for BIOS and PXE boot loader for BIOS
2.3. April 2019
- April 28:
- Modified "fix efi" utility to accept a minimal header and create ".data" and ".bss" sections (previous version was for pure flat binary without header and only generated "text" section).
- Modified code for temporary/awful 64-bit UEFI boot loader code to suit changes in "fix efi" utility (added minimal header, etc); and added digital signature info (mine, not UEFI's for secure boot).
- April 18:
- Created temporary (awful) "Hello World" 64-bit UEFI boot loader code (mainly to test "CD image generator" utility and ensure UEFI boot loaders will be booted)
- April 12:
- Added code to include normal directories and files in ISO9660 images, in the "CD image generator" utility
- April 10 to 11:
- Added code to generate all the meta-data and structures needed for an ISO9660 image (including volume descriptors, path tables, boot records, boot loaders, etc; but excluding normal directories and files) to the "CD image generator" utility
- April 6:
- Added "test mode" command line flag (to only generate the bare FAT file system used by UEFI boot loaders without the ISO9660 file system) to the "CD image generator" utility and its documentation
- Added code to write the final images to a file in the "CD image generator" utility
- Fixed a few bugs/incompatibilities in code to generate FAT file systems (apparently GNU's "mtools" tools don't like "sectors_per_track = 0" and "heads = 0", even though Microsoft's spec says these fields are "only relevant for media that have a geometry (volume is broken down into tracks by multiple heads and cylinders) and are visible on interrupt 0x13" and therefore should (in theory) be irrelevant/ignored for UEFI CDs and image files).
- Added code to set time and date fields on FAT directory entries "properly" ("unknown local time zone" assumed to be "UTC-12" to ensure nobody can see dates in the future), in the "CD image generator" utility
- April 3:
- Code to create BPB, FSInfo structure, cluster allocation tables, "/" directory, "/EFI" directory and "/EFI/BOOT" directory for FAT file system images; in the "CD image generator" utility
2.4. March 2019
- March 24:
- Code to determine FAT image parameters and FAT type (FAT12, FAT16, FAT32), in the "CD image generator" utility
- March 18:
- Code to load all source files and determine their sizes, in the "CD image generator" utility
- Added "set max. capacity of target media" command line option to the "CD image generator" utility and its documentation
- Initial code to estimate the final CD image size and determine "highest priority level accepted for redundancy", in the "CD image generator" utility
- March 16:
- Code to add files (with high enough priority) to the hierchical tree of directotry and file entries if redundancy is enabled, in the "CD image generator" utility
- March 15:
- Code to build a hierchical tree of directotry and file entries (sorted according to ISO9660 requirements) from the list of source files, in the "CD image generator" utility
- Code to display the intended directory structures when operating in "verbose mode", in the "CD image generator" utility
- March 7:
- Revised behaviour for redundancy (added "priority") in documentation for the "CD image generator" utility
- Updated parser code in the "CD image generator" utility to handle priority
- March 6:
- Initial code for "CD image generator" utility (command line argument parsing, index file parsing, recursive directory handling and building a full list of files to add to destination ISO9660 image)
- Wrote documentation for the "CD image generator" utility
- Added ISO98660 directory name and file name sanitization in "CD image generator" utility
- March 3:
- Got BIOS PXE boot loader and BIOS CD-ROM boot loader to "hello world" stage
- Imported "fix efi" utility from previous version of project
2.5. February 2019
- February 22:
- Imported build utility from previous version of project
- Imported RSA-2048 key generation tools from previous version of project
- Created "empty" scaffolding for various boot loaders, and imported associated include files from previous version of project
3. Previous Work
Some work was done in previous versions of the BCOS project, before this log was started (before the 22nd of February, 2019).