Recently I bought my first android tablet – an ASUS MeMo FHD 10 (ME302C)! This one:
It is pretty cool and much fun working with this device – as long as you have got an internet connection. ;-) But because I thought there would be free open WLAN spots all over the world and – in case of emergency – I could use my UMTS stick, I only bought the cheap wifi-only version of the tablet (~200 EUR).
So today I wanted to prepare the device to be used with my UMTS stick. It’s branded by “Vodafone” and uses a HUAWEI K3715 chipset. This one:
Remembering my experiences using this stick with linux I though it would be an easy job. So I got my USB On-The-Go (OTG) cable to connected the stick with the pad…
After plugging in the UMTS stick android does ….. nothing….. Well, it does recognize the stick – as a mass storage class (MSC) device…
…. but this does not not help us establishing our internet connection :-(. The mass storage device is the internal “CDROM” drive that contains the windows drivers and software for the stick that can be used for auto-configuration. Sadly there is no android software included.
I though android might not know which software to use with UMTS sticks so I had a look in the Google Play Store for a nice applet. And I found PPP Widget (Play Store), an app that uses raw Point-to-Point (PPP) Protocol to establish GSM / UMTS connections. I plugged off the stick and installed the app. It says “No modem found”. So I replugged the device and waited for success ;-)
(By the way: PPP Widget (and other UMTS apps) need root access. So you have to root your tablet first. This is not part of this tutorial. If you have problems rooting your Asus MeMo Pad FHD 10, let me know.)
The display switches from “No modem found” to “No driver found” (german above). Meaning PPP Widget does recognize that a modem (UMTS stick) device has been plugged in. But it does not know how to handle it.
Examining the configuration of PPP Widget and knowing about using this stick with linux, it needs a USB serial converter to be addressed properly. That means there should be a /dev/ttyUSB device available on the android tablet after plugging in the UMTS stick. Let’s have a look…
Sadly there is no /dev/ttyUSB device present. Let’s look into the kernel protocol using “dmesg” command wether the device has been identified correctly.
There it is. The stick has been found but that’s all! No kernel driver has been attached to the device. It seems that ASUS did not include any USB serial or USB modem drivers within its firmware. So we need to compile a driver on our own and add it to the android kernel.
At first we need to download the kernel sources from the ASUS Homepage. Drivers for the ASUS MeMo Pad FullHD 10 can be found HERE. In my case – using Version 5.0.16 WW – I need to download “ASUS MEMo Pad FHD 10 Kernel Source Code for Android 4.3 JB OS (V5.0.16)“.
Before configuring the kernel, we need to prepare our system. I am using debian 64bit. The ASUS MeMo Pad has got an intel atom processor that is 32bit. So I need to add x86 support to my system:
root@zentaur:~# dpkg --add-architecture i386
(I you have got an ARM tablet – you need to fetch the tools that are suitable for your processor architecture.)
After that the GNU compiler – GCC (multilib) – can be installed. Because I want to use the same GCC version my android kernel has been compiled with, I check the /proc/version output on the tablet first.
The ASUS MeMo FHD 10 (v5.0.16) WW has got a kernel version 3.4.43 that has been compiled using GCC version 4.7. So I am going to install the GCC version 4.7 as well.
root@zentaur:~# apt-get install gcc-4.7-multilib
Debian fetches all dependencies on its own, so the system will be prepared after this operation. The next step is reconfiguring the kernel using the setting ASUS used to build the firmware. The ASUS MeMo Pad’s kernel configuration is called “i386_ctp_defconfig”. Thats why we run this config command while setting the architecture to x86 and the compiler to GCC version 4.7.
root@zentaur:~/kernel-2632b25# make ARCH=x86 CC=gcc-4.7 i386_ctp_defconfig # # configuration written to .config #
After that we can run the menuconfig command to set up the kernel modules.
root@zentaur:~/kernel-2632b25# make ARCH=x86 CC=gcc-4.7 menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/lxdialog/checklist.o HOSTCC scripts/kconfig/lxdialog/inputbox.o HOSTCC scripts/kconfig/lxdialog/menubox.o HOSTCC scripts/kconfig/lxdialog/textbox.o HOSTCC scripts/kconfig/lxdialog/util.o HOSTCC scripts/kconfig/lxdialog/yesno.o HOSTCC scripts/kconfig/mconf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/mconf scripts/kconfig/mconf Kconfig drivers/media/video/Kconfig:351: can't open file "../modules/camera/Kconfig" make: *** [menuconfig] Error 1 make: *** [menuconfig] Error 2
But…whoops. Something went wrong. A file is missing within the delivered kernel sources. In this case we don’t care, because we only want to add modules to the kernel and do not need the kernel image or the camera. So we edit the file “drivers/media/video/Kconfig” and comment the including out:
# if EXTERNAL_CAMERA # source "../modules/camera/Kconfig" # endif
After that, we run the “menuconfig” command once more. This time we entered the kernel configuration ncurses menu. To build the modules that are necessary for USB serial and GSM modem support, change the following settings:
1) Local version – append to kernel release (General setup —> )
To make the modules load properly in our existing kernel, it is a good decision to name the modules the same way our existing kernel is named. In my case (as you can see above) the kernel is called 3.4.43-00001-g2632b25. So I am going to add this appendix here.
2) Kernel support for your tablet
Chose the correct product name of your tablet (if existent). In my case the ASUS MeMo Pad FullHD 10 is called ME302C.
3) USB Serial Converter support (Device Drivers —> USB Support —>)
To make the /dev/ttyUSB devices available we need to enable USB Serial support.
4) USB driver for GSM and CDMA modems (—> USB Serial Converter support)
To make the kernel recognize USB modems as serial devices, we need to enable this option as well.
After that the kernel configuration can be saved and the modules compiled using the following command:
root@zentaur:~/kernel-2632b25# make ARCH=x86 CC=gcc-4.7 modules
The kernel modules will now compile. In result there will be three files that are necessary for USB UMTS stick support. The files are located in directory drivers/usb/serial and are called “usbserial.ko”, “usb_wwan.ko” and “option.ko”. Use your favorite method (for example owncloud) to transfer those files onto your tablet.
The next step is loading those new modules into the existing android kernel. You will need root access to your tablet once more. Use the insmod command and append the module files to make the kernel load them. (You can get my precompiled kernel drivers HERE. They are ONLY for ASUS MeMo Pad FullHD 10 – Firmware Version 5.0.16 – Intel ATOM – Do not use with ARM!)
Now the kernel should be capable to address USB serial devices so we are goint to plug in the UTMS stick again and watch PPP Widget for further information…..
And indeed, PPP Widget goes further and is “scanning for port” and “setting up the modem”, BUT then the device loses power and android tells us the following:
It is an “overcurrent on USB port” warning and it occurs no matter what battery level is present (event with AC connected). This error usually occurs if the USB device is broken or consumes too much power. Because my stick is working it must be the power problem.
I could use an active USB hub now, but I wanted to achive this task without additional power supplies. So I tried a passive USB hub just for experimentation and there was no “overcurrent warning” any more – very strange.
After replugging the device PPP Widget shows the following result:
This time it says “disconnected”, recognizes the UTMS stick properly and offers to establish a connection!! We may now configure our mobile internet settings (PIN, APN, …). Afterwards we can try to connect using the stick by pressing the button.
Success!!! The Widget says “connected” and the sticks blue light indicates HSDPA connection. We are able to use the browser and any other online application!