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[1]: *** [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!
Excellent, this helped me big time. I actually have 5.0.21, and the onlysouce code posted is for 5.0.19, but I am trying anyway just to see if I am lucky..
I already demanded ASUS that they post the source code for the 5.0.21 version
thanks for taking the time to write this
Yea, it really sucks that ASUS publishes the source code with such a delay! But if you only build kernel modules as described, the newer 5.0.21 kernel should load them (with warning) as well. Give it a try.
Hello.
This is great.
I’ve been looking for a way to mount network drives with cifs.ko module and could not find it for download on any site .
I do not have any programming knowledge . I have a asus with kernel 3.4.43 me302C and 5,021 x86 architecture firm .
Would you be so kind as to compile the necessary modules and cifs.ko to have samba network drives ?.
Thanks in advance .
Hi,
you should not need CIFS kernel module to access your windows shares. Have you already tried to use a standard file explorer to access the drives or do you _really_ need to mount them into your file system?
Hi,
Thanks for answering so quickly. My purpose is to read a huge amount of comics stored in a home nas . The problem is that readers of comics for normal android only read local files. I have tried many times but Commiton hangs . That’s why you need to mount a network drive at home to read the files there.
Thx
Hm yea, you are right. CIFS is not supported by kernel, thats sad :/. Unfortunately the recent ASUS kernel source code is still not available at their website, so it must be compiled using the old source code (5.0.19).
I have no time to compile it at the moment. Maybe you can try it yourself? It is not that difficult and you can almost follow the description in my post. Just activate CIFS in kernel config instead of the USB dongle.
If you got any problems, just let me know…
Hi, how may i get wn722n wireless adapter to work in my zenfone 6? thanks!
Hi Pedro,
I dont know this cell phone, but it might work a similar way.
Sources for your phone are available here.
I think the WN722n uses an Atheros chipset. So you should first
try to enable ath9k driver (see this link).
But there might be other drivers missing in the kernel.
Cheers,
Robert
Thanks! But, i have entered Asus Zenfone 6 kernel menuconfig and i have noticed that there was an option under Device Drivers -> Network device suport -> Wireless Lan called “Atheros Wireless Cards”, which i’ve marked (‘M’) and compiled the kernel this way :
make ARCH=x86 modules
Than, it created this file: ath.ko, but, when i make insmod ath.ko, my device reboots… what (certanly) am i doing wrong? How may i know if this driver was loaded?
thanks and sorry my bad english!
Oh, thats bad! A rebooting device sounds like segmentation fault in kernel space. Maybe the atheros drivers depends on other drivers (and/or changes in the kernel image).
Have other settings changed after you activated the modules (M)? It might be necessary to replace the current kernel image, but this could damage your
current build – and I have not done this before, to give you support. -.-
Hi,
Im trying to compile a new kernel to my Zenfone 6, using the code below… Im still so newbie in Linux at all, but thanks God, ive learn fast…
make ARCH=x86 CC=gcc-4.7 -k
It goes ok, but when it finished, i cant find the zImage file that it would be generated…. would it be because of some errors ive got during compile? One of those (several) errors is “undefined reference to ieee80211_frequency_to_channel”… what may i doing wrong?
Threre is a way that i send u my .config file for u to see?
Thank u for all help and God bless u!
“It goes ok” but there are “some errors during compile”? That sounds strange. So compiling is not successful? This would explain the missing bzImage file.
“undefined references” can be caused by different reasons. Recheck the proper gcc version the phone uses (/proc/version).
If you keep on getting those errors, they might be difficult to solve.
Hi,
Sorry my bad english… yeah, it was giving-me some errors, thats why i cant find bzimage… and i found out that “undefined references” is caused, especialy (not in all cases…), when some configuration is not compatible with target hardware…
Now Im gona play around “menuconfigs” in order to enable all funcionalities of this greate Zenfone 6…
Just to know, im compiling those kernels on my own zenfone 6, using this app “Linux on Android” (http://sourceforge.net/projects/linuxonandroid/)… so, im at work now, then i get my phone and start chrooted ubuntu and let it compile the kernel while im working… 😛
Thanks and God bless u!
Hi!
Finaly, i get the wn722n usb adapter work on my zenfone, thanks God! First, i have modified zenfone’s kernel in menuconfig and marked all Atheros’s options there ( i also marked usb adapters options too, just for curiosity and to my Zenfone be able to handle with another adapters…) then i compile this way:
make -f Kernelmakefile ARCH=x86 CC=gcc-4.7 (1)
After compiled, i have flash this kernel on my zenfone and make a script with this:
rmmod bcmdhd
rmmod cfg80211
insmod cfg80211 #the new one, that was created when i compiled in (1)
insmod bcmdhd #the new one, that was created when i compiled in (1)
insmod… (drivers for wn722n, created when i compile in (1)… i dont remenber… :p)
Then i put this script on etc/init.d…
Then, i have to download htc_9271.fw (https://github.com/mdamt/linux-firmware/raw/master/htc_9271.fw) and put in etc/firmware… and, finaly, when i plug my adapter, made ifconfig -a and wlan1 was there, working like a charm!!! I have tested it with my airmon-ng start wlan1, then airodump-ng mon0 and wn722n starts to blink!!!
I wish to thank u, dude! Thanks to this site, i have a little idea on how i may put my usb adapter to work on my Asus Zenfone! Thanks for all answers and ideas u give me! I told u i learn fast (thanks God)!!!
God bless u and your family a lot!!!
Hi, Pedro
It’s great that you got it to work. I get was searching for the same thing which lead me to your post. The only difference is I have a Zenfone 5. I too have TL WN722N. I’m new to all these. Can you help me step by step? Here’s my email: admin@tunap.co
Regards