BBS: TELESC.NET.BR Assunto: Re: How to wake up the WiFi on a Zero 2W (it was working but has stoppe De: Ian Data: Thu, 19 Mar 2026 10:00:02 +1100 ----------------------------------------------------------- Subject: Re: How to wake up the WiFi on a Zero 2W (it was working but has stopped) On 2026-03-18, The Natural Philosopherwrote: > Somewhere in my documentation is what I did to my pi zero in order to > avoid any SD card writes at all > > Basically I created a ram disk and mounted it on /var/log. And disabled > systemd as much as possible. > > Then ensure the SD card is mounted with noatime etc. If you replace /sbin/init (usually symlinked to /lib/systemd/systemd) with a bash script you get to run in a truly read-only environment (root filesystem still mounted ro). Of course nothing in userland works at that point, so your script has to do some initialisation - setting up a ramdisk for a copuple of directories, as you said, mounting procfs, creating some device nodes, configuring IP, loading kernel modules if you need them (e.g. for wifi). Useful for small applications (forget running a GUI, obv.). Brutal, but effective. Here's an example: ---------------------------------------------------------------------------- # cat init-ro #!/bin/bash clear echo "Running ${0}..." # # Config... # source /etc/ro-config export OUR_BC="${OUR_IP%.*}.255" export OUR_GW="${OUR_IP%.*}.1" # # Need to set these so we can prime PS1 for bash... # (see nonsense in /etc/bash.bashrc)... # export SUDO_USER=0 export SUDO_PS1="-" # # Mount tmpfs filesystems on /run and /tmp, # as these need to be rw... # mount -t tmpfs -o size=256m tmpfs /run mount -t tmpfs -o size=10m tmpfs /tmp mkdir /run/lock mkdir /run/log # # Need /dev/pts for ssh... # mkdir /dev/pts mount -t devpts devpts /dev/pts # # Need loopback... # ifconfig lo up # # Need /proc... # mount -t proc none /proc # # Set host name and domain name... # hostname "${OUR_HOSTNAME}" domainname "${OUR_HOSTNAME#*.}" # # If wifi, set up the wireless interface... # [ "${WIRED}" != "1" ] && /ro/init-wifi # # Wait for interface to appear before # configuring it... # while [ ! -d "/proc/sys/net/ipv4/conf/${OUR_IF}/" ] do echo "Waiting for interface \"${OUR_IF}\"..." sleep 1 done # # Bring the interface up... # ip link set "${OUR_IF}" up # # Check if the MAC address matches the config. If not, don't # bring up the network, just pop up a shell to allow the config # to be updated (allows cloning of the image)... # real_eth="$(ip addr list ${OUR_IF} | awk '/link\/ether/ {print $2}')" if [ "${real_eth^^}" != "${OUR_ETH^^}" ] then echo "This MAC address (${real_eth^^}) doesn't match config (${OUR_ETH^^})" echo "" echo "Please edit config and reboot..." echo "" cd /ro mount -o remount,rw /dev/root / PS1="RW-SHELL \h:\w# " /bin/bash reboot -f fi # # Set the IP address and default route... # echo "Setting IP address for ${OUR_IF}: ${OUR_IP}/24, gw: ${OUR_GW}" ip addr add "${OUR_IP}/24" brd "${OUR_BC}" dev "${OUR_IF}" ip route add 0/0 via "${OUR_GW}" # # Wait for network, check by pinging our default gateway... # while ! ping -c 1 -q -w 1 "${OUR_GW}" > /dev/null 2>&1 do echo "Waiting for network, ping gw (${OUR_GW})..." sleep 1 done # # Start ntpd to get the time... # echo "Starting ntpd..." /usr/sbin/ntpd -g echo "Waiting for time sync..." ntp-wait -n 30 -s 1 date # # Start sshd # echo "Starting sshd..." mkdir /run/sshd /usr/sbin/sshd # # Now start application screen sessions... # echo "Starting applications..." cd /ro ./start-screens # # Shell for testing... # while true do PS1="RO-SHELL \h:\w# " /bin/bash done # # We can't exit from init (causes kernel panic), so force a reboot if we get here... # reboot -f ---------------------------------------------------------------------------- -- Ian "Tamahome!!!" - "Miaka!!!" --- PyGate Linux v1.5.13 * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10) ----------------------------------------------------------- [Voltar]