[Q] Compiling drivers for stock android - Android Q&A, Help & Troubleshooting

Hi all,
I would like to know how to go about compiling drivers for the stock android OS, specifically, usb-serial driver for cp210x. The kernel version in the development tablet is 3.0.8+ and I have compiled an "example" module. When I "insmod" the module in the tab dmesg says
example : disagrees about version of symbol module_layout
I have checked module_layout in the "stock" module and compiled module and equated them using hex editor, but it failed with the same error.
Can anyone suggest me how to go remove this error?

Related

[Q] Need help with compiling modules for Dell Streak Froyo stock kernel

Need help with compiling modules for Dell Streak kernel.
Because i could not find cifs.ko module for mounting network shares for Dell Streak stock Froyo 318, i decided to make it on my own.
I did not have any clue how can it be done, but with lot of googling and reading forum posts on xda and modaco, i got vague idea how i can do it.
There was lots of trial-and-error attempts until i learned how to use all comands and tools, and here is final list of things id did to make it:
Already had VMWare workstation with Ubuntu 10.10 instalation, i got Android Froyo source tree from net, replaced kernel with Dell Streak 3.09 kernel (from opensource.dell.com) which is also Froyo, i think, and is closest to my kernel version (318).
Got toolchains from codesourcery.com
Extracted my phone config from /proc/config.gz, renamed to .config, uncommented and changed option for CONFIG_CIFS=m. Did same for tun.ko module which i did not need, but just for comparison. Placed .config file in kernel root.
Did comand:
Code:
make ARCH=arm CROSS_COMPILE=/path-to-toolchains/bin/arm-none-eabi- modules
after confirming some options (irellevant to this), and some compiling in terminal, all went ok without errors and did produce modules in fs/cifs and drivers/net
i also did some debugging to reduce filesize, bud also had tried module without debugging with same result (see below)
transferred modules to my phone in /system/lib/modules and tried to load them via insmod.
loaded tun.ko without problem (i dunno whteher is working because i have no means to try it and have no need for it). i compiled it just to see whether it will be loaded in phone kernel. it DID load without error messages.
when tried to load cifs.ko via insmod cifs.ko, got this error message:
Code:
insmod: init_module 'cifs.ko' failed (no such file or directory)
dmesg provided following errors:
Code:
cifs: Unknown symbol slow_work_register_user
cifs: Unknown symbol slow_work_enqueue
found in similar thread for Galaky Tab that i need to compile slow_work module and load it before because of that dependancies, Found another thread with instructions for compiling slow-work, followed them:
copied all slow-work files in cifs, Remove the calls to round_jiffies in fs/cifs/slow-work.c: round_jiffies(jiffies + SLOW_WORK_CULL_TIMEOUT)); changed to
jiffies + SLOW_WORK_CULL_TIMEOUT); AND round_jiffies(jiffies + SLOW_WORK_OOM_TIMEOUT)); TO jiffies + SLOW_WORK_OOM_TIMEOUT);
edited fs/cifs/Makefile and added slow-work.o to the obj-$(CONFIG_CIFS) += cifs.o line: obj-$(CONFIG_CIFS) += cifs.o slow-work.o.
Ran make command from above, got both modules (cifs.ko and slow-work.ko) in fs/cifs directory without errors.
Copied them to phone, done insmod and got error for slow-work:
Code:
insmod: init_module 'slow-work.ko' failed (no such file or directory)
dmesg provided following message:
Code:
slow_work: module licese "unspecified" taints kernel
slow_work: Unknown symbol mutex_lock_nested
Now i'm clueless (like i haven't been all the time :-D).
All modules compiled without errors, tun.ko will load, cifs.ko apparently need slow-work to run, slow-work compiled, but can't load.
So, if somebody can help, or point me where is possible error, i will be very grateful.
UPDATE:
Found references for missing slow_work modules in cifsfs.c and misc.c, deleted them and ran make.
produced cifs.ko without error.
LOADED cifs in phone without error!!!! With lsmod it shows that module is loaded!
BUT, does not work! Cannot mount anything. When tried with cifsmanager or manually via terminal get error message "No such device" which points that there is no valid cifs.ko module in kernel.
So, module is produced and loaded in phone without errors, BUT DOES NOT WORK. It looks like Streak Froyo need slow-work module after all...
I'm desperate, please if somebody did compiling cifs.ko for Streak, or use cifs mounting with found module, share your thoughts and experiences.
Thanks everybody.
CIFS and Slow worked - compiled
I was able to successfully compile both the slow work module and the CIFS module for the most recent 4G EVO. Took me a couple of days, but I think I could walk you through the specifics fairly easily. Let me know if you want the details.
of course I do!
please write your way.
Sent from my Dell Streak using XDA Premium App
dmandic, did you ever get this working? I went through similar pains doing this for the xperia arc, and did manage to get it working. I have some thoughts about your situation if you want to discuss further.
please, any help is appreciated.
i'm open to any kind of suggestions.
write your thoughts here.
Sent from my Dell Streak using XDA Premium App
Hmm. I originally stumbled upon this thread because I was searching for others who compiled a cifs.ko against a kernel with version "2.6.32.9-perf" (from the android about phone menu), hoping to avoid going through figuring out how to do this. I saw that others with the Dell Streak also had this kernel, and then I found your thread.
Anyway, I was thinking that maybe the kernel you got from the dell website had a slightly different version than your phone (because your phone is 3.18 vs 3.09), and that's why you're getting runtime symbol errors. I thought maybe there's a chance you needed exactly 2.6.32.9-perf and I could offer you mine. However, I downloaded the dell 3.09 kernel source and found that it's also 2.6.32.9-perf... so I guess that idea's out the window. (By the way, is this what your phone shows?)
Well just for kicks, I actually compiled slow-work and cifs from the dell kernel and loaded it on my xperia arc phone and they worked (was able to use CIFSManager).
It's a long shot but just in case there's something about the way you're compiling them, I attached them here - give it a try. [Edit: Duh, I forgot I need your .config file. Email it to me and I'll re-post these]
I tried out the Xperia files from the thread [DEV]TUN, CIFS modules files on my Streak 5. It did not go well, these are my messages from dmesg.
Code:
<4>[ 341.187030] tun: Unknown symbol dynamic_debug_enabled
<4>[ 341.190600] tun: Unknown symbol dynamic_debug_enabled2
<4>[ 341.219513] slow_work: module license 'unspecified' taints kernel.
<4>[ 341.220411] slow_work: Unknown symbol mutex_lock
<4>[ 341.638099] cifs: Unknown symbol mem_section
<4>[ 341.638397] cifs: Unknown symbol mutex_lock
<4>[ 341.641609] cifs: Unknown symbol slow_work_register_user
<4>[ 341.642835] cifs: Unknown symbol slow_work_enqueue
Looks like the kernel is differently compiled and or still some modules missing.
I noticed that in another thread Samba/CIFS for Motorola defy froyo nls_utf8.ko also has been required, however I do not have the 2.6.32.9-perf version of this to try it out.
How has the progression been for you guys?

