Important: You are required to change your passwords used for Gentoo services and set an email address for your Wiki account if you haven't done so. See the full announcement and Wiki email policy change for more information.

Raspberry Pi Quick Install Guide

From Gentoo Wiki
Jump to: navigation, search

Installing Gentoo onto a Raspberry Pi is relatively straight forward and in some ways easier because a kernel image is provided by the Raspberry Pi Foundation. This means you can get Gentoo installed quickly onto you Raspberry Pi.

Preparing the SD Card

The Raspberry Pi boots off a FAT32 /boot partition, you will also require a root and swap partition.

Create the Partitions

Use the fdisk command to create the partitions.

root # fdisk /dev/mmcblk0
Example partitioning scheme

Disk /dev/mmcblk0: 7948 MB, 7948206080 bytes
4 heads, 16 sectors/track, 242560 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000635b7

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1               1        3201      102424    c  W95 FAT32 (LBA)
/dev/mmcblk0p2            3202        7298      131104   82  Linux swap / Solaris
/dev/mmcblk0p3            7299      242560     7528384   83  Linux

Create the File Systems

root # mkfs.vfat -F 16 /dev/mmcblk0p1
root #
mkswap /dev/mmcblk0p2
root #
mkfs.ext4 /dev/mmcblk0p3
root #
IF USING 4GB SD Card: mkfs.ext4 -N 803200 /dev/mmcblk0p3

Installing onto the SD card

Mounting the partitions

root # mkdir /mnt/gentoo
root #
mount /dev/mmcblk0p3 /mnt/gentoo
root #
mkdir /mnt/gentoo/boot/
root #
mount /dev/mmcblk0p1 /mnt/gentoo/boot

Extract Stage 3 Image

root # cd /tmp/
root #
wget http://gentoo.osuosl.org/releases/arm/autobuilds/current-stage3-armv6j_hardfp/stage3-armv6j_hardfp-20130816.tar.bz2 (You will have to change the date.)
root #
tar xfpj stage3-armv6j_hardfp-*.tar.bz2 -C /mnt/gentoo/

Install Portage

root # wget http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2
root #
tar xjf portage-latest.tar.bz2 -C /mnt/gentoo/usr

Install kernel and modules

The Raspberry Pi Foundation maintain a branch of the Linux kernel that will run on the Raspberry Pi, including a compiled version which we use here.

root # cd /tmp/
root #
git clone --depth 1 git://github.com/raspberrypi/firmware/
root #
cd firmware/boot
root #
cp * /mnt/gentoo/boot/
root #
cp -r ../modules /mnt/gentoo/lib/

Configure the system

Edit fstab

Edit the fstab to match your partition scheme.

root # nano /mnt/gentoo/etc/fstab
File/etc/fstabExample

/dev/mmcblk0p1		/boot		auto		noauto,noatime	1 2
/dev/mmcblk0p3		/		ext4		noatime		0 1
/dev/mmcblk0p2		none		swap		sw		0 0

Set boot options

You need to create a file cmdline.txt in /boot to pass options to the kernel.

root # nano /mnt/gentoo/boot/cmdline.txt
File/boot/cmdline.txt

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 elevator=deadline rootwait

Edit make.conf

The default make.conf includes basic CFLAGS. If you would like to change the settings to something more 'optimal' for the Pi look at the details on the relevant wiki page.

Configure time zone

Find your time zone using this command.

root # ls /mnt/gentoo/usr/share/zoneinfo

(Suppose you want to use Europe/London)

root # cp /mnt/gentoo/usr/share/zoneinfo/Europe/London /mnt/gentoo/etc/localtime

(Next set the timezone)

root # echo "Europe/London" > /mnt/gentoo/etc/timezone

Clear root password

As we do not chroot before we boot, you will need to unset the root password. Allowing you to login with a blank password for the root user.

root # nano /mnt/gentoo/etc/shadow

Edit the line for root so it looks like the example below.

File/etc/shadow

root::10770:0:::::

Unmount SD and then boot your Raspberry Pi

Unmount the SD card.

root # umount /mnt/gentoo/boot
root #
umount /mnt/gentoo

Plugin the SD card to your Raspberry Pi, make sure you have a keyboard and monitor also plugged in then connect the power. Hopefully Gentoo will boot giving you a login prompt, login as root and no password. During the first boot you will see a few warnings and errors which we will fix in the next section.

Post boot configuration

Set root password

Immediately set a root password.

root # passwd

Enabling networking on boot

Assuming you are using DHCP on the eth0.

NOTICE: You have to copy net.lo, a symlink doesn´t work!

