Enable USB Storage on 2.x
This page is a compilation of bits and pieces of other how-to's in this wiki, mainly
Ben Mackin's USB enabler patch doesn't work with AppleTV V2.0.1
So copy the V2.0
/mach_kernel.prelink to your Mac before updating.
In order to enable mounting external USB devices, you will need
- SSH access to the AppleTV, or its harddisk directly connected to your computer
- Turbo's .kext enabler
- Ben Mackin's kernel patcher.
- Mac OS X Tiger - Intel: extensions for USB mass storage I/O
Enabling USB requires to modify
/mach_kernel.prelink on the AppleTV.
If this file isn't there yet, this means the system partition hasn't been forced to be mounted read/write yet.
Force it read/write with:
ssh frontrow@AppleTV.local sudo -s mount -uw / touch /.readwrite reboot
Turbo's Kext enabler allows to load
.kext system extensions into the system.
- Download turbo_kext_enabler.bin which works for AppleTV 2.0.
- Copy it to the AppleTV in folder
/sbin/and check for the file's attributes:
ssh frontrow@AppleTV.local sudo -s cd /sbin/ ls -l turbo_kext_enabler.bin
- You might want to change them to:
chown root:wheel turbo_kext_enabler.bin chmod 555 turbo_kext_enabler.bin
Turbo's USB patch doesn't work for AppleTV 2.0 yet.
Note: the Take 2 Full Update page seems to indicate that the kernel patcher only works on Intel Macs, and has to be recompiled from source for PPC Macs (or other platforms).
To patch the kernel:
- Download the kernel patcher to your Mac.
- Extract the
kernelpatchfolder from it (double-click).
- Copy the AppleTV's
/mach_kernel.prelinkto your Mac inside that folder.
- Inside the Terminal,
cdinto that folder. Once there:
./do_usb_patch.sh mv mach_kernel.prelink mach_kernel_original.prelink mv mach_kernel_patched.prelink mach_kernel.prelink
- Copy the new
/mach_kernel.prelinkback to the AppleTV.
Extensions for USB drives
The following extensions are needed fo mounting USB drives:
/System/Library/Extensions/IOSCSIArchitectureModelFamily.kext /System/Library/Extensions/IOStorageFamily.kext /System/Library/Extensions/IOUSBMassStorageClass.kext
I got mine from a Mac OS X Tiger install on an Intel machine.
The ones from the Darwin x86 iso won't work: with these, I get the message:
kextload: loaded version 1.5.1 of module com.apple.iokit.IOStorageFamily differs from requested version com.apple.iokit.IOStorageFamily
It seems one can retrieve files from a downloadable combo update. I didn't try that...
Once the files are copied, you can try if they work. Reboot the AppleTV and:
ssh frontrow@AppleTV.local sudo -s /sbin/turbo_kext_enabler.bin /sbin/kextload -v /System/Library/Extensions/IOUSBMassStorageClass.kext
If the loading works fine, plug an USB drive to the AppleTV and check if it is seen by the system:
You should see
/dev/disk0 #: type name size identifier 0: GUID_partition_scheme *37.3 GB disk0 1: EFI 34.0 MB disk0s1 2: Apple_Recovery 400.0 MB disk0s2 3: Apple_HFS OSBoot 900.0 MB disk0s3 4: Apple_HFS Media 35.8 GB disk0s4 /dev/disk1 #: type name size identifier ...
/dev/disk1 is the newly mounted USB drive.
Automatic loading at boot
Automatically loading the USB mass storage extension at boot can be done with the help of
Create or edit the file and add the commands from the following listing:
# rc.local # enable USB /sbin/turbo_kext_enabler.bin /sbin/kextload /System/Library/Extensions/IOUSBMassStorageClass.kext
Restart the AppleTV and try pluging and unplugging an USB drive.
Is it safe to simply remove the USB drive from the AppleTV or do you need to first 'unmount' the drive? --PatentBoy 18:27, 27 March 2008 (CET)
At the time you see the drive with
diskutil, its partitions have not been mounted yet.
You have to mount them with the
Once you've done this, it is not safe to remove the drive without having issued an
Unix does not always directly update the changes on the harddisks: it can buffer the changes and update them when it finds time for it.
Removing a mounted drive can lead to have inconsistent data on it...