Zerocat’s Coreboot Machines  v0.10.0
How to create Zerocat’s Coreboot Machines like the ZC-X230 and others...

Main Page | Related Pages | List of Files

Version Scheme

Tags are using the first three numbers only.
  • <major> – The resulting product is a major change or upgrade.
  • <minor> – Additional functionality or new features are introduced.
  • <revision> – Bug fixes, minor changes, graphical stuff.
  • <commit-hash> – Optional. If you need to specify an exact commit id, just append the abbreviated commit-hash to the version number.

Changes between v0.9.2 and v0.10.0

  • Fix retrievement function for project ‘fcode-utils’.
  • Fix configure script usage for “grub@2.02”; pass path to “freetype2.pc” via PKG_CONFIG_PATH.
  • Adapt name pattern of target folder to reflect project versions of coreboot, seabios and grub.
  • Support multiple project versions, define defaults:
    • coreboot: 4.11, 4.8.1 (default)
    • grub: grub-2.04, 2.02 (default)
    • seabios: rel-1.13.0, rel-1.12.0 (default)
    • flashrom: v1.1 (default), v1.0.1
  • Add new Coreboot version “4.11”.

    Coreboot’s bluetooth setting within the option table is NOT fully honoured. This issue is introduced by “coreboot@4.9”.
    Workaround: Fall back to “coreboot 4.8.1”.
  • Add new GRUB version “grub-2.04”.

    On a X200 reference laptop, GRUB’s play 1000 1000 10 does not work, there is NO sound output.
    Workaround: Fall back to GRUB “2.02”.
  • Add new SeaBIOS version “rel-1.13.0”.
  • Add new flashrom version “v1.1”.

    On an X200 reference laptop, option -p internal:laptop=force_I_want_a_brick is required.
  • Change name pattern for configuration template files.
  • Review documentation files.
  • Improve check of required packages.
    Toolchain Scripts are known to work successfully on Trisquel-8.0, i686 and x86_64.
    The coreboot cross-compiler build fails on Trisquel-7, i686.
    The coreboot cross-compiler build fails on Debian-10, x86_64.
  • Add/fix file documentation for toolchain scripts.
  • Edit project brief, put focus on different machine (ZC-X230).
  • List images with brief descriptions within documentation.
  • List Doxygen configuration file within documentation.
  • Add an original Doxyfile as generated by doxygen@1.8.6 to provide a reference.
  • Fix parse errors in repect to grub background links.
  • Add a complete set of new coreboot configuration templates.
  • Support individual pick up of project folders, in case different versions are available in a specified toolbox.
    See src/ and function select_option().

Changes between v0.9.1 and v0.9.2

  • Merge branch “sleeves”, which introduces a How-to of the same name.

    The How-to is meant to help you sewing your own laptop sleeve, in case you like the Do-It-Yourself approach.

Changes between v0.9.0 and v0.9.1

  • Fix logo intro, make text readable.
  • Fix poor performance of test_scriptname().
  • Update toolchain scripts to support white space in paths. Note Makefiles of external projects often fail, nevertheless. As this failure is not detecable in a reliable way, the toolchain scripts issue a warning.
  • Fix typos.

Changes between v0.8.1 and v0.9.0

This shift towards a new version was initially motivated by a user bug report. Right after addressing an appropriate fix¹, the work went on and basically ended up in an overall rename and restructure process, visible under the hood. The readability of the toolchain scripts should now be improved, significantly.

¹ Relative paths passed on the command line were not treated right. This bug is fixed by commits 46e65bb9 and 57f0eea7.

