Hace unos días descubrí con desagrado que mi iPod Touch (y por tanto el iPhone) no recarga la batería al conectarlo en Linux. Todo el problema es que hay que enviar una secuencia al iPod / iPhone cuando este se conecta al USB, así como hacer una pequeña modificación al Kernel de linux para que no suspenda el dispositivo y pueda cargar la batería sin problema.
Para que el iPod Touch / iPhone pueda recargarse en linux necesitamos al menos la versión 2.6.22 del Kernel, Ubuntu 7.10 (Gusty Gibson) ya incluye esta versión. Luego necesitamos bajar el iPhone Module, el modulo del kernel que se encargará de enviar los datos apropiados al iPhone.
Si tienes un iPod Touch, necesitas modificar el valor de #define IPHONE
de 0x1290
a 0x1291
. Luego para ambos iPhone y iPod hay que agregar la linea de código:
udev->autosuspend_disabled = 1;
Esto es para que el Kernel no suspenda el dispositivo. Yo agregue esta instrucción en la función iphone_probe
en iphone.c
, que al final quedó así:
[sourcecode language=’cpp’]static int iphone_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
struct usb_device *udev = interface_to_usbdev(intf);
if (udev->actconfig->desc.bConfigurationValue == 3) {
dbg(&udev->dev, “Configuration changed”);
return -ENODEV;
}
/* turn the power on */
select_configuration(udev);
udev->autosuspend_disabled = 1;
/* we don’t really want to bind to the device, userspace programs can
* handle the syncing just fine, so get outta here. */
return -ENODEV;
}[/sourcecode]
Para instalar este modulo (una vez modificado) debes ejecutar:
make -C /lib/modules/2.6.22-14-generic/build M=`pwd` modules
Sino hay errores, con esto debería ser todo lo que debes instalar. En mi caso, ahora ya no tengo que arrancar windows para mantener con carga mi iPod Touch.
Etiquetas: apple, gadgets, gnu/linux, ubuntu, iphone, ipod touch