brax3-ubports/ramdisk-overlay/scripts/panic/telnet
erascape 59281ccd87 initial brax3 device makefiles
* boots and works fine

Signed-off-by: erascape <erascape@proton.me>
2025-09-24 08:38:38 +00:00

167 lines
4.9 KiB
Bash
Executable file

#!/bin/sh
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
USB_FUNCTIONS=rndis
ANDROID_USB=/sys/class/android_usb/android0
GADGET_DIR=/config/usb_gadget
LOCAL_IP=192.168.2.15
EXPLICIT_BUSYBOX="/bin/busybox"
TELNET_DEBUG_PORT=23
write() {
echo -n "$2" >"$1"
}
# This sets up the USB with whatever USB_FUNCTIONS are set to via configfs
usb_setup_configfs() {
G_USB_ISERIAL=$GADGET_DIR/g1/strings/0x409/serialnumber
mkdir $GADGET_DIR/g1
write $GADGET_DIR/g1/idVendor "0x18D1"
write $GADGET_DIR/g1/idProduct "0xD001"
mkdir $GADGET_DIR/g1/strings/0x409
write $GADGET_DIR/g1/strings/0x409/serialnumber "$1"
write $GADGET_DIR/g1/strings/0x409/manufacturer "Halium initrd"
write $GADGET_DIR/g1/strings/0x409/product "Failed to boot"
if echo $USB_FUNCTIONS | grep -q "rndis"; then
NETWORK_FUNCTION=""
for function in ncm.usb0 rndis.usb0 rndis_bam.rndis; do
if mkdir $GADGET_DIR/g1/functions/$function; then
NETWORK_FUNCTION=$function
break
fi
done
if [ -z "$NETWORK_FUNCTION" ]; then
echo "Error: No USB network gadget function available" >&2
exit 1
fi
fi
echo $USB_FUNCTIONS | grep -q "mass_storage" && mkdir $GADGET_DIR/g1/functions/storage.0
mkdir $GADGET_DIR/g1/configs/c.1
mkdir $GADGET_DIR/g1/configs/c.1/strings/0x409
write $GADGET_DIR/g1/configs/c.1/strings/0x409/configuration "$USB_FUNCTIONS"
if echo $USB_FUNCTIONS | grep -q "rndis"; then
ln -s $GADGET_DIR/g1/functions/$NETWORK_FUNCTION $GADGET_DIR/g1/configs/c.1
fi
echo $USB_FUNCTIONS | grep -q "mass_storage" && ln -s $GADGET_DIR/g1/functions/storage.0 $GADGET_DIR/g1/configs/c.1
echo "$(ls /sys/class/udc | grep -v dummy | head -1)" > $GADGET_DIR/g1/UDC
}
# This sets up the USB with whatever USB_FUNCTIONS are set to via android_usb
usb_setup_android_usb() {
G_USB_ISERIAL=$ANDROID_USB/iSerial
write $ANDROID_USB/enable 0
write $ANDROID_USB/functions ""
write $ANDROID_USB/enable 1
usleep 500000 # 0.5 delay to attempt to remove rndis function
write $ANDROID_USB/enable 0
write $ANDROID_USB/idVendor 18D1
write $ANDROID_USB/idProduct D001
write $ANDROID_USB/iManufacturer "Halium initrd"
write $ANDROID_USB/iProduct "Failed to boot"
write $ANDROID_USB/iSerial "$1"
write $ANDROID_USB/functions $USB_FUNCTIONS
write $ANDROID_USB/enable 1
}
# This determines which USB setup method is going to be used
usb_setup() {
mkdir /config || true
mount -t configfs none /config || true
if [ -d $ANDROID_USB ]; then
usb_setup_android_usb $1
elif [ -d $GADGET_DIR ]; then
usb_setup_configfs $1
fi
}
usb_info() {
# make sure USB is settled
echo "########################## usb_info: $1"
sleep 1
write $G_USB_ISERIAL "$1"
}
inject_loop() {
INJ_DIR=/init-ctl
INJ_STDIN=$INJ_DIR/stdin
mkdir $INJ_DIR
mkfifo $INJ_STDIN
echo "This entire directory is for debugging init - it can safely be removed" >$INJ_DIR/README
echo "########################## Beginning inject loop"
while :; do
while read IN; do
if [ "$IN" = "continue" ]; then break 2; fi
$IN
done <$INJ_STDIN
done
rm -rf $INJ_DIR # Clean up if we exited nicely
echo "########################## inject loop done"
}
usb_setup "halium-initrd telnet 192.168.2.15"
USB_IFACE=notfound
/sbin/ifconfig rndis0 $LOCAL_IP && USB_IFACE=rndis0
if [ x$USB_IFACE = xnotfound ]; then
/sbin/ifconfig usb0 $LOCAL_IP && USB_IFACE=usb0
fi
# Report for the logs
/sbin/ifconfig -a
# Unable to set up USB interface? Reboot.
if [ x$USB_IFACE = xnotfound ]; then
usb_info "Halium initrd Debug: ERROR: could not setup USB as usb0 or rndis0"
dmesg
sleep 60 # plenty long enough to check usb on host
reboot -f
fi
# Create /etc/udhcpd.conf file.
echo "start 192.168.2.20" >/etc/udhcpd.conf
echo "end 192.168.2.90" >>/etc/udhcpd.conf
echo "lease_file /var/udhcpd.leases" >>/etc/udhcpd.conf
echo "interface $USB_IFACE" >>/etc/udhcpd.conf
echo "option subnet 255.255.255.0" >>/etc/udhcpd.conf
# Be explicit about busybox so this works in a rootfs too
echo "########################## starting dhcpd"
$EXPLICIT_BUSYBOX udhcpd
# Non-blocking telnetd
echo "########################## starting telnetd"
# We run telnetd on different ports pre/post-switch_root This
# avoids problems with an unterminated pre-switch_root telnetd
# hogging the port
$EXPLICIT_BUSYBOX telnetd -b ${LOCAL_IP}:${TELNET_DEBUG_PORT} -l /bin/sh
# For some reason this does not work in rootfs
usb_info "Halium initrd Debug telnet on port $TELNET_DEBUG_PORT on $USB_IFACE $LOCAL_IP - also running udhcpd"
ps -wlT
ps -ef
netstat -lnp
cat /proc/mounts
sync
# Run command injection loop = can be exited via 'continue'
inject_loop