Difference between revisions of "User:Coffnix/Raspberry Pi 4"

From Funtoo
Jump to navigation Jump to search
Line 145: Line 145:

LABEL=BOOT      /boot          vfat    defaults          0      2
LABEL=BOOT      /boot          vfat    noauto            0      2
LABEL=SWAP      none            swap    sw                0      0
LABEL=SWAP      none            swap    sw                0      0
LABEL=FUNTOO    /              ext4    defaults,noatime  0      1
LABEL=FUNTOO    /              ext4    defaults,noatime  0      1

Revision as of 17:18, June 2, 2022

What you need

  1. Raspberry PI 4
  2. An existing Funtoo Linux install or Livecd (Livecd is a solid choice if you do not have funtoo installed on a hard drive)
  3. a 32GB or larger microSD card, which will be /dev/mmcblk0, with partitions as /dev/mmcblk0p1, /dev/mmcblk0p2, etc.


  1. A faster USB3 flash drive or external USB3 SSD drive to hold your root filesystem and swap to improve performance. If you use one, it will show up as /dev/sda, with partitions /dev/sda1, /dev/sda2, etc.

Prepare your SD card

On the non-Raspberry Pi system, you will insert and prepare the microSD card. The card will likely show up as User:Coffnix/Raspberry Pi 4/dev/sdX, but when the Raspberry Pi 4 boots, the card will show up as /dev/mmcblk0.

Please note that the Raspberry Pi has a custom boot loader which uses a FAT32 partition, which will be the /boot partition just like a regular x86-64bit Funtoo installation. This means we will simply make /boot FAT32 but use MBR. Without firmware changes, the /boot partition must reside on the microSD card, but the root and swap partitions can reside on other disks.

Target your drive as outlined in the official install. Install/Prepare_Disk. Use the MBR method but make a FAT32 /boot:

  • delete everything:
root # wipefs -a /dev/sdX

Make a new MS-DOS disklabel. Add a new partition - this will be 128Mb for /boot

root # fdisk /dev/sdX
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-15523839, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-15523839, default 15523839): +128M

Has created a new partition 1 of type 'Linux' and of size 128 MiB. Add a 2G partition 2 for swap. Put the remaining space in partition 3 for root.

Check with

Command (m for help): p

Using an 8G microSD card it should show

Device        Boot    Start      End  Sectors  Size Id Type
/dev/sdX1     2048   264191   262144  128M 83 Linux
/dev/sdX2   264192  4458495  4194304    2G 83 Linux
/dev/sdX3  4458496 15523839 11065344  5.3G 83 Linux

Set flags and partition types Toggle the bootable flag on partition 1

ommand (m for help): a
Partition number (1-3, default 3): 1

The bootable flag on partition 1 is enabled now. Mark partition 1 as FAT

Command (m for help): t
Partition number (1-3, default 3): 1
Partition type (type L to list all types): c

Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

The Pi checks the type of partition 1 in the partition table and will not boot if its 82

Mark partition 2 as swap

Command (m for help): t
Partition number (1-3, default 3): 2
Partition type (type L to list all types): 82

Changed type of partition 'Linux swap / Solaris' to 'Linux swap / Solaris'.

Check again.

Device         Boot   Start      End  Sectors  Size Id Type
/dev/sdX1      *       2048   264191   262144  128M  c W95 FAT32 (LBA)
/dev/sdX2            264192  4458495  4194304    2G 82 Linux swap / Solaris
/dev/sdX3           4458496 15523839 11065344  5.3G 83 Linux

Save the new partition table. Exit fdisk with either w or q

w   write table to disk and exit
  q   quit without saving changes

Create File Systems

Next, we need to create file systems on the partitions:

root # mkfs.vfat -F 32 /dev/sdX1
root # fatlabel /dev/funtoo1 "BOOT"
root # mkswap -L SWAP /dev/sdX2
root # mkfs.ext4 -F /dev/sdX3
root # e2label /dev/funtoo3 "FUNTOO"

Prepare Your Boot Partition

Make mount points for your boot and root partitions on the SD card:

