This was the second time I upgrade firmware on my iPhone, and second time I ran into the same problem. In the middle of the update iTunes reports “Unknown error” and iPhone dies (well, goes into recovery mode, but it is not much help). If that happened to you, don’t panic! To make this geeky combination (Ubuntu 9.04, VMware, iTunes and iPhone software update) work, there’s a little trick you need to do.My setup:
- iPhone 3G 8Gb Sonera
- Ubuntu Linux 9.04 (Jaunty) on Lenovo T61 laptop, kernel 2.6.28-15
- VMware player 2.5.3
- guest OS: WinXP Home SP3 with iTunes 188.8.131.52
goal: upgrading firmware to 3.1.2
I used instructions on Menno Smits’ blog. Here’s the summary:
1. Create a file /etc/modprobe.d/blacklist-usb
sudo vim /etc/modprobe.d/blacklist-usb
2. Add usb modules not to be loaded into that file
I didn’t list ehci_hcd, and it still worked. By the way, USB HID stands for USB Human Interface Device, and blacklisting it might disable your USB mouse and keyboard as well. See a link in the end of the post how to work around it.
3. Unload blacklisted modules manually, in case if they have been loaded already
sudo /sbin/modprobe -r snd_usb_audio
sudo /sbin/modprobe -r usbhid
4. Reload kernel event manager for the changes to take effect
sudo /etc/init.t/udev reload
5. Restart VMware and make sure you also restart Windows in VMware (it took me seveal attempts to figure that this was the problem)
6. Now start iPhone software update in iTunes or “restore and update”, if you already tried without disabling usbhid and got your iPhone into recovery mode.
7. After update is complete, remove the blacklist file and restart kernel event manager again
sudo rm /etc/modprobe.d/blacklist-usb
sudo /etc/init.t/udev reload
If iTunes in WMware do not see iPhone, make sure that it is connected in VMware removable devices menu. Note that during firmware update iPhone might get disconnected – just connect it again using VMware removable devices menu.
I tried to verify suggestion from Will to disable only iPhone in ubuntu, using its USB ID, but don’t actually know if it worked, because I didn’t restart Windows in WMware and restore and update failed. Here’s what I did:
- connected iPhone and checked its USB ID:
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 024: ID 05ac:1292 Apple, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 004: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
- created a file /etc/modprobe.d/usbhid
sudo vim /etc/modprobe.d/usbhid
with the following content
options usbhid quirks=0×05ac:0×1292:0×04
where 0×1292 is the USB ID displayed by lsusb command, and 0×04 is the instruction to ignore device with specified USB ID.
- did everything as isteps 1-7 except that I didn’t blacklist usbhid and didn’t unload it manually.
It would be interesting to know if anyone succeeds with iPhone firmware update on Ubuntu without blacklisting usbhid module completely.