HowTo: Making a bootable ISO w/ miniroot.kmod etc.

Hubert Feyrer <[email protected]>
Newsgroups gmane.os.netbsd.devel.installation
Message-ID <[email protected]>
I've asked how building a bootable ISO works now that we have kernel
modules and a bootloader that can load kernels before the kernel,
e.g. for a ramdisk. After some digging, I've managed to fit the pieces
together, get things going[1], and here is a write-up so others that
are intestested don't have to wade through that swamp again.

Old (pre-5.0/current):

  * build INSTALL kernel, which reserves fixed space for a ramdisk
    image (pseudo-device md, options MEMORY_DISK_HOOKS,
    MEMORY_DISK_IS_ROOT, MEMORY_DISK_SERVER=0, MEMORY_DISK_ROOT_SIZE)
  * build ramdisk image (done in src/distrib/i386/ramdisks). This uses
    crunchgen(1) and makefs(8) to assemble things, configuration is in one
    or several "list" files.
  * insert ramdisk image into kernel to get an instkernel (done in
    src/distrib/i386/instkernel). This is done via mdsetimage(8).
  * build ISO with instkernel and bootloderer (done in
    src/distrib/i386/cdroms/bootcd). This uses makefs(8) again.

New (5.0/current):

  * build GENERIC kernel, which tells there will be a ramdisk, but size
    will be detected at load-time (pseudo-device md, options
    MEMORY_DISK_HOOKS, MEMORY_DISK_DYNAMIC)
  * build ramdisk image as before (in src/distrib/i386/ramdisks)
  * build the miniroot.kmod (in src/sys/modules/miniroot). This is an
    empty module for a start, which will get the ramdisk appended in
    the next step.
  * add the ramdisk image to the miniroot.kmod module (done in
    src/distrib/i386/kmod). This uses the GNU bintools objcopy(1) to
    append the ramdisk into a special ELF section.
  * prepare an instkernel that is basically just a compressed version
    of the GENERIC kernel (done in src/distrib/i386/instkernel). This
    is the same code as before, but for each kernel, variables can be
    set to prevent it from getting stripped and a ramdisk image
    inserted (MDSET_NOSTRIP.netbsd-GENERIC,
    MDSET_NOIMAGE.netbsd-GENERIC).
  * build ISO with the instkernel kernel, the miniroot.kmod file, the
    bootloader and a config file for the bootloader (done in
    distrib/i386/cdroms/bootcd).

Enjoy!


  - Hubert

P.S.: I wonder if/how module loading works in a PXE boot environment.
       anyone got experiences with that?


[1] g4u 2.4alpha3 is available for testing
     http://www.feyrer.de/NetBSD/blog.html/nb_20081122_1744.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.