root # mkdir /mnt/funtoo

Mount your SD card:

root # mount /dev/sdX3 /mnt/funtoo 
root # mkdir /mnt/funtoo/boot
root # mount /dev/sdX1 /mnt/funtoo/boot

Get the Funtoo Files Onto the SD Card

Download the Necessary Files

Grab the latest Arm64_generic stage 3 file: Subarches

root # cd /mnt/funtoo
root # wget https://area31.host.funtoo.org/stage3-raspi4-1.4-release-std-2022-05-19.tar.xz

Extract the stage 3:

root # tar --numeric-owner --xattrs --xattrs-include='*' -xpf stage3*

Pre-boot Configuration

  • Edit your fstab file so everything mounts correctly on boot:
  • Raspberry pi only supports partuuid and partlabel loading:
root # nano /mnt/funtoo/etc/fstab
LABEL=BOOT      /boot           vfat    noauto            0       2
LABEL=SWAP      none            swap    sw                0       0
LABEL=FUNTOO    /               ext4    defaults,noatime  0       1

Rather than using the labels above, you can also simply use /dev/mmcblk0p1, /dev/mmcblk0p2 and /dev/mmcblk0p3 respectively.

Chrooting into your new installation

If you are on an existing Funtoo system, you will need to emerge fchroot. If you are using our official LiveCD, fchroot is already available.

  • Fchroot in:
root # emerge fchroot
root # cd /mnt/funtoo
root # fchroot --cpu cortex-a72 . su --login
fchroot # export PS1="FUNTOO $PS1"

Configure driver VC4 and screen resolution

root # nano /boot/config.txt

use dtoverlay=vc4-fkms-v3d:


or use dtoverlay=vc4-kms-v3d-pi4:


using dtoverlay vc4-kms-v3d-pi4 can cause blank screen on both FrameBuffer and X server. Try setting CEA or DMT mode if you run into blank screen error on your monitor or TV


Use this table to find the “hdmi_mode” value for your resolution:

Modes cea dmt.png

Configure kernel line:

root # nano /boot/cmdline.txt
dwc_otg.lpm_enable=0 root=/dev/mmcblk0p3 rootfstype=ext4 fsck.repair=yes usbhid.mousepoll=0 rootwait consoleblank=0

Set your timezone:

root # ln -sf /usr/share/zoneinfo/America/Detroit /etc/localtime

Regenerate locales:

root # locale-gen

Now, set your root password and create any necessary users. See Install/Finishing, but don't reboot your system just yet. We still need to configure the boot loader. }}

Exit from fchroot and boot your raspberry pi

Make sure all buffers have been flushed and unmount the temp directories:

root # exit
root # sync
root # cd /mnt ; umount -lR funtoo


you should probably test that your pi boots at this point BEFORE emerging everything.

Update all system

root # ego sync
root # emerge -avuND @world


Power saving mode was an issue years ago on older versions of the raspberry pi. Some people report wifi stability issues if power saving mode is active, even in newer versions. To permanently disable power saving mode:

root # echo -e '#!/bin/sh\niwconfig wlan0 power off' > /etc/local.d/wifi-power.start
root # chmod +x /etc/local.d/wifi-power.start

VC4 and V3D OpenGL drivers for Raspberry Pi

Enable profile:

root # epro mix-ins +gfxcard-raspi4

Boot Raspberry Pi 4 / 400 from USB

Clone source disk (SD card) to a destination USB disk or disk which will be bootable. Ex:

root # rsync --force -rltWDEHXAgoptx /sdcard/ /pendrive/
root # sync

Configure kernel line to replace SD Card to new disk:

dwc_otg.lpm_enable=0 root=/dev/sda3 rootfstype=ext4 fsck.repair=yes usbhid.mousepoll=0 rootwait consoleblank=0

change order of boot on EEPROM:

1 = Check SD card
4 = Check USB drive
f = Start again

Replace 0x1 to 0x4 and save.

root # rpi-eeprom-config --edit

Poweroff, remove SD Card and boot only using USB device.