IPod to iPod
From wikiPodLinux
- The title of this article should be iPod to iPod. The initial letter is capitalized due to technical limitations.
This page aims to provide extensive instructions on how to set up an elligible iPod, so that it can connect directly to another iPod. This connection is direct in that two iPods will be attached via. a single cable, thus eliminating the necessity for an intermediary computer. There are many reasons that one would want to achieve this. They include:
- Browsing and playing music from another iPod.
- Transferring content between two iPods.
- Installing iPodLinux from one iPod to another.
| Table of contents |
|
3.1 Patching the Kernel |
Disclaimer
Don't steal music
This module is only meant for legitimately transferring music and other content. It is not meant for violating copyright. If you are looking for music whose distribution is encouraged by its copyright holder, you may be interested in something like Creative Commons Audio (http://creativecommons.org/audio/).
This is experimental software
What currently works is merely a proof-of-concept and probably has no real practical value. The speed is less than to be desired (~200 kBps at best), and the software is not entirely bug free. Like the other unsupported software, use this with discretion and don't complain if it mucks up your iPod.
Current iPod Requirements
Requirements for Local iPod
The Local iPod, or LiP, is the iPod running linux and this module.
- A first, second, or third generation iPod
- Modified Experimental Kernel and kernel modules (see below)
- Userland must include the following: mount, umount, modprobe, rmmod, mknod, minix shell.
- Podzilla2 with podtopod module
- Browser module, for browsing file contents of remote iPod
- MPD module, optional
Requirements for Remote iPod
The remote iPod, or RiP, is the iPod to which we will be connecting.
- Must be another third generation or older iPod. (If the current firewire driver is further stabilized, any iPod with a firewire interface--so Video, Nano, and Shuffle iPods are excluded--should be able to work)
- Must be FAT (windows) formatted, and the /iPod_Control directory must exist on the second partition
Building
The following instructions are roughly sketched out and presume that you know what you're doing.
Patching the Kernel
We're going to use the Experimental Kernel. This has been tested and works with version linux-2.4.32-ipod2 of that kernel, but it should probably work with newer versions as well.
- First, download and follow all the instructions through the Setup for building the experimental kernel as described on the Experimental Kernel page. Stop after applying the patches listed there and before copying the default configuration file.
- Here we need to apply two patches. The first will modify the kernel configuration to renable module support, the SCSI and Firewire subsystems, and the specific Firewire driver for the iPod (tsb43aa82). The second will make the memory manager default to the "improved" page_alloc2 page allocator. Apply the following two patches found in module archive (note the -p0 rather than -p1):
% cd linux-2.4.32-ipod2 % patch -p0 < [path to podzilla2 root]/modules/podtopod/patches/iPL_2.4.32-ipod2_enable_scsi.patch % patch -p0 < [path to podzilla2 root]/modules/podtopod/patches/iPL_2.4.32-ipod2_use_page_alloc2.patch
- Continue building the kernel as given on the Experimental Kernel page. Start where you left off, by copying the default configuration file.
Userland modifications
This needs to be more properly described, but there are a number of programs that need to be included in the userland/busybox. See the local iPod requirements listed above for a general description.
Install the Podtopod module
- Download podtopod.tar.gz from Special:Module/podtopod
- Extract it:
% cd podzilla2/modules % tar xzvf [download location]/podtopod.tar.gz
Patch the MPDC Module
The MPDC module needs to be patched if you want to transfer music from the local iPod, or if you want music added to the local iPod show up in the local music browser.
After extracting the podtopod module to the module directory:
% cd podzilla2/modules % patch -p0 < podtopod/patches/mpdc.patch
Installation
Installing the kernel and kernel modules
- Install the 2.4.32-ipod2 kernel using your favorite method. I recommend using Loader 2.
- Install the new kernel modules. From the base directory where you compiled your kernel:
> INSTALL_MOD_PATH=/mnt/ipod_root make modules_install
Where /mnt/ipod_root should be replaced with the absolute path your iPod's root partiton
Create rip mount location
By default you probably want to use /rip, so create that directory on your iPod's root partition:mkdir /mnt/ipod_root/rip
Modify /etc/rc
Ensure your iPod's /etc/rc reflects these settings:
- Create devfs blockfiles. This supports mounting a single iPod with three partitions. In most cases, you will only need three, but if for some reason you want more then expand as necessary:
mknod /dev/sda b 8 0 mknod /dev/sda1 b 8 1 mknod /dev/sda2 b 8 2 mknod /dev/sda3 b 8 3
- Make sure the music/data partition is mounted as read-write ("rw" instead of "ro") at /mnt:
mount -t vfat -o rw /dev/hda2 /mnt
- Load the proper kernel modules (these must be loaded in this order):
modprobe ieee1394 modprobe tsb43aa82 modprobe scsi_mod modprobe sd_mod modprobe sbp2
- Make sure eth1394 is not being loaded:
# modprobe eth1394
- Start up the iPod to make sure all the modules are loaded are loaded without errors. If you get any unresolved symbol errors then either you are not loading the modules in the proper order or your modules and kernel are not in sync and you should rebuild and install them both together.
Install the Podzilla2 with updated modules
This is no different than a normal Podzilla2 build/install.
- Recompile everything for the iPod:
% make IPOD=1
- Install everything to your ipod (mounted presumably as /mnt/ipod_root):
% make install DESTDIR=/mnt/ipod_root IPOD=1
Usage
If everything is set up properly, the system should (hopefully) be rather intuitive to use. A basic scenario might go like this:
- Boot up the first iPod (the Local iPod) into iPodLinux.
- Boot up the second iPod (the Remote iPod) into diskmode or the standard Apple firmware
- Physically connect the two iPods with a Firewire-to-Firewire or Firewire-to-DockConnector cable
- At this point, the remote iPod should display the "Do not disconnect" message and symbol. If this doesn't happen, something went wrong.
- The local iPod will display an icon in the status bar indicating another iPod is connected.
- The "Remote iPod" submenu will appear on the root-level Podzilla menu under Music.
- Browse the local music hierarchy ("/Music") or the remote music hierarchy ("/Remote iPod/Music"), and upon finding an artist, album, or song you would like to transfer, hold down the [action] button until the transfer menu appears.
- Select "transfer" to transfer these items to the other iPod. Press [menu] when it finishes (or earlier to abort).
- Unmount the RiP from the Remote iPod menu. The icon should change.
- Select Eject from the same menu. The RiP should say "OK to disconnect" or return to the Apple firmware. Physically disconnect the iPods and click [OK] when finished on the LiP
Note that there will be delays at various points throughout this as background processes occur (mounting, accessing the iTunesDB, etc). Be patient. Future versions will hopefully have some dialog or progress bar to indicate this delay
Configuring the Module
Currently there are two module configuration paramters: automount and read remote music. When automount is enabled, the system will automatically mount the data partition on another iPod when it is connected. When an iPod is mounted, its music catalog (iTunesDB) will be read as long as read remote music is enabled. It probably best to enable both of these options.
Also, there is a problem at the moment with the header widget, since the code has recently been changed. Under the "/Settings/Appearance" menu, be sure the header widget is set to display every second and that it only displays on one side.
Physical Connection
You're probably curious about how to actually connect iPods together. This depends on the generation iPod you are using. First and Second generation iPods have 6-pin Firewire ports. All other iPods (except Shuffle) have Dock Connector ports. Given that, you can try the following:
- Firewire to Firewire
- use a standard 6-pin to 6-pin Firewire cable
- Firewire to Dock Connector
- use Apple's provided Firewire-to-Dock Connetor cable (as seen in the picture above)
- Dock Connector to Dock Connector (Firewire)
- use Apple's provided Firewire-to-Dock Connector cable plus a device such as SendStation's Pocket Dock (http://www.sendstation.com/us/products/pocketdock/combo.html)
- Dock Connector to Dock Connector (USB)
- use Apple's provided USB-to-Dock Connector cable plus a device such as SendStation's Pocket Dock (http://www.sendstation.com/us/products/pocketdock/combo.html). This, of course, will only work once USB is implemented.
To Do
- Firewire for first, second, and third generation iPods is already supported by the TSB43AA82A driver, but this driver only works when connecting to other first, second, or third generation iPods for some reason. When connecting to newer iPods with Firewire it still crashes unexpectedly. Further work could be done here to figure out why this happens and to stabilize the driver.
- Firewire for all other Firewire-enabled iPods is unsupported as it is implemented by the effectively undocumented Portal Player chips.
- USB for all generation iPods is currently unsupported as it too is implemented by the Portal Player chips.
- userland additions, such as ports of fdisk, mke2fs, and make_fw (among other things) to the iPod itself could allow one to theoretically install iPodLinux from one iPod to another. Whether this would efficiently work in reality, however, is another matter.
- an eject command, that works with SCSI devices would be superior to the current method employed by the interface of unloading and reloading the sbp2 module
- Non-iPod Devices, such as the iriver or Archos jukebox could be integrated as other potential remote "ipod" devices
- additions/bugfixes to the current module:
- Capacity checking: verify there is enough space to transfer before doing so
- File transferring: allow transferring files through the file browser
- Info: display information about remote iPod, such as generation, size (used/free), partitions, number of albums/artists/songs/videos/images, etc.
- Playlists: support for transferring playlists
- Other (non-music) content: add support for transferring pictures, videos, etc.
- Support for Mac (HFS+) formatted iPods and more intelligent support for other partitions on WinPods
Credits
The module uses a slightly modified libipod (http://libipod.sourceforge.net/) for interfacing with the iTunesDB files.

