Linux bzImage boot


Boot into a minimal Linux/busybox system created using mkbootfs via HTTP.

DUT configuration

No physical disks present. System configured to boot from NIC equipped with gPXE ROM.

Environment configuration

Apache HTTP server providing gPXE script, kernel, initrd, and modules as separate files. gPXE script set to instruct client to download kernel, initrd and relevant modules. DHCP server providing network configuration and path to gPXE script on HTTP server.


Success is defined as reaching the busybox shell prompt.

Detailed test procedure

  • x86 uClibc toolchain (configured with RPC and large-file support)
  • wrapper script for uClibc compiler named uclibc
  • git
  • x86 Linux kernel (TODO: this should be built from source as well)
  • HTTP and DHCP servers
Source checkout
git clone git://
cd mkbootfs
git-submodule init
git-submodule update
mkbootfs build

In the mkbootfs directory, ensuring the uclibc wrapper is in the $PATH, simply make.

Server configuration

Copy all .bp files from the mkbootfs directory to the HTTP server.

Copy the x86 Linux kernel bzImage to the HTTP server.

Write a gPXE script on the HTTP server to boot Linux with the .bp files as initrds:

kernel http://server/dir/bzImage
initrd http://server/dir/skeleton.bp
initrd http://server/dir/busybox.bp
initrd http://server/dir/policy.bp
initrd http://server/dir/iscsi.bp

Configure the DHCP server to instruct the device under test to boot from this gPXE script:

filename "http://server/dir/script.gpxe";

Start the test machine; it should boot to a busybox shell prompt with a “gPXE Universal Boot” banner.

QR Code
QR Code soc:2009:dverkamp:notes:linux_mkbootfs (generated for current page)