====== Gentoo Installation on AML-S905X-CC (Le Potato) ====== === Requirements === * 2x microSD cards * USB microSD card adapter * Le Potato board * usb to tty cable so you can see whats going on over UART === Steps === - flash raspian image from Libre Computer to both microSD cards [[https://distro.libre.computer/ci/raspbian/11/2022-09-22-raspbian-bullseye-arm64-lite%2Baml-s905x-cc.img.xz|Download]] - insert one of the microSD cards you flashed into the Le Potato and boot (follow initial setup as required) - insert the second microSD into usb adapter and insert adapter into usb slot on Le Potato, this is where you will make changes and install Gentoo - delete root partion (second partition) - create a swap partition if desired - create a new root partition - mkfs.btrfs on the new root partition - mount new partition at /mnt/gentoo (mkdir if needed) - mount the existing EFI partition on /mnt/gentoo/boot/efi (mkdir first) - cp -rp the firmware, kernel modules, kernel headers and the rest of /boot from the raspian microSD you are booted on to the one on the adapter to the same path - use lsmod and put list of modules into /etc/modules-load.d/raspian-modules.conf - at this point you can mostly follow the normal gentoo amd64 handbook for setup (use end0 for ethernet device) - make sure you adjust /etc/inittab if you want to use the uart interface # Architecture specific features f0:12345:respawn:/sbin/agetty 115200 ttyAML0 vt100 - when you get to bootloader installation/configuration emerge grub with efi-64 (add following to /etc/portage/make.conf) GRUB_PLATFORMS="efi-64" - grub-mkconfig -o /boot/grub/grub.cfg - grub-mkstandalone -O arm64-efi -o /boot/efi/EFI/BOOT/BOOTAA64.EFI "boot/grub/grub.cfg=/boot/grub/grub.cfg" === Custom Kernel === * [[https://github.com/libre-computer-project/libretech-linux.git|Github Source]] * Branch: v6.0/libretech-master * Start with Config from /boot (from Raspbian image) * make menuconfig/make/make install/make modules_install * emerge dracut * dracut --kver="6.0.19-419654-g73f2949c2dd9" * grub-mkconfig -o /boot/grub/grub.cfg * grub-mkstandalone -O arm64-efi -o /boot/efi/EFI/BOOT/BOOTAA64.EFI "/boot/grub/grub.cfg=/boot/grub/grub.cfg" === Qemu chroot environment (For compiling packages on amd64 host with more memory/cpu)=== * emerge --ask app-emulation/qemu * QEMU_USER_TARGETS="aarch64" QEMU_SOFTMMU_TARGETS="aarch64" USE="static-user static-libs" emerge --ask --buildpkg --oneshot qemu * cd /usr * mkdir potato * cd potato * wget https://bouncer.gentoo.org/fetch/root/all/releases/arm64/autobuilds/20230416T233158Z/stage3-arm64-openrc-20230416T233158Z.tar.xz * tar xvf stage3*tar.xz * cp -rp kernel firmware headers modules to the new chroot env * ROOT=$PWD/ emerge --ask --usepkgonly --oneshot --nodeps qemu * make file requires -pid-sandbox in features or qemu bug rears its ugly head * mkdir any mount points that dont' exist for the chroot script * setup your package.use etc /etc/portage/package.make # 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="-O2 -pipe -march=armv8-a+crypto+crc -mabi=lp64 -mtune=cortex-a53" 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" MAKEOPTS="-j4" FEATURES="-pid-sandbox buildpkg" #FEATURES="-collision-protect sandbox buildpkg noman noinfo nodoc" PKGDIR=/var/potato/binpkgs/ # 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 USE="-X gpm fbcon alsa -udev" ACCEPT_LICENSE="-* @FREE @BINARY-REDISTRIBUTABLE" GRUB_PLATFORMS="efi-64" PORTDIR_OVERLAY="/var/db/repos/portage_overlay" potato-chroot.sh /etc/init.d/qemu-binfmt start cd /usr/potato mount -t proc none proc mount -o bind /dev dev mount -o bind /var/db/repos/gentoo var/db/repos/gentoo mount -o bind /sys sys cp /etc/resolv.conf etc/resolv.conf echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-aarch64:' > /proc/sys/fs/binfmt_misc/register chroot . /bin/bash --login umount sys umount var/db/repos/gentoo umount dev umount proc === Configuring binary package repo over ssh === * get public key from root user on potato * add potato root public key to authorized_keys file of a user with read access on the compile host * add feature and pkg host to /etc/portage/make.conf PORTAGE_BINHOST="ssh://user@pkghost/usr/potato/var/potato/binpkgs" FEATURES="getbinpkg" === Adding RTC === * wire your RTC to the GPIO same as a raspberry pi{{:rtc.jpeg?400|}} * install depsemerge --ask dtc libgpiod * clone libretech-wiring-tool git clone https://github.com/libre-computer-project/libretech-wiring-tool.git * compile and install the overlays and commands make make install * create an init script to add the overlays: * vim /etc/init.d/rtc * #!/sbin/openrc-run # Copyright 2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 name="i2c rtc overlays" description="make rtc " depend() { before hwclock } start() { /opt/librecomputer/libretech-wiring-tool/ldto enable i2c-ao /opt/librecomputer/libretech-wiring-tool/ldto enable i2c-ao-ds3231 } * set make script executable and add too boot runlevel chmod 755 rtc rc-update add rtc boot * reboot and check dmesg, if it worked you'll see a log like so [ 11.809520] rtc-ds1307 1-0068: registered as rtc0 [ 11.810886] rtc-ds1307 1-0068: setting system clock to 2023-05-04T11:58:05 UTC (1683201485) * you can also check with i2cdetect denoting the UU in 0x68 location mobilemouse ~ # i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- === GPIO Reference === {{:potatogpio.png?800|}}