Update 2: Borders Australia have now released an SD card image for upgrading under Linux. Well done Borders AU!
I recently got a Kobo eReader from Borders Australia and am enjoying it, it’s light and small enough to fit in the inside pocket of one of my jackets and the screen is great. From a Linux point of view using it with Calibre works nicely (at least after upgrading to a more recent version than shipped with Kubuntu 10.04), I’ve even got a hack to get the LWN weekly edition onto it, pending a proper RSS feed of weekly editions from LWN themselves.
However, there has been one fly in the ointment that I’ve noticed, it currently is not possible to override the font size settings generated by Calibre (or other eBook sources) and sometimes that could be really handy. Fortunately a new firmware has just been released (1.4) which fixes that (amongst other things). The supported methods of upgrading are either (a) using the Borders application under Windows or MacOSX or (b) an SD card upgrade – in Canada only.
So how to upgrade your firmware under Linux ? Well the short answer is that (as far as I can tell) you can’t. I tried asking Kobo themselves if it was possible to get a copy of the SD card image and got a quick response saying:
At this time we don’t support Linx(sic) with the Kobo eReader.
I’ve followed that up pointing out I don’t want support, I just want the image file. I’ve also posted on the Borders Australia announcement of the firmware asking for the SD card image too, we’ll see if that gets a response next week. But being a hacker at heart I wanted to see if I could figure out how far I could get on my own. 🙂
First stop was this interesting post on MobileRead called “Behind the Scenes – The Kobo eReader Firmware Upgrade” which goes into some detail about the process (an entertaining read too – for instance there’s a section where they say they warn Adobe Digital Editions users that the upgrade will remove the DRM permissions they’ve got, saying “If you are a Calibre user, insert smirk here”). It says:
The wizard downloads the firmware update from our servers. It puts a zip file in your temporary folder. The .zip contains three files that weâ€™re going to update your device with
Great – so if we can get that file then we’ve got the essentials of the upgrade (if not the support tools). Now whilst I don’t have Windows here I do have the Codeweavers Crossover Professional WINE version (a commercially supported WINE from people who contribute back to the WINE project) and so I grabbed the installation executable from the Borders Australia site and ran it under WINE – worked a treat, I could install it, run it and login to the Borders website with it. Downside is that (of course) software under Wine can’t directly access USB devices, so on a hunch I mounted the Kobo eReader under Linux and created a symlink to it called drive_d (to match the drive_c that Crossover Office created). Bingo – it recognised it and even told me there was an upgrade available!
So I followed the bouncing ball, er, instructions and soon saw it downloading the firmware update which it copied into (what it thought was) \windows\temp as
kobo-upgrade-1.4.zip. Copying elsewhere and unzip’ing it revealed the aforesaid three files:
-rw------- 1 chris chris 51330048 2010-06-28 12:02 fs.img -rwxr-xr-x 1 chris chris 167304 2010-06-28 11:49 u-boot.bin-eb600em -rwxr-xr-x 1 chris chris 1549184 2010-06-28 11:49 uImage-eb600em
Now from my experience with my OpenMOKO phone I can immediately see that it’s got a boot loader (
u-boot.bin-eb600em), a Linux kernel (
uImage-eb600em, strings reveals it to be Linux-220.127.116.11-ntx600-v0.82) and a root filesystem (
fs.img which file identifies as a VMS Alpha executable, but I don’t believe it).
Now I wasn’t brave enough to try and upgrade the Kobo under Wine – and as it turns out it doesn’t look to be possible because when you put the device into its upgrade mode (helpfully described in the documentation as the “Two-Finger + Table Edge Salute”) it stops appearing as a USB storage gadget but instead appears (according to lsusb) as:
Bus 002 Device 011: ID 5345:1234 Owon PDS6062T Oscilloscope
Er, not quite what I was expecting (and updating the USB ID’s with “
update-usbids” didn’t change anything). It also makes the kernel whinge:
[876105.561189] usb 2-5: config 1 interface 0 altsetting 0 bulk endpoint 0x81 has invalid maxpacket 64
[876105.561194] usb 2-5: config 1 interface 0 altsetting 0 bulk endpoint 0x3 has invalid maxpacket 64
I was wondering, given the resemblance between the files in the Kobo zip file and those used by the OpenMOKO Neo phone that I could probe for the Kobo with the
dfu-util used for flashing the phone, but sadly no joy..
# dfu-util -d 5345:1234 -l dfu-util - (C) 2007-2008 by OpenMoko Inc. This program is Free Software and has ABSOLUTELY NO WARRANTY #
With that not working I thought I’d try putting the 3 files onto an SD card (I had a 512MB one spare) formatted as FAT16 and see what would happen then. First of all I tried it with it as a single partition but it didn’t take any notice of that, so then I tried it as a single device (you need the -I flag to mkdosfs) but no joy with that either (though at least when running normally in that mode it did spot the card being inserted and removed).
Once the Kobo is in its upgrade mode the only way to get it out is to poke it in the back with a paperclip, er, upgrade tool.. 😉 That forces a reset.
So that’s about it for me, I’ve exhausted all the means I can think of, looks like until Kobo do release an SD upgrade image we’re all pretty much stuck. 🙁
Update #1 Found that there is a beta release of the Kobo Desktop client for Linux out, the URL and some instructions are on the MobileRead forum. DO NOT CONTACT KOBO TECH SUPPORT ABOUT THIS SOFTWARE. It appears to believe it has the ability to update the firmware. 🙂
Update #2 If you want to grab the firmware itself the URL it requests is http://download.kobobooks.com/desktop/ereaderupgrade1_4/kobo-upgrade-1.4.zip
Update #3 I didn’t dare
strace the application when it was doing the upgrade, but
lsof shows it has opened
/dev/bus/usb/002/021, which matches it in lsusb (or at least the Owon PDS6062T Oscilloscope it masquerades as).
Update #4 The update worked, completely painless! 🙂