This repository contains a collection of scripts to create a custom Alpine Linux based SD card image bootable on Allwinner H700 based devices.
In the standard configuration, a very basic system is installed, providing
a login prompt on /dev/ttyS0
, automatic connection to a WiFi netowk on boot
and an SSH daemon running.
The scripts have been tested on a Fedora Linux 40 system and the generated image has been tested on an Anbernic RG35XX Plus portable console.
The scripts require the following software:
make
(specifically, GNU Make) to orchestrate the build and track dependenciespython3
to run some of the provided scripts; only modules from the standard library are usedsgdisk
to manipulate GPT partition tablesguestfish
to manipulate filesystem images without root privilegesfakeroot
to inject custom configuration files into the rootfs image without root privilegespodman
to provide an Alpine Linux environmentqemu-user-static-aarch64
to enablepodman
to run aarch64 container images on a different architecture like x86_64
An image of a stock SD card is required in order to extract components that are specific to the H700 SoC that do not have open source alternatives yet; those components are:
- the SPL
- the U-Boot bootloader
- the kernel
- the kernel's modules
- various firmware blobs
Some extra configuration must be provided to connect to a WiFi network and allow SSH connections.
Anything under the config
directory will be injected in the rootfs image.
A good staring point would be something like this (replace $ssid
and
$password
with the correct network name and password for your WiFi network):
mkdir -p config/etc/wpa_supplicant
wpa_passphrase '$ssid' '$password' >config/etc/wpa_supplicant/wpa_supplicant.conf
chmod 600 config/etc/wpa_supplicant/wpa_supplicant.conf
mkdir -p config/root/.ssh
cat ~/.ssh/id_*.pub >config/root/.ssh/authorized_keys
chmod 700 config/root config/root/.ssh
The scripts expect to find an image of the stock SD card in a file called
factory.img
in the root of the repository. It can be either an image file or
a link to the actual image file or device, as long as the user running the
scripts has permission to read it. The name of the image can be overridden by
specifying a different path in the FACTORY_IMAGE
variable when calling the
makefile.
To build an image, just run:
make
Or, to use a path to the stock image other than the default:
make FACTORY_IMAGE=/tmp/RG35XX+-P-V1.1.3-EN16GB-240614.IMG
The resulting image will be saved to ./artifacts/alpine-h700.img
and can be
flashed to an SD card, for example, if the card is presented to the system as
/dev/sde
:
dd if=artifacts/alpine-h700.img of=/dev/sde bs=1M oflag=dsync status=progress
There are other tunable settings: for an exaustive list, see the top of
Makefile
. Keep in mind that tweaking those values between builds may require
forcing a clean build by issuing a make clean
.