[Q] kernel modules for ICS, 2.6.39.4, error loading module

Hi there,
I would have posted this in /dev but you know...first post.
I was trying to apply these kernel modules: http://forum.xda-developers.com/showthread.php?t=1557868
but I'm getting the error "insmod: init_module '/system/lib/modules/cifs.ko' failed (Exec format error)", or if i use the busybox insmod i get the following error: "insmod: can't insert '/system/lib/modules/cifs.ko': invalid module format"
Are updated versions available for 2.6.39.4? I'm guessing the ones for 2.6.36.3 aren't inter-operable.
I haven't used the other bash-4.2.zip and config from the above link, is that necessary for this to work?
Thanks for any tips on getting these kernel modules working.
Thanks,
abactor
IRC channel
Is there an IRC channel that's in use for sony tablet S, by any chance?
compile module yourself?
You might be successful compiling the kernel modules yourself from the available source code and a crossplatform compiler on linux. It has worked for me for the tun module
Source code at sony.net, I cannot publish external links yet. But you can find the link e.g. in this thread at first page http://forum.xda-developers.com/showthread.php?t=1473621
The free Sourcery G++ Lite for ARM GNU Linux did a good job for me.
I don't know of any Tablet S IRC channels, but it would be cool if there was.
As for the modules, you do need to recompile it. Kernel modules (in practically every Linux flavour) are completely incompatible, even across minor revisions, but recompiling against the newest code and headers should yield the same result with a new module.
The Sony.net link walsera mentioned is (I believe) this one
Thanks guys,
I'll look into it. I've compiled c code for android under mingw, but I don't have a linux toolchain setup. Anyone try to compile these sorts of things on the device itself (I.e. not cross_compiled)? I just started playing around with a native android/arm gcc toolchain, but I was having linker issues I think, with crt0.o and libc and whatnot.
Thanks and take care,
Abactor
I've never tried it natively on the device, but there have been a couple of developments into native versions of gcc and whatnot, so that may be worth a look. You can always compile on your PC, then copy the ko over...
After mounting a debian chroot on the tablet and installing the needed tools, unpacking the kernel source, and copying over config.gz, and editing .config to build the needed modules then calling make modules everything seems to work. What's the best way to make them available and what modules do people need? I've done ntfs and tun so far.
Take care
A

