Using Initial RAM disk

From ArmadeusWiki
Revision as of 17:20, 20 September 2013 by JulienB (Talk | contribs) (Build the initrd)

Jump to: navigation, search

Initial RAM disk are filesystem images stored in RAM memory that can be used by Linux at a first step/rootfs during the boot process. They may be usefull if the final root filesystem is not ready after Linux boot and needs some manipulation before mounting it.

For examples most USB keys takes too much time to be detected and in that case Linux is not able to use them as rootfs immediatly after boot. Other example is when you don't know the filesystem type of your rootfs and don't want to put all possibilities statically in kernel.

Initial RAM disk are also named initrd.

Page under construction... Construction.png Informations on this page are not guaranteed !!

Update.png This page is too old and need some updates. Informations on this page are not guaranteed !! Update.png

Build the initrd

  • Old way for old Buildroot is kept here.
  • With recent armadeus BSPs (== with recent Buildroot), you can configure the initrd building this way:
$ make menuconfig
Filesystem images  --->
    ...
    -*- cpio the root filesystem (for use as an initial RAM filesystem)
    ...
    [*] initial RAM filesystem linked into linux kernel
$ make
  • The Linux+initrd merged image will be stored in buildroot/output/images/apfxx-linux.bin

Configure Linux

  • Should be done by default. If not:
 $ make linux-menuconfig

Set following options as static/builtin:

General Setup -->
    Initial RAM filesystem and RAM disk support

Devices Drivers -->
    Block devices -->
        <*> RAM block device support
        (16)   Default number of RAM disks
        (4096) Default RAM disk size (kbytes)
  • increase RAM disk size if needed.
  • rebuild the kernel image if config was changed:
$ make

Convert initrd for U-Boot

$ ./buildroot/project_build_armv5te/apf27/u-boot-1.3.4/tools/mkimage -n 'MyRamDisk' -A arm -O linux -T ramdisk -C gzip -d ./myinitrd.img.gz rootfs-initrd
$ cp rootfs-initrd /tftpboot/

Boot inird from U-Boot

BIOS> tftpboot 0xA0000000 kernel
BIOS> tftpboot 0xA2000000 rootfs-initrd
BIOS> setenv bootargs console=ttySMX0,115200 root=/dev/ram rw
BIOS> bootm 0xA0000000 0xA2000000

May be a bit long but it boots ;-)

Going further

Loading kernel and ramdisk from FLASH

  1. Avoir kernel et rootfs dans la flash ==> nand write depuis u-boot ou linux
  2. Charger kernel + rootfs de la flash vers memory via nboot
BIOS> bootm 0xA0000000 0xA2000000

Thanks to Raphael A. for the informations.

Links