I've ported the broadcom-sdhc driver (which was based on the old "optimized mmc" driver) to kernel 2.6 and improved the startup scripts. You should get significantly more reliable SD card support and performance compared to the mmc_over_gpio driver.
In theory, this should work with any WRT54G/GL with the sd card mod. I have no idea if this works on any other Broadcom platform, if you're feeling adventurous, try it out and let me know here!
This works on my WRT54GL with the SD card mod with:
data in on gpio 2
data out on gpio 4
clock on gpio 3
chip select on gpio 7
I'm not responsible if this bricks your router etc.
This should work on any relatively recent trunk/snapshot, and maybe even 10.04-rc4. Make sure you do not have mmc_over_gpio installed.
Download package or you can run:
opkg install http://dev.xephris.net/openwrt/broadcom-sdhc26/files/kmod-broadcom-sdhc26_2.6.37.6-1_brcm47xx.ipk
And if you want to build it yourself, you can always download the source.
If you want to use wireless (e.g. b43), make sure you mask off the GPIOs appropriately first.
/etc/modules.d/30-b43
b43 gpiomask=0x1
A safe value is 0 (b43 will not touch GPIOs). If you use the same GPIOs and hardware as I do, 0x1 is safe (this enables the wifi LED).
This gpiomask is the GPIOs to ALLOW b43 to use. (This is opposite to the gpiomask for diag, which is the GPIOs to not allow it to use.)
You will need to update /etc/config/broadcom_sdhc26 before it will work, especially if you use different GPIOs than I do. The file should be pretty self-explanatory.
If you just want some extra storage:
option 'enabled' '1'
Then run:
/etc/init.d/broadcom_sdhc26 start
If the above command didn't kill your router, and you also want it to run on boot, also do:
/etc/init.d/broadcom_sdhc26 enable
This will also work with extroot, see the extroot howto
You'll need to have block-mount installed and configured like the howto.
In /etc/config/broadcom_sdhc26:
option 'enabled' '1'
option 'preinit' '1'
Then run:
/etc/init.d/broadcom_sdhc26 disable
Yes, that does say "disable". The script will get run in the preinit phase so you shouldn't run it twice.
Post here to report your success, or if you have any problems.
If someone is interested in making this an official package, please let me know.