Difference between revisions of "Netboot-scratchpad"

From Funtoo Linux
Jump to: navigation, search
Line 77: Line 77:
 
* Tried with a ramdisk of 32 Mb, okay it boots :-)
 
* Tried with a ramdisk of 32 Mb, okay it boots :-)
  
= Mininalitic uclibc environment =
+
= Minimalistic uclibc environment =
  
 
Having BusyBox statically linked is cool but it has a drawback : adding additional programs requires thing to be statically linked as well... So let's try to build a minimalistic netboot environment with uClibc.
 
Having BusyBox statically linked is cool but it has a drawback : adding additional programs requires thing to be statically linked as well... So let's try to build a minimalistic netboot environment with uClibc.

Revision as of 03:03, 13 February 2011

Draft for an experiment in progress. Accuracy here is random!


Contents

Warning

Information here may vary from day to day and hour to hour. It is a "pad" to help us to take various notes on a future and more complete tutorial on how produce netboot images for SPARC machines. Free feel to annotate if you wish.

Building a tftpboot image

Tools

  • Tilo (seems a bit buggy especially with large image => segfaults)
  • Linux kernel in itself

The Linux kernel way

  • Magic command (/in /usr/src/linux) : make tftpboot.img
    • Scans System.map to get ELF entries (espcially _star and _end)
  • Requires a root.img file in /usr/src. This file is a ramdisk image (!= initrd ?). The smaller the better, so cramfs can be used therem of course busybox is required.
  • cramfs must be included built-in
  • Some Sun machines does not initialize their MMU so everything must fit in 4 Mb in their case (1 page)

Cramfs

  • Designed for having a small footprint, ideal (to check with rw mount points ? The Fs is readonly and limited around 272Mb in size, no possibility to remount it rw...).
  • Must be built in in kernel !
  • Basic structure:
 ├── bin
├── dev
├── etc
├── lib
├── lib64 -> lib
├── mnt
│   ├── cdrom
│   ├── floppy
│   └── funtoo
├── proc
├── sbin
├── sys
├── tmp
├── usr
│   ├── bin
│   └── sbin
└── var
  • Creation (mkdir and cd into it first) :
# mkdir -p bin sbin lib usr/bin usr/sbin usr/lib etc var sys proc sys dev etc mnt/floppy mnt/cdrom mnt/funtoo
# chmod -R 755 *
# chmod 1777 tmp
# ln -s lib64 lib
  • Emerge busybox in this subtree and remove unwanted files (eg. /usr/share/doc, and such). Ok because we ask for a static build (this stuff can be built with ulibc also... see also buildroot)
# CFLAGS="-O2 -pipe -mcpu=v9" USE="static make-symlinks" emerge --nodeps --root=/path/to/ramdisk/tree busybox
  • Recompile a Linux kernel and put the modules in the cramfs directory structure (make modules_install INSTALL_MOD_PATH=/path/to/ramdisk/tree)
    • Don't forget to put a default argument init=... (if is is suitable to keet the init deployed by busybox as is)
    • Put something useful in the cutomized init (can be a script) like
#!/bin/ash
echo "Hello world"
  • Build the cramfs, name it root.img and put it in /usr/src
  • Build the tftpboot image => cd /usr/src/linux && make tftpboot.img
  • Put the image on a tftpserver
  • The boot process ends with : Error -3 while decompressing! with some blocks (ramdisk is 4096 in size... too small ? overwriting problem ?) :-(

ext2

  • Same philosophy but a volume image must be created them mounted through a loopback device then formatted....
  • Tried with a ramdisk of 32 Mb, okay it boots :-)

Minimalistic uclibc environment

Having BusyBox statically linked is cool but it has a drawback : adding additional programs requires thing to be statically linked as well... So let's try to build a minimalistic netboot environment with uClibc.

Getting and compiling Buildroot

