[LG Revolution] rickt:
hello all -- ive mostly been a lurker (been too busy), but i finally found some time to try and get the ipsec vpn working on my stock-but-rooted LG Revo. despite some ardent googling, i couldn't find a working tun.ko that would work with vpc/VPN Connections. so i decided to compile my own.

i figure since there's certainly nothing in the LG Revo boards here specific to compiling tun.ko for the LG Revo, i'd start this thread and document my steps along the way. i figure other board users can use for reference etc. hope it's ok mods/admins! :)

the short version/TL;DR:

i have compiled my own tun.ko for my stock/rooted LG Revolution. i have the correct kernel version (etc) but am stuck because i dont seem to be able to compile ARMv7, only ARMv6. this is the error i receive when i try to insmod:

tun: version magic '2.6.32.9-perf preempt mod_unload ARMv6 ' should be '2.6.32.9-perf preempt mod_unload ARMv7 '

basically i need to compile it for ARMv7 not ARMv6. i don't know how.

the long version, aka the steps i took:

starting in a nice clean folder, download the linux kernel src specific to the version of the kernel on my rooted stock LG Revo. i obtained this earlier (you can check via Settings -> About Phone -> Kernel version. if you have a stock (rooted or not) LG Revolution it will be: 2.6.32.9-perf.

$ mkdir -p $HOME/tmp/lgrevosrc
$ export LGREVOSRC=$HOME/tmp/lgrevosrc
$ cd $LGREVOSRC
$ wget -q http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.9.tar.bz2
$ wget -q http://dl.google.com/android/android-sdk_r10-linux_x86.tgz
$ wget -q http://dl.google.com/android/ndk/android-ndk-r5b-linux-x86.tar.bz2
$ tar xjf linux-2.6.32.9.tar.bz2
$ tar xzf android-sdk_r10-linux_x86.tgz
$ tar xjf android-ndk-r5b-linux-x86.tar.bz2

earlier, i copied the config file for the kernel specific to my LG Revo by using Root Explorer and copying the /proc/config.gz file. i now copy this into my linux kernel src tree, being sure to gzunzip it first and to copy it to the src folder as ".config", not "config".

$ cd $LGREVOSRC/linux-2.6.32.9
$ gzip -d ~rickt/tmp/from_my_lgrevo/config.gz
$ cp ~rickt/tmp/from_my_lgrevo/config .config

now we have to edit the .config file and add the tun module so it will be compiled. i added the following line to the .config file:

CONFIG_TUN=m

now, we compile the modules, being sure to set the environment variables for the architecture we NEED, not the one we're compiling on:

$ export ARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ export PATH=$PATH:$LGREVOSRC/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin
$ make modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/basic/hash
HOSTCC scripts/kconfig/conf.o

< snipped, for brevity >

LD [M] net/sched/cls_flow.ko
CC net/sched/sch_dsmark.mod.o
LD [M] net/sched/sch_dsmark.ko
$

let make sure the tun.ko module was compiled, and we'll see what type of arch it was compiled for:

$ find . -name tun.ko
./drivers/net/tun.ko
$ ls -l ./drivers/net/tun.ko
-rw-r--r-- 1 root root 190705 Aug 19 06:35 ./drivers/net/tun.ko
$ file ./drivers/net/tun.ko
./drivers/net/tun.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
$ strings ./drivers/net/tun.ko | grep -i arm
vermagic=2.6.32.9-perf preempt mod_unload ARMv6

BOOM! note the ARMv6. this is important, because when i try to insert the module into the kernel on my android (after copying it over, obviously) i get:

# insmod tun.ko
insmod: init_module 'tun.ko' failed (Exec format error)

ok, so i start nosing around in the logs to see what i can see, and i see:

<3>[122130.240509] tun: version magic '2.6.32.9-perf preempt mod_unload ARMv6 ' should be '2.6.32.9-perf preempt mod_unload ARMv7 '

so... i guess this was a long and drawn-out way of saying that i have a great desire to have a tun.ko for our beloved LG Revolution, but i'm not sure how to have gcc on a linux box cross-compile for ARMv7, not ARMv6.

anyone? bueller?