Difference between revisions of "Netboot-scratchpad"

From Funtoo Linux
Jump to: navigation, search
(ext2)
Line 5: Line 5:
 
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.
 
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.
  
= Tools =
+
= Building a tftpboot image =
 +
== Tools ==
  
 
* Tilo (seems a bit buggy especially with large image => segfaults)
 
* Tilo (seems a bit buggy especially with large image => segfaults)
 
* Linux kernel in itself
 
* Linux kernel in itself
  
= The Linux kernel way =
+
== The Linux kernel way ==
  
 
* Magic command (/in /usr/src/linux) : make tftpboot.img
 
* Magic command (/in /usr/src/linux) : make tftpboot.img
Line 19: Line 20:
 
* Some Sun machines does not initialize their MMU so everything must fit in 4 Mb in their case (1 page)
 
* Some Sun machines does not initialize their MMU so everything must fit in 4 Mb in their case (1 page)
  
= Cramfs =  
+
== 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...).  
 
* 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...).  
Line 71: Line 72:
 
* The boot process ends with : Error -3 while decompressing! with some blocks (ramdisk is 4096 in size... too small ? overwriting problem ?) :-(
 
* The boot process ends with : Error -3 while decompressing! with some blocks (ramdisk is 4096 in size... too small ? overwriting problem ?) :-(
  
= ext2 =  
+
== ext2 ==
  
 
* Same philosophy but a volume image must be created them mounted through a loopback device then formatted....
 
* 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 :-)
 
* Tried with a ramdisk of 32 Mb, okay it boots :-)
 +
 +
= Mininalitic 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 ==
 +
 +
[[http://buildroot.uclibc.org 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 :
 +
 +
<pre>
 +
 +
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>
 +
 +
<pre>
 +
 +
<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
 +
 +
</pre>
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
* 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 ?
 +
  
 
[[Category:Labs]]
 
[[Category:Labs]]

Revision as of 00:22, 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 :-)

Mininalitic 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