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

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

blacklist snd_usb_audio
blacklist usbhid

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:

$ lsusb

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 0x1292 is the USB ID displayed by lsusb command, and 0x04 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.

6 thoughts on “Upgrading iPhone firmware using VMWare and Ubuntu 9.04

  1. Thanks for this post.

    I can confirm that the usbhid “quirks” method did *NOT* work for me, even restarting everything.

    Your module removal and blacklisting steps do work.

    Ubuntu 9.04 (Jaunty)
    VMware Workstation 6.5.3
    Dell Latitude E6500
    iPhone 3GS 32GB

  2. Thanks for this write-up: it was invaluable at digging me out of a hole after I temporarily bricked my iPad trying to do precisely this and upgrade iOS from VMWare. For the record, in more recent kernels, it seems the snd_usb_audio module has been renamed snd-usb-audio.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.