Thank you @Zheng-Han - a little out of my depth with that for now :( I think I must rather focus on my original issue with the i2c driver freezing up randomly when fetching data from the arduino. I need to find a way to restart the driver without having to resort to a reboot and losing data.
@Jonathan-Gerard-Joseph when i first got my omegas this happened to me several times . then, rather than just pulling some plug or switching off what i did was enter reboot via terminal or ssh, wait for the omegas led to go off and then stop the power. in about 11 months of use it has not once corrupted the start up/console by using this method. others may say this does not matter, in fact the admins say to just cut power is fine, but in practice it seems to matter.
Duh. Solved the problem... I had a script in /etc/init.d that wasn't backgrounding properly, so the system wasn't actually booted all the way; as a result, the button wasn't working. Fixed that script, and the button now works as expected.
Anyway, I confirmed the script in /etc/rc.button/reset does work, and you can replace the reboot line with whatever you want. I hope that helps someone.
The omega bootloader (uboot) has a small http server built-in, which can run and accept a new firmware over ethernet (but not WiFi) completely independently from OpenWrt - this allows to recover even seriously mis-flashed units.
This feature saved my Omega a few times back when I just had started to build my own OpenWrt images and got important details wrong in the first few attempts...
I just noticed that even when you don't have the ethernet expansion, but a second Omega with dock, you can use that to reflash, see here