At the front end as well, these changes should address better usability:

  • The first script has been renamed into This name should give you a better idea about its purpose: It will set up a toolbox folder, which is a prerequisite for the remaining three toolchain scripts. Option --toolbox helps you to set up a new, empty, unique toolbox folder, or allows you to specify an existing one. The content of that folder can then be modifed by option --add-project. This option accepts multiple project names, separated by space. This way, you might add required projects in one go. Existing projects will be overwritten without prompting.

    In case the retrieval of a project fails due to network issues, it now is much easier to reuse an existing, yet not fully populated toolbox folder in a second go.

    To ease test and trial, option --dryrun is now available. Just screen messages will be issued, no changes on disk will apply and no network connection will be required.

    In reaction to changes of script #1, option --projects <folder> has been changed into --toolbox <toolbox-folder> four the three other scripts of the toolchain.

    The term “projects” turned out to be too generic, making it difficult to write nice documentation. Instead, term “toolbox” should provide intuitive access to the significance of the toolbox folder, which is a pre-requisite for the scripts.

  • The third script has been enriched with more responsibility regarding GRUB features. Options --grub-nomorse, --grub-nocoreinfo, --grub-nonvramcui and --grub-nopoweroff allow you to remove respective Boot Menu Menuentries from the default, full-featured GRUB configuration file as generated with --gen-config. Grub Background Images can be specified with option --grub-background <image.png>. This option will set up link names, which point to the image files. This option might be used up to four times.
  • The fourth script is now lacking options regarding GRUB or secondary payloads. Instead, the generated GRUB configuration will be scanned and payloads will be compiled as required.

    A new option --microcode is now required to add CPU Microcode Updates, explicitly. This will help to put user’s awareness on the presence of this proprietary blob, which is mandatory for some machines. Furthermore, files and options which might introduce proprietary blobs are displayed in yellow color.

    Option --target now supports the T420, which as well works fine in conjunction with --ifd-lock-regions and a lacking --microcode option.

  • As a consistent feature for all toolchain scripts...
    • Their names are checked against their original names which helps to ensure consistent documentation.
    • Options are checked against missing, accompanying options.
    • Paths are converted into absolute ones.
    • Settings and requested jobs are listed for review before a script proceeds.
    • Some settings are displayed as debug output, only.
    • Script output has been adjusted for a terminal width of 132 characters, long lines will be truncated.
    • Existing files and folders are displayed in bold style.
    • Clean options should work more reliably and should give better feedback.
    • Strayed, obsolete folders within a toolbox’s coreboot project folder will be detected and displayed, to ease maintenance.
    • Error messages are improved.
    • Some more external processes are allowed to provide error output.

Changes between v0.8.0 and v0.8.1

  • Bugfix! Rename target t60-ati_mobility_radeon_x1300 into t60_ati_mobility_radeon_x1300 and avoid multiple pattern matching for target t60.
  • Turn option --t60 into --grub-t60 and follow namespace logic.
  • Review documentation, split use cases in Toolchain.
  • Report settings via _mesg() instead of _info().
  • Check for matching SeaBIOS configuration and files within
  • In script, add retrieve function for project “fcode-utils”.

Changes between v0.7.2 and v0.8.0

  • src/config-templates/cb-4.8.1-config_t60-ati_mobility_radeon_x1300-2mb.template:
    • Add a new configuration template, dedicated for target “t60-ati_mobility_radeon_x1300”.
  • doc/toolchain.dox:
    • Add file description for the new configuration template file; explain how to extract the corresponding VGA Option ROM from memory, which is to be passed to script by means of switch --vgarom.
  • src/
    • Add new function get_lspci_tv(), which might provide useful information when it comes to extract vendor’s VGA Option ROM.
  • src/
    • Add command line option --t60 which modifies zerocat’s GRUB configuration file and removes menuentries which are not compatible with targets “t60” and “t60-ati_mobility_radeon_x1300”. For instance, secondary payload “Coreinfo” freezes and GRUB’s command halt doesn’t work.
    • usage(): Provide an invocation example for T60 targets.
  • src/
    • usage(): Fix minor issues. Improve description for --nomicrocode.
    • Add target t60-ati_mobility_radeon_x1300 which requires its own coreboot configuration template, as a proprietary VGA Option ROM is to be used.
    • usage(): Add invocation example for target t60-ati_mobility_radeon_x1300.
    • check_settings(): Check GRUB’s configuration for compatibility with T60 machines.
  • doc/
    • Update, reword, emphasize and fix typos.
    • Sort invocation order of toolchain scripts.
    • Add invocation example for the T60 with ATI Graphis (Mobility Radeon X1300).
    • Remove option --ifd-lock-regions from sample invocations, as this option should be used with care.

Changes between v0.7.1 and v0.7.2

  • Script
    • Add command line option --nomicrocode, which allows to avoid the automatically incorporated CPU Microcode Blob within the CBFS for selected machines: X60, X60t, T60, X200, X200t and T400.
    • Fix missing flash layout data for machines with ifd and 4mb chipsize.
    • Add target T430s along with a dedicated configuration template and background image.
    • usage(): Remove option --ifd-lock-regions from worked examples. This option should be tested in a second step and should not be promoted in first place.
  • Script
    • Add option --grub-default <number>. This allows you to control the default menuentry in GRUB’s boot menu. Pre-set value is: 0

Changes between v0.7.0 and v0.7.1