MELE A1000 (Cortex A8) Kernel compiling - Modules

Hello,
I've recently bought a MELE A1000 [link], which currently has ICS and Linux kernel version 3.0.8.
But I've come across a problem; my Xbox 360 wired usb joystick isn't working with the MELE.
Research tells me that the module isn't compiled/included in the kernel [link]
This gives me two options, each with it's problems:
1- Re-compile the kernel, including the Xpad module:
I'd have to get the kernel source (either this "generic" kernel, or this Allwinner-specific kernel) then include it in the boot image, which is specific for the MELEA1000 link (check the first comment with the Chinese link to the official image)
Problems with this option
a) I don't know if the generic kernel will work with my device (Are there differences other than included modules?)
b) I can't compile the specific Allwinner kernel for some reason
c) Will the specific boot image work with a custom kernel? I think so.
2- Compile and include the module with insmod
I'd have to get the source of the ffmemless module [Source] and the xpad module [Source], compile them and do insmod to get them working.
Problems with this option
a) I can't seem to compile the modules in the correct version for my kernel (kernel 3.0.8+ #24 PREEMPT, armv71)
b) the precompiled modules I found were for 2.6*
Easiest scenario: compile modules + insmod.
Ideal scenario: get custom kernel, working + mod the rom (this is not within this thread's scope)
Could you give me any links, ideas or keywords to help me continue?
PS: I'm a programmer and I have previously modded/compiled kernels (from Debian's official repositories though)
Thanks
With information I've been reading I got up to this point:
Download the ARM kernel
git clone git://github.com/amery/linux-allwinner.git
Install the necessary libraries / binaries
apt-get install gcc-4.4-arm-linux-gnueabi build-essential u-boot-tools (if u-boot-tools not found, try uboot-mkimage)
Configure
make ARCH=arm sun4i_defconfig
make ARCH=arm xconfig
Check the following modules:
Input device support -> Support for memoryless force-feedback device
Input device support -> Joystick / gamepad
Input device support -> Joystick / gamepad -> X-box gamepad
Compile the modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j3 INSTALL_MOD_PATH=output modules
Then move the xpad.ko module to the MELE and run insmod xpad.ko, but I'm stuck with xpad: disagrees about version of symbol module_layout
I'm guessing this is a compile issue.
I've started a blog in which I'll try to document everything I do in the most detailed way I can.
Cheers
I think easier will be to get already compiled modules for A10 3.0.8+ from some firmware. I got cp210x.ko from "Aurora CM9 Nightly By Feiyu 0803.zip", successfully insmod-ed it into my device, and later added that insmod command to autorun with script manager app. I checked xpad module - it is in this firmware.

Compiling Kernel modules for z902

