Skip to content

Instantly share code, notes, and snippets.

@gaoyifan
Last active May 11, 2021 11:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gaoyifan/f8933879dfa426cda239140b9c665e74 to your computer and use it in GitHub Desktop.
Save gaoyifan/f8933879dfa426cda239140b9c665e74 to your computer and use it in GitHub Desktop.
rk3399-debian-image.sh
#!/usr/bin/env bash
set -xe
apt install -y build-essential git gcc-arm-none-eabi bison flex device-tree-compiler bc debootstrap
BASE=${BASE:-$(mktemp -d)}
cd $BASE
pwd
git clone https://github.com/ARM-software/arm-trusted-firmware.git
cd arm-trusted-firmware
git reset --hard v2.3
make PLAT=rk3399
export BL31=${BASE}/arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf
test -f ${BL31} && echo ok || echo WARNING
cd $BASE
git clone https://gitlab.denx.de/u-boot/u-boot.git
cd u-boot
git reset --hard v2020.07
make rockpro64-rk3399_defconfig
make
dd if=/dev/zero of=$BASE/sd.img bs=1M count=1024
kpartx -v -a $BASE/sd.img
# TODO: dynamic location
export DRIVE=/dev/loop0
parted --script "${DRIVE}" \
mklabel gpt \
mkpart 1 ext2 8MiB 12MiB \
mkpart 2 fat32 12MiB 140MiB \
mkpart 3 ext2 140MiB 100% \
set 2 esp on
dd if=$BASE/u-boot/idbloader.img of=${DRIVE} seek=64
dd if=$BASE/u-boot/u-boot.itb of=${DRIVE}p1
mkfs.ext4 -L ROCKROOT ${DRIVE}p3
mkfs.vfat -F 32 -n ROCKBOOT ${DRIVE}p2
mkdir -pv /mnt/rockpro
mount -v ${DRIVE}p3 /mnt/rockpro
mkdir -pv /mnt/rockpro/boot/efi
mount -v -t vfat -oiocharset=iso8859-1 ${DRIVE}p2 /mnt/rockpro/boot/efi
debootstrap --arch=arm64 \
--components=main \
--variant=minbase \
--include=linux-image-arm64,systemd-sysv \
bullseye \
/mnt/rockpro \
http://mirrors.ustc.edu.cn/debian
#TODO dynamic kernel image file with correct version
cat <<EOF > $BASE/grub.cfg
set timeout=5
set default=0
menuentry Debian {
insmod gzio
insmod part_gpt
insmod ext2
set root=hd0,gpt3
echo Loading kernel...
linux /boot/vmlinuz-5.10.0-6-arm64 root=LABEL=ROCKROOT console=ttyS2,1500000
echo Loading ramdisk...
initrd /boot/initrd.img-5.10.0-6-arm64
}
EOF
mkdir -pv /mnt/rockpro/boot/efi/EFI/BOOT/
grub-mkstandalone -O arm64-efi \
-o /mnt/rockpro/boot/efi/EFI/BOOT/BOOTAA64.EFI \
"boot/grub/grub.cfg=${BASE}/grub.cfg"
mkdir -pv /mnt/rockpro/boot/efi/dtb/rockchip
cp -v /mnt/rockpro/usr/lib/linux-image-5.10.0-6-arm64/rockchip/rk3399-rockpro64.dtb \
/mnt/rockpro/boot/efi/dtb/rockchip
cat <<EOF > /mnt/rockpro/etc/fstab
LABEL=ROCKROOT / ext4 noatime 0 1
LABEL=ROCKBOOT /boot/efi vfat iocharset=iso8859-1 0 2
EOF
chroot /mnt/rockpro apt install -y ifupdown openssh-server
cat <<EOF > /mnt/rockpro/etc/ssh/sshd_config.d/root.conf
PermitRootLogin yes
PasswordAuthentication yes
EOF
cat <<EOF > /mnt/rockpro/etc/network/interfaces.d/eth0
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.32.3/20
gateway 192.168.32.1
dns-nameservers 192.168.32.1
EOF
echo "setting new root password"
chroot /mnt/rockpro passwd root
sync
echo
echo "Flush $BASE/sd.img to your SD card!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment