Initramfs/Hooks

From postmarketOS Wiki
Icon This page could use some expansion. If you'd like to help out, feel free to edit this article!

Here are various hooks that might help with initramfs debugging. They are raw pastes and need to be adjusted before using them. Boot a known working ROM to extract the right /sys paths etc.

General usage

$ pmbootstrap install # now save the hook in the device chroot:
$ pmbootstrap chroot -r
$ apk add nano
$ export TERM=xterm
$ nano /etc/postmarketos-mkinitfs/hooks/my-debug-hook.sh
$ pmbootstrap initfs #to regenerate the initramfs
$ pmbootstrap flasher boot

Blinking LED (simple)

#!/bin/sh
while true; do
	echo 255 > /sys/devices/i2c-0/0-0066/leds/blue/brightness
	sleep 1
	echo 0 > /sys/devices/i2c-0/0-0066/leds/blue/brightness
done

Blinking LED (with hotplugging)

#!/bin/sh

# set usb settings
write /sys/class/android_usb/android0/enable 0
sleep 1
write /sys/class/android_usb/android0/f_rndis/ethaddr 00:01:02:03:04:05
write /sys/class/android_usb/android0/iManufacturer samsung
write /sys/class/android_usb/android0/iProduct i9070
write /sys/class/android_usb/android0/iSerial 123456789
write /sys/class/android_usb/android0/enable 1
sleep 1


cat > /bin/hotplug.sh << EOF
#!/bin/sh

if [ "\${SUBSYSTEM}" = "android_usb" ]; then

    if [ "\${USB_STATE}" = "CONNECTED" ]; then
        echo 255 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    fi
    if [ "\${USB_STATE}" = "DISCONNECTED" ]; then
        echo 0 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    fi

    sleep 5

    echo 255 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    sleep 1
    echo 0 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    sleep 1
    echo 255 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    sleep 1
    echo 0 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    sleep 1
    echo 255 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
    sleep 1
    echo 0 > /sys/devices/platform/i2c-gpio.5/i2c-5/5-0020/leds/button-backlight/brightness
fi
EOF

chmod +x /bin/hotplug.sh
echo "/bin/hotplug.sh" > /proc/sys/kernel/hotplug

Dump sysfs to SD card

You will probably need to adjust the path to the sd card, check the device name from a working OS on the phone - if the kernel is roughly the same, then the device path to the SD card should be the same as well. For Android devices, you could use TWRP for example.

#!/bin/sh
. ./init_functions.sh

setup_usb_network
start_udhcpd

TELNET_PORT=24
telnetd -b "${IP}:${TELNET_PORT}" -l /bin/sh



mkdir -p /sdcard
mount /dev/mmcblk0p1 /sdcard

if [ -e /sdcard/drebrez ]; then
    echo 255 > /sys/devices/i2c-0/0-0066/leds/blue/brightness
fi


walk() {
    for file in $(ls $1); do
        path="$1/$file"
        if test -L "$path"; then
            continue
        fi
        if test -f "$path"; then
            echo "$path"
            cat "$path"
        fi
        if test -d "$path"; then
            walk "$path"
        fi
    done
    cat /proc/cpuinfo
    cat /proc/cmdline
}

walk /sys/devices/ > /sdcard/sysdump2.txt

cat /pmOS_init.log > /sdcard/pmOS_init2.log

show_splash /splash2.ppm.gz

while true; do
    echo 255 > /sys/devices/i2c-0/0-0066/leds/blue/brightness
    sleep 1
    echo 0 > /sys/devices/i2c-0/0-0066/leds/blue/brightness
    echo 255 > /sys/devices/i2c-0/0-0066/leds/amber/brightness
    sleep 1
    echo 0 > /sys/devices/i2c-0/0-0066/leds/amber/brightness
    echo 255 > /sys/devices/i2c-0/0-0066/leds/green/brightness
    sleep 1
    echo 0 > /sys/devices/i2c-0/0-0066/leds/green/brightness
done