This is an old revision of the document!
Note: After enabling developer mode, you will need to press Ctrl-D each time you boot, or wait 30 seconds to continue booting.
crossystem dev_boot_usb=1 dev_boot_signed_only=0
Note: I'm doing the build from my Orange Pi 800 with the same RK3399 so no cross compile environment is required.
root #parted /dev/sdc mklabel gpt root #parted -a optimal /dev/sdc unit mib mkpart Kernel 1 65 root #parted -a optimal /dev/sdc unit mib mkpart Root 65 100%
Depthcharge requires some specific parameters to be set. These signal the bootloader the presence of a valid kernel partition:
root #cgpt add -i 1 -t kernel -S 1 -T 5 -P 15 /dev/sdc
Create a filesystem on the root partition and mount it:
root #mkfs.ext4 /dev/sdc2 root #mount /dev/sdc2 /mnt/sdcard </mnt> Grabbed latest arm64 stage3 and extracted to /mnt/sdcard: [[https://distfiles.gentoo.org/releases/arm64/autobuilds/20240128T234815Z/stage3-arm64-openrc-20240128T234815Z.tar.xz]] Also grabbed the latest portage snapshot as it doesn't appear its in the stage 3 and extracted to /var/db/repos/gentoo: [[https://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2]] I copied my make.conf from my Orange Pi 800 as they both have the same rk3399 SOC. <code> # These settings were set by the catalyst build script that automatically # built this stage. # Please consult /usr/share/portage/config/make.conf.example for a more # detailed example. COMMON_FLAGS="-march=armv8-a+crc+crypto -mtune=cortex-a72.cortex-a53 -mfix-cortex-a53-835769 -mfix-cortex-a53-843419" CFLAGS="${COMMON_FLAGS}" CXXFLAGS="${COMMON_FLAGS}" FCFLAGS="${COMMON_FLAGS}" FFLAGS="${COMMON_FLAGS}" # WARNING: Changing your CHOST is not something that should be done lightly. # Please consult https://wiki.gentoo.org/wiki/Changing_the_CHOST_variable before changing. CHOST="aarch64-unknown-linux-gnu" # NOTE: This stage was built with the bindist Use flag enabled # This sets the language of build output to English. # Please keep this setting intact when reporting bugs. LC_MESSAGES=C.utf8 USE="-X gpm alsa -udev pulseaudio" ACCEPT_LICENSE="-* @FREE @BINARY-REDISTRIBUTABLE" LLVM_TARGETS="AArch64" VIDEO_CARDS="panfrost"
Copy over resolv.conf:
cp --dereference /etc/resolv.conf /mnt/sdcard/etc/
Setup binds:
root #mount --types proc /proc /mnt/sdcard/proc root #mount --rbind /sys /mnt/sdcard/sys root #mount --make-rslave /mnt/sdcard/sys root #mount --rbind /dev /mnt/sdcard/dev root #mount --make-rslave /mnt/sdcard/dev root #mount --bind /run /mnt/sdcard/run root #mount --make-slave /mnt/sdcard/run
Chroot in:
root #chroot /mnt/gentoo /bin/bash root #source /etc/profile root #export PS1="(chroot) ${PS1}"
emerge --ask gentoo-sources
I stole the config from https://git.alpinelinux.org/aports/plain/testing/linux-gru/config I edited the config text and added the gentoo specific options required:
< # Linux/arm64 6.6.2 Kernel Configuration --- > # Linux/arm64 6.6.13-gentoo Kernel Configuration 5c5 < CONFIG_CC_VERSION_TEXT="gcc (Alpine 13.2.1_git20231014) 13.2.1 20231014" --- > CONFIG_CC_VERSION_TEXT="gcc (Gentoo 13.2.1_p20240113-r1 p12) 13.2.1 20240113" 7294a7295,7312 > > # > # Gentoo Linux > # > CONFIG_GENTOO_LINUX=y > CONFIG_GENTOO_LINUX_UDEV=y > CONFIG_GENTOO_LINUX_PORTAGE=y > > # > # Support for init systems, system and service managers > # > CONFIG_GENTOO_LINUX_INIT_SCRIPT=y > # CONFIG_GENTOO_LINUX_INIT_SYSTEMD is not set > # end of Support for init systems, system and service managers > > # CONFIG_GENTOO_KERNEL_SELF_PROTECTION is not set > CONFIG_GENTOO_PRINT_FIRMWARE_INFO=y > # end of Gentoo Linux
Compiling the kernel:
make make dtbs