root # cd /etc/init.d/
root #
cp net.lo net.eth0
root #
rc-config start net.eth0
root #
rc-update add net.eth0 boot

Select profile

List the available profiles.

root # eselect profile list

Select the desired profile, for example [25] default/linux/arm/13.0/armv6j:

root # eselect profile set 25

Configuring inittab and rc.conf

Uncomment the linux specific rc.conf rc_sys value, to stop warning in boot up.

root # nano /etc/rc.conf
File/etc/rc.conf

rc_sys=""

Comment out the s0 Serial console to stop "INIT: Id "s0" respawning too fast" messages on the console.

root # nano /etc/inittab
File/etc/inittab

# SERIAL CONSOLES
#s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
#s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100

Enable software clock

The Raspberry Pi does not have a hardware clock, so you need to disable the hwclock daemon and enable swclock.

root # rc-update add swclock boot
root #
rc-update del hwclock boot

You still need to set the date before to install any package or in compiling fase it will complain. Check system time using date command.

root # date
Thu May 02 04:21:18 UTC 2013

If the date/time displayed is wrong, update it using the date MMDDhhmmYYYY syntax (Month, Day, hour, minute and Year). At this stage, you should start use the timezone you setted before in the Configure time zone section. For instance, to set the date to May 02th, 04:21 in the year 2013:

root # date 050204212013

Now you can set the system time using NTP software to setup the system clock on boot.

root # emerge --ask ntp
root # rc-update add ntp-client default

Enable SSH Daemon

root # rc-update add sshd default
root #
/etc/init.d/sshd start

Overclocking

It is very easy to overclock a Raspberry Pi up to 1000MHz without affecting your warranty [1]

Suggested overclocking values

#“None” “700MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt”
#“Modest” “800MHz ARM, 300MHz core, 400MHz SDRAM, 0 overvolt”
#"Medium” “900MHz ARM, 333MHz core, 450MHz SDRAM, 2 overvolt”
#“High” “950MHz ARM, 450MHz core, 450MHz SDRAM, 6 overvolt”
#“Turbo” “1000MHz ARM, 500MHz core, 500MHz SDRAM, 6 overvolt”

Enabling Overclocking

To enable overclocking select one of the suggest modes from the list above, "Medium" is generally a good starting point. Edit the /boot/config.txt, add the appropriate values and reboot the Raspberry Pi for changes to take effect.

root # mount /boot/
root #
nano /boot/config.txt
File/boot/config.txtExample with Medium overclocking

arm_freq=900
core_freq=333
sdram_freq=450
over_voltage=2

Optional cpufrequtils

To manage the CPU frequency scaling you can use the cpufrequtils.

root # emerge --ask cpufrequtils
root # rc-update add cpufrequtils default

The default scaling governor can be changed in the /etc/conf.d/cpufrequtils file

File/etc/conf.d/cpufrequtilsExample config with on demand scaling

START_OPTS="--governor ondemand"
STOP_OPTS="--governor performance"

Confirm the current scaling and CPU using the cpufreq-info command

root # cpufreq-info


Force Turbo Option

The force turbo option turns off the dynamic clocks and runs the Raspberry Pi constantly at the highest arm_freq. [2] Edit the /boot/config.txt, add force_turbo=1 then reboot the Raspberry Pi for changes to take effect.

root # nano /boot/config.txt
File/boot/config.txtExample with Medium overclocking and force turbo

arm_freq=900
core_freq=333
sdram_freq=450
over_voltage=2
force_turbo=1


Changing memory split

Not strictly speaking speaking overclocking, but the memory used by the GPU can be changed. To change the memory used by the GPU down to a minimum of 16MB add the gpu_mem value to /boot/config.txt, then reboot the Raspberry Pi for changes to take effect.

File/boot/config.txtExample with the minimum 16MB of memory for GPU

gpu_mem=16

Cross building (Optional)

This is not strictly required, but it is extremely practical given the source driven nature of Gentoo. Building almost anything on the Raspberry Pi takes a very, very long time - especially when there are a lot of dependencies involved.

Fortunately, you can offload much of the heavy lifting work to a more powerful system (such as your main gentoo desktop/server) using crossdev and distcc (though this will only work for packages must compile c/c++).

Full details of using distcc and crossdev on the Raspberry Pi are described in Raspberry Pi Cross building.

Install Video Core Userland tools and libraries

The ARM side libraries for interfacing to Raspberry Pi GPU are included in a package raspberrypi-userland. Which includes the Video Core tools, GLES2, EGL, openmax and openVG libs that support the Raspberry Pi GPU.

root # emerge --ask raspberrypi-userland

See also

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 your Raspberry Pi