Raspberry Pi

Intro
=====

These instructions apply to all models of the Raspberry Pi:
  - the original models A and B,
  - the "enhanced" models A+ and B+,
  - the model B2 (aka Raspberry Pi 2).

To be able to use your Raspberry Pi board with the images generated by
Buildroot, you have to choose whether you will use:

    * Volatile rootfs in RAM (the rootfs is an initramfs) or
    * Persistent rootfs on the SDCard

Also, a good source of information is http://elinux.org/R-Pi_Hub

How to build it
===============

Configure Buildroot
-------------------

The raspberrypi_defconfig configuration is a minimal configuration with
all that is required to bring the Raspberry Pi up. You should base your
work on this defconfig:

  $ make raspberrypi_defconfig

Alternatively, if you want to test support for the Device Tree:

  $ make raspberrypi_dt_defconfig

For Raspberry Pi 2 use a different defconfig:

  $ make raspberrypi2_defconfig

If you want to use a persistent rootfs, skip to "Build the rootfs", below.

For a volatile rootfs, you have to slightly adjust the configuration:

  $ make menuconfig
    * Select "Filesystem images"
    * Select "initial RAM filesystem linked into linux kernel"

You may also deselect "tar the root filesystem".

Build the rootfs
----------------

Note: you will need to have access to the network, since Buildroot will
download the packages' sources.

You may now build your rootfs with:

  $ make

(This may take a while; consider getting yourself a coffee ;-) )

Result of the build
-------------------

After building, you should obtain this tree:

    output/images/
    +-- rootfs.tar                              [0]
    +-- rpi-firmware/
    |   +-- bcm2708-rpi-b.dtb
    |   +-- bcm2708-rpi-b-plus.dtb
    |   +-- bcm2709-rpi-2-b.dtb
    |   +-- bootcode.bin
    |   +-- config.txt
    |   +-- fixup.dat
    |   `-- start.elf
    `-- zImage

[0] Note for Volatile: rootfs.tar will only be there if you kept
    "tar the root filesystem" option selected in "Filesystem images".

Prepare you SDCard
==================

For more information, visit
http://elinux.org/RPi_Advanced_Setup#Advanced_SD_card_setup

In summary, your SDCard must have first partition in fat32 and marked bootable.

Create the required partitions:
  - for a persistent rootfs, 10MiB is enough memory for the boot fat32
    partition, and a second partition is required for the root filesystem
  - for a volatile rootfs, 50MiB is required for the boot fat32 partition

Note: You can create any number of partitions you desire, the only requirement
is that the first partition must be using fat32 and be bootable.

Mount the partitions (adjust 'sdX' to match your SDcard device):

  $ sudo mount /dev/sdX1 /mnt/mountpointboot
  $ sudo mount /dev/sdX2 /mnt/mountpointroot    (only for persistent rootfs)

Install the binaries to the SDCard
----------------------------------

At the root of the boot partition, the Raspberry Pi must find the following
files:

    * bcm2708-rpi-b.dtb         [1]
    * bcm2708-rpi-b-plus.dtb    [2]
    * bcm2709-rpi-2-b.dtb       [3]
    * bootcode.bin
    * config.txt
    * fixup.dat
    * start.elf
    * zImage

[1] For models A and B
[2] For models A+ and B+
[3] For model 2

For example:

 $ cp output/images/rpi-firmware/* /mnt/mountpointboot

If your kernel does *not* have support for the Device Tree, then install
it with:

 $ cp output/images/zImage /mnt/mountpointboot

If your kernel *does* have support for the Device Tree, then install it
with:

  $ ./output/host/usr/bin/mkknlimg output/images/zImage /mnt/mountpointboot/zImage

Note: The kernel image file name is defined in config.txt like this:
kernel=zImage

If you use a volatile rootfs, Skip to "Finish", below. For a persistent
rootfs, there are further steps to do.

Extract (as root!) the contents of the rootfs.tar archive into the second
partition you created above:

  $ sudo tar xf ./output/images/rootfs.tar -C /mnt/mountpointroot

Finish
======

Unmount all the partitions:

  $ sudo umount /mnt/mountpointboot
  $ sudo umount /mnt/mountpointroot     (only for persistent rootfs)

And eject your SDcard from your computer SDcard reader.

Insert the SDcard into your Raspberry Pi, and power it up. Your new system
should come up, now.
