Last active
May 11, 2021 11:00
-
-
Save gaoyifan/f8933879dfa426cda239140b9c665e74 to your computer and use it in GitHub Desktop.
rk3399-debian-image.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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