Hopefully the changes I made this weekend will greatly increase the compatibility with SD cards of all shapes and sizes. We'll have to see if people report back.
Tonight I tracked down the issue causing the network subsystem to lock up when OpenWrt tries to up/down interfaces (which it does even if the interface is disabled), I'd like to post it here for posterity. The problem was that the wifi setup routines call `iw dev wlan0 del` which generates an ioctl through the cfg80211/nl80211 interface to delete the virtual interface (NL80211_CMD_DEL_INTERFACE). The issue was that the driver code called unregister_netdev(), which is valid because the net_device was in NETREG_REGISTERED state. However, unregister_netdev() attempts to acquire the RTNetlink critical section via rtnl_lock(). All ioctls appear to already acquire this lock, so the unregister just hangs and kills the entire network configuration subsystem. The solution is to only use unregister_netdevice(), which assumes the rtnl lock is already held, when called from an ioctl context. Oof.
The new problem now is trying to figure out what is actually[/] supposed to happen when the nl80211 system makes a call to delete the primary wireless (type 2) interface. I also need to spend some time fixing the interface startup because it doesn't declare all of its capabilities when in a "down" state, forcing OpenWrt to only initialize it with a very basic feature set. That's easy enough, but requires me to rebuild my driver patch set which is somewhat labor intensive. Let's hope I have a lot of conference calls tomorrow!