@twobob:
K2/3: ARCH_FLAGS="-march=armv6j -mtune=arm1136jf-s -mfpu=vfp"
K4/5: ARCH_FLAGS="-march=armv7-a -mtune=cortex-a8 -mfpu=neon" (or -mfpu=vfpv3, which might in fact be a better choice right now, even with the latest Linaro GCC series, I have some benchmarks to do...)
The rest might start an unholy war, but I'd go with at least:
-O2 -ffast-math ${ARCH_FLAGS} -pipe -fomit-frame-pointer (unless you care about debugging stuff, in which case you'll want to replace all this with -O0 -g3 ${ARCH_FLAGS} -pipe -fno-omit-frame-pointer). (FWIW, Linaro recommends using -O3 or -Ofast on armv7... Again, I have some benchmarks to do

).
Unless you know that -ffast-math is going to break something, which should be approximately never, except for some really, really specific use cases.
All this with a softfp TC defaulting to softfp. Unless you're planning on taking over the entire system (and I do mean everything, because it *will* break Amazon's stuff with the latest Linaro releases, while it only *might* break stuff in fun and interesting ways otherwise

), in which case you can go with hardfloat.
And re: the kernel stuff: I'm still going with it needs a proper symbol table, while binfmt might not require some stuff exported, hence why it worked. At least check after a depmod run with the modules in the right place in /lib/modules, else it might need a full kernel flash & proper install. What does dmesg has to say about it? It should print the missing symbol(s), which should help pinpoint if it's indeed something that was EXPORT_SYMBOL'ed.