- First thing you need is to find which kernel version you have on your device.
- "uname -a" will do the trick. Note: If you need a program like "Terminal Emulator" to run command on your Android device. The output of uname should look something like this "Linux localhost 2.6.36.3-g111d827...." The number "2.6.36.3" is the kernel version number you're looking for. And the "g111d827" is the build number which you will need later when you compile the module because the build number has to be identical between kernel and the module.
- Once you know the version you need, than you have to download the right source code. By the time I wrote this post, http://android.git.kernel.org was hacked and was offline for more than a month. So, I found another alternative repository https://www.codeaurora.org/gitweb/quic/la/?p=kernel/tegra.git;a=heads. The web page listed all source branches in this repository. In this case, I would pick the branch "aosp/android-tegra-2.6.36".
- To clone the source, create a new directory "android-kernel" and than run this command "git clone git://codeaurora.org/kernel/tegra.git -b aosp/android-tegra-2.6.36". I will take awhile to download the source, you can let it run and continue to next step.
- Download the ARM crosscompiler from https://sourcery.mentor.com/sgpp/lite/arm/portal/release1293
- create a directory "compiler" and extract the binary with this command "tar -jvxf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2"
- Since I'm not a Unix programmer and don't know much about cross compiler, if this compiler doesn't work with your Linux version (I'm using Ubuntu 10.4), than you may have to do some research finding the right one.
- Add the compiler bin to your path.
- "export PATH=$PATH:~/android-kernel/compiler/arm-2010q1/bin"
- Once the source is downloaded, you should have "tegra" directory inside "android-kernel". Now, it's time to get your existing kernel configuration from your device. The file is located under "/proc" and called "config.gz". Download it to your linux machine and unzip it using "gunzip config.gz". Now, copy "config" file to "tegra" directory and rename it to ".config". You also need to make some changes to .config file.
- update CONFIG_CROSS_COMPILE to match your cross compiler. In this case, "arm-none-linux-gnueabi-" is the value.
- update CONFIG_LOCAL_VERSION to match your build number. In this case, it is "-g111d827".
- if your .config file has CONFIG_LOCALVERSION_AUTO set to Y like mine, change it to #CONFIG_LOCALVERSION_AUTO is not set
- last but the most important one is to make sure CONFIG_TUN is un-commented and set to m
- Modify the setlocationversion script so it won't display "+" symbol.
- go to tegra directory
- vi scripts/setlocalversion
- locate the following line
- if $short; then
- echo "+"
- change echo "+" to echo ""
- Set the environment properties for the compiler
- export ARCH=arm
- Compile the modules
- go to "tegra" directory
- run "make modules"
- If the compile succeed, you should find a tun.ko file under drivers/net.
- run "strings tun.ko" to make the version is matching your kernel version.
- Now, copy the module file back to your Android device and enjoy OpenVPN.
Tuesday, October 11, 2011
Compiling kernel modules (tun.ko) for Android
If you want to use OpenVPN on your Android device, the first obstacle you have to face is trying to get the right network tunnel module for your phone's kernel. I always have a hard time to get the pre-compile version that matches the kernel I use. (Note: If you don't want to deal with this issue, you can always pick a kernel that comes with the tunnel module.) However, I always like to use the stock kernel which doesn't come with network tunnel module. So, after googling for awhile, I found out that compiling your own kernel module actually is not that difficult. First, I found this tutorial online http://sshrootat.blogspot.com/2011/06/compiling-tunko-for-android-openvpn.html by Sean Crosby. This is a very good tutorial; however, I encountered few issues when I tried to follow instruction. So, I want to share my steps here which are very close to Sean's tutorial but with extra details. Note: these steps are targeted for Tegra device like Motorola Xoom and assume you have basic Linux knowledge and a Linux machine around to compile the source.
Subscribe to:
Post Comments (Atom)

hey im stuck to this step
ReplyDeletethis is mine git
git clone git://codeaurora.org/kernel/msm.git -b aosp/android-msm-2.6.29
wer do i create folder?? in my device or were
how do i clone the kernel
i used android terminal emulator.. but it showing
"git: permission denied"
mine kernel is linux locahost-2.6.29-perf
"perf" is build number
help me pls
I was using a Linux machine to cross compile the Android kernel so I downloaded the kernel source code to the linux machine and setup the correct cross compiler. In my case, since Xoom is using ARM processor so I downloaded and installed the ARM cross compiler. So, I wasn't using my device to compile.
ReplyDeleteim windows user, so dont know that much about linux, could you tel me can i use msysgit windows to clone the kernel..
ReplyDeleteim in middle of this process, after completing i will ask another questions..
too much trickie process
thanks for the fastest reply..
Unfortunately, I don't have any experience in compiling the kernel on windows. The most important piece is the cross compiler. So, if you could find the right cross compiler for windows, I think it may be possible. However, I can't say it for sure because I have never tried it before. And, the process will be very different.
ReplyDeleteI assumed you rooted your device already; otherwise, you can't install your own kernel module. If you have your device rooted but having trouble compiling your own kernel, may be you should consider to download a pre-build kernel that comes with the tunnel module so you don't have to build it. You could save you lot of time and trouble.
.