[Android Apps and Games] ruleh:
Since the current decision is on the big fat module, here is the concept of this module a bit clarified.

The basic idea is to make a module that can be dynamically loaded into the kernel so that most external wifi dongles work out right.

The reason for this is that most android kernels have a broken network stack and broken drivers. [I say broken but mean "optimized" since that is what they are]

So this works by combining the network stacks and and the drivers into a huge module independent of other kernel code.

The clear benefit of this approach is that very little needs to be changed in the kernel to make it work for most devices.

The specifically the module includes the following

--driver

--mac80211

--cfg80211

(--ieee80211)

[iee80211 is a rather complicated one, so it is better to leave it out for now, however it might come back later and mess everything up.]

[It is best to just wait until it messes up before attempting to fix it.]

Another problem is cfg80211.....

If your phone has wifi then it has cfg80211.

However the wifi module is usually a module (well...by definition the wifi 'module' is a module) whereas cfg80211 is inbuilt in the kernel.

This gives a nice big segfault when trying to load the module.

The solution to this would be converting the inbuilt cfg80211 to a module in the kernel and recompile.

This way we can unload the kernel and wifi drivers and load the big fat module without annihilating the module system (since that is how android handles segfaults caused by module loading).

And so another problem is introduced:

By unloading the original cfg80211, we essentially disable the integrated wifi device and therefore RfA won't find any networks to attack. [because RfA has script support this issue isn't that relevant]

This can be fixed by including the integrated wifi driver in the big module.

However this will make loading the module a bigger pain than it should be (mainly because nvram and fw_path).

And because I listed 3 problems, here is one more:

Sometimes 2 drivers compete for the same device, causing none of them to actually work.

This problem is also one of the reasons why desktop linux uses modules for wifi (and other) drivers.

There is also this magic version which only allows the module to be loaded into a specific kernel version.

Luckily this can be changed in the makefile.

Assuming the module works, this is what it will look like:

--it will replace cfg80211 -> Users need to recompile their kernel to make cfg80211 a module.

--cfg80211 and mac80211 will be standardized -> makes it easy to add more devices if needed.

--it will work on most devices -> In theory it works on all the kernels I looked at (except extreme hybrid kernels).

--integrated wifi will be disable during usage of the module -> except if your wifi device works with a standard cfg80211 stack (this can be done seperately).

--only a few selected drivers will be included -> More can be including during compilation.

--users need to compile the module themselves -> I will make sure that this will be as easy as possible.

--It will be big -> what else do you expect?

--WORKING MONITOR MODE

Something else to consider:

If we are already replacing cfg80211, why not replace it with a standardized one and include it in the kernel in addition to mac80211.

This way only the driver needs to be loaded and unloaded.

Instead of giving patch-files, we could provide all of the cfg80211 and mac80211 files.

However the problem would be the compatibility with integrated drivers.

development in progress

EDIT:

[IMPORTANT]

please make a list of wifi drivers you would like to see in the fat module ( and find a better name for it).

Current state:

replacing the inbuilt cfg (call this cfg1) with a module (call this cfg2) complied on DIFFERENT kernel sources (call this k2) works (of course same kernel source works as well).

I compiled nearly every single usb wifi driver I found (left out a few rare ones) in the sources of k2 and they ALL load into original kernel (k1) using cfg2

Most modules compiled on k1 for cfg1 work on cfg2 in k1.

k2 is just used for compiling the modules nothing more. [it is not being flashed or anything]

What's left to do

The kernel modules need to be compiled into a single module.

This will take some time but it seems like it will work perfectly.

And that is the end of it.

Then it is finished.

What users need to do

--recompile their kernel with cfg80211 as a module and enable led support (this cannot be done as a module)

--compile the module after changing the kernel version in the makefile (and maybe some other small changes)

--copy firmwares to phone

--load the module

--Enjoy

[insert the wifi dongle at some point]