Okay so heres my problem.. Im currently trying to compile modules to add to my z902. i have the 3.0.8 kernel source used for the mele which uses the same allwinner a10 proccessor. I have done some looking around and found that in order for android to load the module it needs to be compiled with the correct vermagic as well.. i managed to get info from both a module already on the device and from the module i compiled.
My module retrieves the following info when using modinfo()...
filename: hid-sony.ko
license: GPL
alias: hid:b0003v0000054Cp0000024B
alias: hid:b0005v0000054Cp00000268
alias: hid:b0003v0000054Cp0000042F
alias: hid:b0003v0000054Cp00000268
depends:
vermagic: 3.0.8+ preempt mod_unload modversions ARMv7
the original im comparing to looks as follows...
filename: sun4i-keypad.ko
alias: platform:sw-keypad
license: GPL
author: Aaron.maoye<[email protected]>
description: SW keypad driver
depends:
vermagic: 3.0.8+ preempt mod_unload modversions ARMv7
this is what it took me a while to acheive. the problem is when trying to insert the module into linux using the insmod command i get this error..
insmod: init_module 'hid-sony.ko' failed (Exec format error)
afterwords i ran dmesg and noticed a line that looks as follows:
hid-sony: dissagrees about version of symbol module_layout
after doing this i read about a way to overlook the vermagic by using modprobe..
here i ran into another problem.. when executing modprobe as follows i recive this error..
#busybox modprobe hid-sony.ko
modprobe: chdir(/lib/modules): No such file or directory
after recieving this error i tried making the directory and typed in the same command..
it returned that modules.dep was not found..i looked into this file and it seems to be where linux stores all the initiated drivers.
I searched high and low and could not find this file anywhere on the system.
my question is.. What the hell am i doing wrong..? lol
I compiled the entire kernel first.. then i compiled the modules afterwords to a set location.
does the baseband version info have anything to do with this because i couldnt find any info on it..
the z902 has 1.2.3 as a baseband..? is it possible i may not have the correct kernel source..?
anyone who helps me solve this i will personally buy them a unit and set it up for them.. lol
BUMP
Bump.. please someone help... how can i make modules.dep without depmod in my busybox applets.. anyone know if i can update busybox within android or through linux. id really like to add support for some controllers and bluetooth dongles. im pretty sure the module is setup and compiled right. but its trying to install it in the wrong place. unless it matters that android is compiled within the kernel as well.. because the tutorial i read through didnt say it was neccisary. i belive it was aimed towards the mele a2000. but its an allwinner a10 with the same kernel. 3.0.8+.. the only thing in not sure of is the build number. the z902 shows a 1.2.3 build. and i have no clue what build number the mele a2000 uses.
prob a waste of time as nobody seems interested...
I managed to update busy box and add depmod to the list of applets. After doing so I tried mod probe and the module still won't load. Don't have the info on the error in front of me but it was something to the effect that it was not compatible with the kernel. Back to square one. Going to try compiling it with android over the weekend and give it another attempt. Need to find some kind of a work around for actual controllers for this thing. USB/bt joystick center would be a phenomenal upgrade for this device.

Matching a kernel's config for compatible kernel modules

(I'm cross-posting from "General Discussion", I think I picked the wrong forum. Sorry!)
I have:
Downloaded the exact kernel version running on my device from an AOSP mirror (4.9.170) (https://github.com/aosp-mirror/kernel_common.git)
Downloaded the exact compiler used to compile the kernel from my device:
Ran `cat /proc/version`, which returns "Linaro GCC 5.3-2016.05", which I downloaded from https://releases.linaro.org/components/toolchain/binaries/5.3-2016.05/aarch64-linux-gnu/
Took the kernel configuration from `/proc/config.gz`, copied it to the kernel source directory `kernel_common` as `.config`
Ran `make ARCH=arm64 CROSS_COMPILE=xxx oldconfig`
What I'm seeing:
First, the downloaded kernel source for 4.9.170 seems to think that my `config` is incomplete, since it will prompt me to answer ~15 extra configuration questions.
Second, this old Linaro compiled doesn't appear to support `-fstack-protector-strong` despite it being explicitly enabled in the `/proc/config.gz` file. So I end up disabling it with `./scripts/config --disable CONFIG_CC_STACKPROTECTOR_STRONG`
Finally, after successfully compiling, I take `net/ipv4/tcp_westwood.ko`, just as a test module, and try to load it on my Android device, and it fails:
`insmod: failed to load tcp_westwood_5.ko: Exec format error`
And in dmesg output: `tcp_westwood: disagrees about version of symbol module_layout`
My questions:
Can I assume that the `/proc/config.gz` file is not the actual file used to compile the running kernel, considering it doesn't completely configure the 4.9.170 kernel?
Am I on the right path to getting a kernel module that my kernel will load?
Background information:
I'm hoping this isn't very relevant, but just to head off some questions
This is a T95 Android TV device running what appears to be, to this newbie's eyes, a very Frankenstein'd Android 10 install (See https://www.cnx-software.com/2020/0...-comes-with-mali-g31-gpu-supports-android-10/)
I can't find any official - or unofficial - source for this device, which is why I'm going to all the trouble above.
I really appreciate any help, thank you!

Categories

Resources