Raspberry Pi/Installation

The Raspberry Pi is an ARM device (BCM2835, ARMv6) with 512 MB RAM (earlier models had 256 MB RAM) and uses an SD(HC) card for storage. This document describes how to install Gentoo on the Raspberry Pi.

Partitioning
Check that the SD card is compatible:

Create at least two partitions on the card. One FAT32 for the boot partition, and one (with the preferred filesystem) for the root partition:

For optimal compatibility, it is recommended to use 255H/63S geometry:

Boot partition
The partition needs the following proprietary firmware files, provided by the Raspberry Pi foundation:



If there is a requirement to boot the Raspberry Pi with the setting gpu_mem=16 in, The following files will be needed:



Create a file called containing the necessary kernel parameters. Example:

These are available as:

Stage 3
Download the appropriate Stage 3:

Extract to the root filesystem on the SD card:

Do not forget to adjust fstab (the SD card is recognized as ) and add to the root password hash generated by:

Stage 4
There is also an option of a self-booting Gentoo tarball (Stage 4), it can be downloaded from here. Please note this image is outdated and unmaintained however

NOOBS image. The NOOBS image will be created on a daily basis. I'd be pleased to get feedback...

NOOBS images can be downloaded from here: https://github.com/raspberrypi/noobs, then untar the NOOBS image from above in the OS folder (/os/Gentoo).

Portage tree
Download the latest portage tree:

Ensure there are enough inode blocks free on the root partition. Portage takes up approximately 154K.

Untar portage on the SD card:

crossdev
Install :

Create a cross toolchain for ARM: (drop  if it's planned to run an unstable system) (make sure PORTDIR_OVERLAY is defined in the make.conf first):

If there are any errors or portage warnings here, please fix them. It takes a while until the cross toolchain is successfully set up, so go grab a coffee. :-)

Kernel and modules
Download kernel sources for Raspberry Pi from GitHub

Alternatively:

Manual compilation
Configure and install kernel manually:

Using genkernel
Genkernel can be used to crosscompile kernel for Raspberry Pi. With genkernel all the preferences can be saved in file for later use. The values of these variables need to be changed in :

After saving the configuration file (for example to ), mount the RaspberryPi SD card to the INSTALL_MOD_PATH configured above. Assuming the Raspberry Pi root partition device is, run:

Now execute genkernel. For Raspberry Pi A, A+, B, B+:

For Raspberry Pi 2:

Save the above command to the custom script:

Now simply create kernel for the Raspberry Pi by executing:

Installing kernel image
For Raspberry Pi A, B, B+ (Not 2 B) create a file by:

or using the Raspberry Pi mkimage tool from GitHub:

Raspberry Pi 2 B just copy to

That's it!

Tips and tricks

 * Storage is rather slow, even with the couple of compatible SDHC class 10 cards. If emerge will be running on the Raspberry Pi, putting on squashfs will speed up things dramatically.
 * There is no hardware RTC on the Raspberry Pi. Use the ntp-client init script to set correct system time on boot. A fallback incremental clock can be archived by swclock (replaces hwclock).
 * If more RAM is required for Linux, set the option gpu_mem in config.txt. The smallest amount that can be set is 16 MB, default is 64 MB
 * More recent, unofficial kernel releases for the Raspberry Pi might be found at Chris Boot's repository:
 * Be sure to test the performance - if the numbers don't match up (for instance in the LINPACK benchmark), something is very wrong.
 * For instructions on how to build binary packages for the Raspberry Pi on an Android phone see this blog post:
 * If it is not possible to create a working ARM cross-toolchain, a precompiled kernel image is available from the firmware repository. The needs to be places in the boot partition and the contents of the modules directory copied to  on the SD card.
 * Put the root-fs on a NFS-share and put only the kernel image on SD card (PXE boot client).

Troubleshooting

 * Problem: dmesg is full of smsc95xx 1-1.1:1.0: eth0: kevent 2 may have been dropped and/or page allocation failure messages
 * Solution: Try to update all firmware files in /boot, especially fixup.dat.
 * Solution if the former fails: Add smsc95xx.turbo_mode=N to kernel parameters, or vm.min_free_kbytes = 4096 to


 * Problem: the follwing error shows up when running the command
 * Solution: Try the following command instead:
 * Reference: https://forums.gentoo.org/viewtopic-t-946836-start-0.html

External resources

 * Gentoo Embedded Handbook with more information about embedded hardware, cross compiling and other related topics.
 * Raspberry Pi Hub at eLinux wiki, with more advanced tutorials to get the most out of the Raspberry Pi
 * grbd@github: Putting Gentoo onto a RPI2 How-To install Gentoo Linux from Raspbian/Noobs in an external USB disk in a Raspberry Pi 2.

Books

 * Heitz, Ryan. Hello! Raspberry Pi. Manning Publications (2015). pp. 225. ISBN 9781617292453