Hmm, three more commits help to get rid of most obvious bugs:

  • Script tests availability of package libusb-1.0-0-dev, which is a requirement for flashrom.
  • Obsolete references are removed in GRUB How-To.
  • Fix paths in, function populate_target(). (The paths seemed to work for trisquel7, but trisquel8 reported errors.)

Changes between v0.6.0 and v0.7.0

Basically, no new feature is introduced, except one which still is experimental and therefor not promoted loudly: The usage of coreboot’s utility bincfg. However, the number of scripts is reduced and more command line options are available. The code has been cleaned up and should provide much better readability. The documentation now holds some examples for the T430.

  • Script is merged into
  • Script accepts some new options, which allow for generating the GRUB payload and appropriate configuration files in one go. Note the default keymap of the GRUB console is now specified herewith with option --grub-keymap.
  • Script
    • The script should now provide more informational messages, including MAC-Adresses.
    • The target folder has a verbose naming pattern.
    • Some chipsize values are optional as they are filled in automatically.
    • Option --gbe now offers four parameter values: keep, blank, trunc and set. Note that set can be used on a X230 to set an arbitrary MAC-Address while shrinking region GbE (increasing region BIOS) by 4096 bytes. But this is preliminary information.
    • And last but not least a bugfix is introduced: Option --ifd-lock-regions should now work as expected.

Changes between v0.5.1 and v0.6.0

In short, three features are introduced:

  • New Look&Feel with Debug Support and improved Error Handling
  • Mute Option for verbose external Processes
  • Support for VGA Option ROM (X230, T520)

See applied changes in more detail:

  • The toolchain scipts now support debugging with a new, colored outfit:

    • Command line option --debug is supported. It alters the DEBUG global switch.
    • functions _funcstart() and _funcstop() are used to describe every function including main(), but excluding parse_debug().
    • Output tools like _head(), _info(), _pass(), _warn(), _fail() help to tag screen messages with a time stamp and colored message tags HEAD, INFO, PASS, WARN and FAIL.
    • Function _mesg() can be used to continue a message, no tags but indentation is applied.
    • Function _read() introduces read -r line input with colored tags as well.

    Note this tagging mechanism has been inspired by the GNU Guix install script, which uses a similar, frugal pattern.

  • External processes like git clone or make – amoung others – are allowed to put their verbose messages on screen. You might use the --mute command line option to mute their output. However, their messages to stderr will remain visible.
  • Error handling has been greatly improved with trap for sigspecs SIGINT and ERR. Error messages on exit should always point you to the name of the script, the function in action and the line where the exit has been executed.
  • Remove operations or other tasks that should attract your attention are marked with the WARN tag.
  • A new command line option --vga-rom <vga_rom> is introduced for This option allows you to specify an external VGA Option ROM, which usually is of proprietary nature. Please try your machine without this blob, first. This feature still is experimental, and is currently accepted for the ThinkPad X230 and T520 only. Note in case you provide the script with an extracted VGA Option ROM, you should have used with option --novgabios before.

Changes between v0.5.0 and v0.5.1

  • Update src/ and add new file doc/ to reflect correct authorship.
  • Add new file src/, which provides a general check routine.
  • Review code, add white space and comments, add headlines.
  • Adjust indentation of case closing characters “;;”.
  • Add new function cmdexec() in src/
  • Use upper case for global variables.
  • Apply new coding style for function declarations.
    • Remove keyword function, use brackets “()” instead.
    • Move variable declarations to top of blocks.
  • Review headlines, change timestamp, increase width.
  • Use “Here Documents”, which are easier to maintain.
  • Replace tabs by spaces.
  • Fix loop counters in src/
  • Improve code portability in src/
  • Improve code of src/
    • Retrieve external projects bios_extract, UEFITool and flashrom
    • Remove timeout in retrieve_grub().
    • Fix git command in retrieve_coreboot().
  • Add list_errcodes() in src/
  • Merge some functions into maps() in src/
  • Update documentation with successful test results for T430.
  • Fix “Graphics initialization” with value ‘Use libgfxinit’ in doc/

Changes between v0.4.0 and v0.5.0

  • Disable Doxygen’s Source Code Browser, use @verbinclude instead.
  • Fix INPUT_FILTER scripts for shell scripts and Makefiles.
  • Place bash bang in first line of shell scripts.
  • Add file src/config-templates/grub-2.02_morse.cfg.
  • Update src/config-templates/grub-2.02_zerocat.cfg to support morse code dialogues.
    This helps to run a headless machine and to support visually impaired computer users.
  • Add option --grub-morse to src/
  • Update documentation in doc/toolchain.dox.
  • Add this file doc/ to track development.

Main Page | Related Pages | List of Files