The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
User:Coffnix/Raspberry Pi 4
What you need
- Raspberry PI 4
- An existing Funtoo Linux install or Livecd (Livecd is a solid choice if you do not have funtoo installed on a hard drive)
- a 32GB or larger microSD card, which will be
/dev/mmcblk0
, with partitions as/dev/mmcblk0p1
,/dev/mmcblk0p2
, etc.
Optional:
- 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 likely show up as
/dev/sda
when your Raspberry Pi boots, with partitions/dev/sda1
,/dev/sda2
, etc. You can use partition labels to make this easier to manage.
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 /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
/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 root # export PS1="FUNTOO $PS1" fchroot #
Configure driver VC4 and screen resolution
Note that the Raspberry Pi 4 has two different video drivers. You have the option of using vc4-fkms-v3d
or vc4-fkms-v3d-pi4
. Either way, you will want to make sure you are using HDMI port 1 on your device (on the Raspberry Pi 400, this is the one closest to the USB-C power connector) or you may not get any video. You should also see the "Setting Video Modes" section if you have a finicky monitor and find
you need to explicitly set a video mode to get the Raspberry Pi to select a display mode that your monitor accepts.
vc4-fkms-3d
fchroot # nano /boot/config.txt
use dtoverlay=vc4-fkms-v3d:
/boot/config.txt
gpu_mem=256
disable_overscan=1
dtparam=audio=on
dtoverlay=vc4-fkms-v3d
max_framebuffers=2
arm_64bit=1
vc4-kms-v3d-pi4
You can alternative 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
/boot/config.txt
gpu_mem=256
dtoverlay=vc4-kms-v3d-pi4
max_framebuffers=2
arm_64bit=1
If you have a finicky monitor, you may need to use the following uptions, uncommented:
/boot/config.txt
# CEA
#hdmi_group=1
#hdmi_mode=4
# DMT
hdmi_group=2
hdmi_mode=85
Setting Display Modes
If your display is unhappy with your Raspberry Pi's default graphics mode, or you want to lower the resolution slightly for better performance if you have a 4K display, then use this table to find the “hdmi_mode” value for your resolution. CEA are "TV" modes. DMT are "computer monitor" modes. Your display may prefer one or the other.
Configure kernel line:
fchroot ## nano /boot/cmdline.txt
/boot/cmdline.txt
dwc_otg.lpm_enable=0 root=/dev/mmcblk0p3 rootfstype=ext4 fsck.repair=yes usbhid.mousepoll=0 rootwait consoleblank=0
If you are using an external USB3 drive for your root filesystem, you will need to change the root=
line above to match.
Set your timezone:
fchroot # ln -sf /usr/share/zoneinfo/MST7MDT /etc/localtime
This following step should not be needed:
Regenerate locales:
fchroot # locale-gen
Set Passwords, Exit from fchroot and boot your raspberry pi
Now, set your root password and create any necessary users. See Install/Finishing
Did you set your root password? See above! If you are using GNOME or a DE, you will also need to create a regular user to log in.
Make sure all buffers have been flushed and unmount the temp directories:
fchroot # exit root # sync root # cd /mnt ; umount -lR funtoo
Now place the microSD card in your Raspberry Pi 4 and boot it up!