[Buildroot] is a cool thing is a set of patches and scripts that help to build environment for embedded devices. Download the latest revision (no SPARC v9 support, removed for some reasons). So Config.in.arch in ./targets should read for sparc :


config BR2_sparc_v7
        bool "v7"
config BR2_sparc_cypress
        bool "cypress"
config BR2_sparc_v8
        bool "v8"
comment "SPARC v9 variants"
config BR2_sparc_v9
        bool "v9 generic"
config BR2_sparc_ultrasparc
        bool "UltraSPARC I/II"
config BR2_sparc_ultrasparc3 
        bool "UltraSPARC III"
config BR2_sparc_niagara
        bool "Niagara"
comment "LEON SPARC needs gcc = 4.4.x"
config BR2_sparc_sparchfleon
        bool "hfleon"
config BR2_sparc_sparchfleonv8
        bool "hfleonv8"
config BR2_sparc_sparcsfleon
        bool "sfleon"
config BR2_sparc_sparcsfleonv8
        bool "sfleonv8"
config BR2_sparc_supersparc
        bool "supersparc"
config BR2_sparc_sparclite
        bool "sparclite"
config BR2_sparc_f930
        bool "f930"
config BR2_sparc_f934
        bool "f934"
config BR2_sparc_hypersparc
        bool "hypersparc"
config BR2_sparc_sparclite86x
        bool "sparclite86x"
config BR2_sparc_sparclet
        bool "sparclet"
config BR2_sparc_tsc701
        bool "tsc701"
endchoice

config BR2_SPARC_TYPE
        string
        default V7      if BR2_sparc_v7 || BR2_sparc_cypress || BR2_sparc_sparclite || BR2_sparc_f930 || BR2_sparc_f934 || BR2_sparc_sparclite86x || BR2_sparc_sparclet || BR2_sparc_tsc701 || BR2_sparc_sparchfleon || BR2_sparc_sparcsfleon
        default V8      if BR2_sparc_v8 || BR2_sparc_supersparc || BR2_sparc_hypersparc || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleonv8
        default V9      if BR2_sparc_v9 || BR2_sparc_v9a || BR2_sparc_v9b || BR2_sparc_ultrasparc || BR2_sparc_ultrasparc3 || BR2_sparc_niagara

<pre>
config BR2_GCC_TARGET_TUNE
        string
        default i386            if BR2_x86_i386
        default i486            if BR2_x86_i486
        default i586            if BR2_x86_i586
        default pentium-mmx     if BR2_x86_pentium_mmx
        default i686            if BR2_x86_i686
...


        default sparclite86x    if BR2_sparc_sparclite86x
        default sparclet        if BR2_sparc_sparclet
        default tsc701          if BR2_sparc_tsc701
        default v9              if BR2_sparc_v9
        default v9              if BR2_sparc_v9a
        default v9              if BR2_sparc_v9b
        default ultrasparc      if BR2_sparc_ultrasparc
        default ultrasparc3     if BR2_sparc_ultrasparc3
        default niagara         if BR2_sparc_niagara

config BR2_GCC_TARGET_CPU
        string
        default sparchfleon     if BR2_sparc_sparchfleon
        default sparchfleonv8   if BR2_sparc_sparchfleonv8
        default v9              if BR2_sparc_v9
        default v9              if BR2_sparc_v9a
        default v9              if BR2_sparc_v9b
        default ultrasparc      if BR2_sparc_ultrasparc
        default ultrasparc3     if BR2_sparc_ultrasparc3
        default niagara         if BR2_sparc_niagara
  • When compiling buildroot, gmp is not configured properly and its compilation will fail, just reconfigure it with CFLAGS="-mcpu=v9" dans --host=sparc-unknown-linux-gnu (sparc64-unknown-linux-gnu is dedicated to the kernel only => kgcc64). TODO : A way to set that correcly ?
Personal tools
Namespaces

Variants
Actions
Categories
Toolbox
Stuff