On Wed, 25 Jul 2012 18:10:38 +0000 (UTC) Mijzelf <Mijzelf@xxxxxxxx> wrote: > Thanks. I was able to compile the input module, and this issue is > solved. > > Now a new one pops up: > /tmpfs/root # modprobe ath9k > modprobe: can't load module mac80211 > (updates/net/mac80211/mac80211.ko): unknown symbol in module, or > unknown parameter /tmpfs/root # dmesg > mac80211: Unknown symbol _flush_cache > > I grepped the source tree, and the word 'flush_cache' only exists in > the objects of mac80211.ko. So I suppose it's some macro expansion. > But I also grepped all include files in my kernel tree, and > flush_cache only appeared 4 times: > > ./drivers/scsi/ips.h: IPS_FC_CMD flush_cache; > ./drivers/video/i810/i810_main.h:static inline void flush_cache(void) > ./drivers/video/i810/i810_main.h:#define flush_cache() do { } while(0) > ./arch/powerpc/boot/ops.h:extern void flush_cache(void *, unsigned > long); > > It seems to me no one of these can cause a symbol _flush_cache in a > module. I agree. > Because the symbol is in the object files, I suppose it cannot added > by some library either. (Are there any libraries linked against > kernel modules?) No. Everything used by the modules should be provided by symbols exported by the kernel. > Where does this come from? My guess is that either it's a result of some clever macro expansion (so that the source doesn't have "flush_cache") or gcc inserts that call (perhaps hoping that libgcc has it) but the kernel doesn't satisfy it. First of all, make sure that you are making a clean build and there are no object files left from older builds. Then find the object file that calls _flush_cache. Recompile the corresponding source file with "-save-temps". Look for "flush_cache" in the *.i and the *.s file. Try to find out where it comes from. -- Regards, Pavel Roskin -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html