diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7fa26ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +/Image.gz +/fat.img +/jumpdrive.img +/jumpdrive.img.xz +/u-boot-sunxi-with-spl.bin +/*.apk +/initramfs.gz +/initramfs.cpio +/initramfs/bin/busybox +/initramfs/splash.ppm.gz +/build +/boot.scr +/*.dtb diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2b3ce6e --- /dev/null +++ b/Makefile @@ -0,0 +1,74 @@ +CROSS_FLAGS = ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- + +all: jumpdrive.img.xz + +jumpdrive.img.xz: jumpdrive.img + xz -c jumpdrive.img > jumpdrive.img.xz + +initramfs/bin/busybox: src/busybox src/busybox_config + mkdir -p build/busybox + cp src/busybox_config build/busybox/.config + make -C src/busybox O=../../build/busybox $(CROSS_FLAGS) + cp build/busybox/busybox initramfs/bin/busybox + +initramfs/splash.ppm.gz: splash/jumpdrive.ppm + gzip < splash/jumpdrive.ppm > initramfs/splash.ppm.gz + +initramfs.cpio: initramfs/bin/busybox initramfs/init initramfs/init_functions.sh initramfs/splash.ppm.gz + cd initramfs; find . | cpio -H newc -o > ../initramfs.cpio + +initramfs.gz: initramfs.cpio + gzip < initramfs.cpio > initramfs.gz + +Image.gz: src/linux_config + mkdir -p build/linux + cp src/linux_config build/linux/.config + make -C src/linux O=../../build/linux $(CROSS_FLAGS) olddefconfig + make -C src/linux O=../../build/linux $(CROSS_FLAGS) + cp build/linux/arch/arm64/boot/Image.gz Image.gz + cp build/linux/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtb sun50i-a64-pinephone.dtb + +jumpdrive.img: fat.img u-boot-sunxi-with-spl.bin + rm -f jumpdrive.img + truncate --size 50M jumpdrive.img + parted -s jumpdrive.img mktable msdos + parted -s jumpdrive.img mkpart primary fat32 2048s 100% + parted -s jumpdrive.img set 1 boot on + dd if=u-boot-sunxi-with-spl.bin of=jumpdrive.img bs=8k seek=1 + dd if=fat.img of=jumpdrive.img seek=1024 bs=1k + +boot.scr: src/boot.txt + mkimage -A arm -O linux -T script -C none -n "U-Boot boot script" -d src/boot.txt boot.scr + +u-boot-sunxi-with-spl.bin: + wget http://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/u-boot-pine64-2020.01-r0.apk + tar -xvf u-boot-pine64-2020.01-r0.apk usr/share/u-boot/pine64-lts/u-boot-sunxi-with-spl.bin --strip-components 4 + + +fat.img: initramfs.gz Image.gz boot.scr + rm -f fat.img + truncate --size 40M fat.img + mkfs.fat -F32 fat.img + + mcopy -i fat.img Image.gz ::Image.gz + mcopy -i fat.img sun50i-a64-pinephone.dtb ::sun50i-a64-pinephone.dtb + mcopy -i fat.img initramfs.gz ::initramfs.gz + mcopy -i fat.img boot.scr ::boot.scr + +.PHONY: clean + +clean: + rm -rf build + rm -f initramfs/bin/busybox + rm -f fat.img + rm -f jumpdrive.img + rm -f jumpdrive.img.xz + rm -f *.dtb + rm -f u-boot-pine64-2020.01-r0.apk + rm -f u-boot-sunxi-with-spl.bin + rm -f initramfs/splash.ppm.gz + rm -f initramfs/bin/busybox + rm -f initramfs.cpio + rm -f initramfs.gz + rm -f Image.gz + rm -f boot.scr diff --git a/README.md b/README.md index 631fb7f..e97ad65 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,16 @@ You can use this to flash a image **directly to eMMC**, troubleshooting a broken ## This project is built on: - [Busybox](https://busybox.net) - which is [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- [postmarketOS](https://postmarketos.org) scripts - which is [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). - [Pine64's kernel fork](https://gitlab.com/pine64-org/linux) - which is [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). - [U-Boot](https://github.com/u-boot/u-boot) - which has [multiple licenses](https://github.com/u-boot/u-boot/tree/master/Licenses) -## Support -- Discord: https://discord.gg/AvtdRJ3 -- Matrix: #danctnix-portingv2:matrix.org +## Building + +Run `make` inside this directory and it will build jumpdrive.img.xz that can be flashed to SD. + +The dependencies are: + +- aarch64-linux-gnu- toolchain +- u-boot tools +- mtools diff --git a/build.sh b/build.sh deleted file mode 100755 index 0159007..0000000 --- a/build.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh - -# EDIT THIS: -export ARCH=arm64 -export CROSS_COMPILE=aarch64-linux-gnu- -IMAGE_NAME="pinephone-sdrescue.img" - -# Cleanup first -rm -rf src/busybox/out -rm -rf src/linux/out -rm -rf usr - -# Build Busybox -cd src/busybox -mkdir out -cp ../busybox_config out/.config -make O=out -j$(nproc --all) -cd ../.. - -# Build Linux Kernel -cd src/linux -mkdir out -patch -p1 -N < ../linux-disable_sysrq-msgs.diff || true -cp ../linux_config out/.config -make O=out -j$(nproc --all) -cd ../.. - -# Make initramfs -sudo cp -v src/busybox/out/busybox initramfs/bin/ -cd initramfs -find . | cpio -H newc -o > ../initramfs.cpio -cd .. -cat initramfs.cpio | gzip > recovery.gz - -# Create image -truncate --size 50M $IMAGE_NAME - -cat << EOF | fdisk pinephone-sdrescue.img -o -n -p -1 -2048 -102399 -w -EOF - -LOOP_DEVICE=$(losetup -f) -sudo losetup -P $LOOP_DEVICE $IMAGE_NAME -sudo mkfs.fat -F32 ${LOOP_DEVICE}p1 -mkdir mount -sudo mount ${LOOP_DEVICE}p1 mount -sudo cp -v src/linux/out/arch/arm64/boot/Image.gz mount -sudo cp -v src/linux/out/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtb mount -sudo cp -v recovery.gz mount -sudo mkimage -A arm -O linux -T script -C none -n "U-Boot boot script" -d src/boot.txt mount/boot.scr -sudo umount mount -rm -rf mount - -wget http://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/u-boot-pine64-2020.01-r0.apk -tar xvf u-boot-pine64-2020.01-r0.apk -sudo dd if=usr/share/u-boot/pine64-lts/u-boot-sunxi-with-spl.bin of=${LOOP_DEVICE} bs=8k seek=1 - -sudo losetup -d $LOOP_DEVICE diff --git a/initramfs/init b/initramfs/init index 0246b45..a717ff2 100755 --- a/initramfs/init +++ b/initramfs/init @@ -1,15 +1,25 @@ #!/bin/sh +## Init script for JumpDrive +## Copyright (C) 2020 - postmarketOS +## Copyright (C) 2020 - Danctl12 -################################################ -# Copyright (c) 2020 - Dreemurrs Embedded Labs # -################################################ +echo "Welcome to JumpDrive" . /init_functions.sh # Environment variables that we want: IP=172.16.42.1 +# Create all the symlinks to /bin/busybox +mkdir -p /usr/bin +mkdir -p /sbin +mkdir -p /usr/sbin +echo "Installing Busybox..." && /bin/busybox --install -s + # Mount things needed by this script +mkdir /proc +mkdir /sys +mkdir /etc mount -t proc proc /proc mount -t sysfs sysfs /sys @@ -20,11 +30,10 @@ mount -t configfs -o nodev,noexec,nosuid configfs /config mkdir -p /dev/pts mount -t devpts devpts /dev/pts -# LED indicator for MMC r/w access +# Amber LED indicator for MMC r/w access echo mmc2 > /sys/class/leds/pinephone\:green\:user/trigger +echo mmc2 > /sys/class/leds/pinephone\:red\:user/trigger -# Create all the symlinks to /bin/busybox -echo "Installing Busybox..." && /bin/busybox --install -s # Create device nodes echo "Creating device nodes..." @@ -37,12 +46,7 @@ setup_usb_configfs start_udhcpd setup_telnetd -# We'll just give some new lines cuz why not. -printf "\n\n" - -echo "Rescue SD has initialized!" -echo "Please connect the device to your computer." -echo -echo "* Telnet: $IP (port 23)" +gzip -c -d splash.ppm.gz > /splash.ppm +fbsplash -s /splash.ppm loop_forever diff --git a/initramfs/init_functions.sh b/initramfs/init_functions.sh index ce087dd..58bf1ae 100755 --- a/initramfs/init_functions.sh +++ b/initramfs/init_functions.sh @@ -8,9 +8,9 @@ setup_usb_configfs() { fi # Default values for USB-related deviceinfo variables - usb_idVendor="0x1F3A" - usb_idProduct="0xEFE8" - usb_serialnumber="Rescue SD Boot" + usb_idVendor="0x1209" # Generic + usb_idProduct="0x4201" # Random ID + usb_serialnumber="Jumpdrive" usb_rndis_function="rndis.usb0" usb_mass_storage_function="mass_storage.0" @@ -45,8 +45,7 @@ setup_usb_configfs() { # Make sure there is a mmcblk2 (eMMC)... if [ -z "$(ls /dev/mmcblk2)" ]; then - echo "eMMC is not found, something is horribly wrong!!" - echo "It's probably better to make Huong Tram release a new music video." + echo "/dev/mmcblk2 could not be opened, possible eMMC defect" crash_kernel fi @@ -61,8 +60,7 @@ setup_usb_configfs() { # Check if there's an USB Device Controller if [ -z "$(ls /sys/class/udc)" ]; then - echo "No USB Device Controller available, something is horribly wrong!!" - echo "Please let Danct12 know this." + echo "No USB Device Controller available" crash_kernel fi diff --git a/splash/jumpdrive.ppm b/splash/jumpdrive.ppm new file mode 100644 index 0000000..7ddb9b0 Binary files /dev/null and b/splash/jumpdrive.ppm differ diff --git a/splash/jumpdrive.xcf b/splash/jumpdrive.xcf new file mode 100644 index 0000000..acf33fd Binary files /dev/null and b/splash/jumpdrive.xcf differ diff --git a/src/boot.txt b/src/boot.txt index 193dbed..e469ec6 100644 --- a/src/boot.txt +++ b/src/boot.txt @@ -2,10 +2,12 @@ setenv kernel_addr_z 0x44080000 setenv bootargs loglevel=0 silent console=tty0 +gpio set 114 + if load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_z} /Image.gz; then unzip ${kernel_addr_z} ${kernel_addr_r} if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} /sun50i-a64-pinephone.dtb; then - if load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} /recovery.gz; then + if load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} /initramfs.gz; then booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}; else booti ${kernel_addr_r} - ${fdt_addr_r}; diff --git a/src/linux-disable_sysrq-msgs.diff b/src/linux-disable_sysrq-msgs.diff deleted file mode 100644 index 899acdc..0000000 --- a/src/linux-disable_sysrq-msgs.diff +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c -index 573b20551..42b040d16 100644 ---- a/drivers/tty/sysrq.c -+++ b/drivers/tty/sysrq.c -@@ -551,7 +551,6 @@ void __handle_sysrq(int key, bool check_mask) - * should not) and is the invoked operation enabled? - */ - if (!check_mask || sysrq_on_mask(op_p->enable_mask)) { -- pr_info("%s\n", op_p->action_msg); - console_loglevel = orig_log_level; - op_p->handler(key); - } else {