Kobo Touch

A few hacks related to the Kobo Touch.

Useful links

Telnet, ftp, ssh

Everything is explained (among others) here.

Keep the wifi active

The issue encountered while playing with telnet, ssh and others over wifi is that the latter always gets disconnected after a few minutes.

One simple solution is to kill the nickel process which is responsible for this disconnection : killall nickel. But this renders the Kobo unusable until nickel is respawn or the Kobo restarted (with the reboot command).

Another solution is to patch the nickel program to remove the automatic disconnect "feature". The interesting file is /usr/local/Kobo/liblibnickel.so.1.0.0. And the function responsible for disconnecting the wifi is WirelessWatchdog::attemptToKill(void). Here is the assembly code given by IDA :

The instruction BL loc_3D42F4 jumps to the fuction WirelessManager::off(bool), exactly what we want to prevent ! We only need to remove the jump to this function by replacing it with NOP (the ARM instruction hex code 0x00000000 is equivalent to NOP). So we open the file in a hexadecimal editor, jump to offset 0x0178B844 and replace the AA 22 B1 EB by 00 00 00 00.

Of course, on a different version of the file, the place to patch can change. The sha1 hash of the file I modified this way is 60cdf6d96c7e05af06360b480517eba23dc09f82 (version 2.3.1). According to the few tests I made, this modification allows the wifi to stay active without any noticeable side effect.

USB network connection

Add to the file /usr/local/Kobo/udev/plug the following lines :

/bin/busybox insmod /drivers/freescale/usb/gadget/arcotg_udc.ko
/bin/busybox insmod /drivers/freescale/usb/gadget/g_ether.ko
ifconfig usb0 192.168.2.2

The file g_ether.ko is may not be available for the freescale chipset. It can be downloaded here. If this comment disappears, it is also available here.

When the Kobo is plugged into the computer, the network interface usb0 is created. It should be configured with the address 192.168.2.1. The Kobo can be accessed at the address 192.168.2.2