a) USB Hub
b) USB Mouse
c) USB Keyboard
d) Sitecom "W353" USB 802.11n Wireless Card
e) Realtek RTL8188S drivers for 10.4 Intel from the Realtek website
f) Tiger 10.4.11 Combo Updater Image
g) Pacifist (to extract sw from installer images)
First, You only need an interest in this mod if you lost wireless when you removed the internal Wifi card to replace it with a Broadcom CrystalHD card.
Second, Your AppleTV is already moderately hacked and I assume that you already have SSH access, nitoTV installed (including the 'software setup' that adds a bunch of useful/essential stuff back into the OS) and XBMC (of course!). You will be competent at copying files to the right places on an AppleTV.
Third, I'm writing this up after several extended 'fiddling' sessions to get everything working and there has been enough trial and error involved that I probably glossed over a few small details in the write-up, but the core information is here.
Fourth, I know there are other ways to extract stuff from installer files without Pacifist (e.g. install it on another Mac, copy the files, then uninstall) but I have Pacifist and I used it. End of discussion..
Fifth, this exact process isn't going to work with every flavour of WiFi card out there. It works with THIS ONE. End of discussion..
Use Pacifist to extract the RTL8192SUt.kext and "Wireless Network Utility.app" files from the Realtek installer package. Copy the kext to /System/Library/Extensions on the AppleTV and the utility app to /Users/frontrow/Applications. Extract a version of IONetworkingFamily.kext from the 10.4.11 combo updater and copy it to /System/Library/Extensions. Other 10.4.9 and 10.4.10 combo images may also work, but I used 10.4.11.
Set permissions on the files you copied:
sudo chown -R root:wheel /System/Library/Extensions/RTL8192SUt.kext
sudo chmod -R 755 /System/Library/Extensions/RTL8192SUt.kext
sudo chown -R root:wheel /System/Library/Extensions/IONetworkingFamily.kext
sudo chmod -R 755 /System/Library/Extensions/IONetworkingFamily.kext
edit /etc/rc.local to include a new line that loads the RTL8192SUt.kext and IONetworkingFamily.kext file on future reboots. nitoTV will have set Turbo's kextloader as the first line in the file. I've appended the RTL kext to the end of the file and placed the IONetworking kext after other IOXxxxx kexts mid-way in the load list.
Manually load the RTL8192SUt.kext; in the command below -v shows verbose output:
sudo kextload -v /System/Library/Extensions/RTL8192SUt.kext
You should see the kext checked for dependencies and assuming all is good the kext will load and you'll see a long on-screen list of device "personalitites" that are now available to the kernel. The Sitecom W353 USB 80211.n card is burried somewhere in the list. It's worth noting that although this is a wireless USB card the driver adds it as a standard NIC so none of the wireless utilities in the OS that arre designed for official Apple hardware, e.g. the 'airport' cli command, will work.
Using nitoTV's software add-ons function install the "MouseLocator" software ..this is essential for being able to see the mouse on-screen for the rest of the config. Now plug the mouse, keyboard, and USB wireless card into the hub, and plug the hub into the single USB port on the back of the AppleTV.
Using nitoTV open "System Preferences.app" and click on the Network icon. On opening it should announce a new network interface, and depending on what else you've done to your AppleTV recently it will probably be named en2 (by default en0 is fixed ethernet and en1 was the original wifi card). Use the show: drop-down to display network port configurations and make sure en2 is selected. Now drag/drop en2 to the top of the list so "Built-in Ethernet" is below it in the list. If you need to manually set an IP address, configure en2 with the relevant information, otherwise leave it set for DHCP.
Navigate back to the main System Preferences menu. Now go to Accounts > Select 'frontrow' > Login Items. Create a new login item for "Wireless Network Utility.app" in /Users/frontrow/Applications/ and tick the box to 'hide' the application. This ensures the wireless utility is run on startup - if it is not run on startup, the wireless card does not join the network and the wireless interface is not "up" and nothing works. Once done, quit System Preferences. If it doesn't quit (possibly) use the remote to get back.
Using nitoTV open "Wireless Network Utility.app" and create a profile for the WLAN you want to use - use the mouse and keyboard to navigate and enter details as required. You may see an error message about ensuring the device is enabled in Network Control Panel, click okay if you see it. Once you have the profile created the card should join the WLAN and you'll see signal strength and other values. Close the app - if it doesn't quit (probably) use the menu button the on the Apple remote to navigate back to the nitoTV applications menu.
Edit /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist on the AppleTV to swap en2 to en0 (and vice versa). You're looking for the following lines:
and you're going to change it to:
Perform the reverse to the other interface, so en0 becomes en2 and en2 becomes en0. The Apple GUI is hardcoded to see en0 as the internet fixed network interface and if en0 is down it defaults to the wireless interface on en1 (which is missing). By editing this file to make the USB wireless card en0 the Settings > General > Network screen will show the "ethernet" IP address information correctly.
reboot the AppleTV
If all is well you will see the Wireless Network Utility open early in the boot process, and you'll see it join the network you configured a profile for, and then you'll see Apple's fancy opening video sequence. Once the AppleTV GUI has loaded you can check Settings > General > Network and you should see a "fixed network" with IP address information. In the top level of the Apple GUI you should be able to see Yahoo, Flickr, iTMS links etc. listed, i.e. networking is working. If you don't.. something didn't go okay ..start by using the Wireless Utility to ensure the card is active.
For bonus credit: Fiddling with the network configuration appears to bork the original Bonjour/ZeroConf name for the AppleTV and "AppleTV" gets changed to "AppleTV-<MAC_ADDRESS>" for the new en0 interface. This can be reset by opening "System Preferences.app" via nitoTV, clicking on "Sharing" and then entering "AppleTV" as the computer name again. Once that's done you can unplug the Keyboard and Mouse from the hub. On the next reboot you can unplug the hub and insert the wireless card directly into the AppleTV.
So far watching 720p and the limited amount of 1080p content I posess in XBMC streamed from a elderly JBOD NAS has been okay, no network issues and only a small number of "buffering..." instances, which is something I see over Ethernet occasionally as well. Time will tell if it's a successful mod, but for now all appears okay and I'm a happy camper