Pavel Roskin <proski@...> writes:
>
> On Sun, 22 Jul 2012 21:11:34 +0200
> Mijzelf <Mijzelf@...> wrote:
>
> > I'm trying to get ath9k from compat-wireless-2012-05-08 running on a
> > 2.6.25.17 kernel on mips. The module refuses to load, due to unkown
> > symbols.
> > # modprobe ath9k
> > modprobe: can't load module rfkill_backport
> > (updates/net/rfkill/rfkill_backport.ko): unknown symbol in module, or
> > unknown parameter
> > # dmesg
> > rfkill_backport: Unknown symbol input_register_handle
> > rfkill_backport: Unknown symbol input_open_device
> > rfkill_backport: Unknown symbol input_close_device
> > rfkill_backport: Unknown symbol input_unregister_handler
> > rfkill_backport: Unknown symbol input_register_handler
> > rfkill_backport: Unknown symbol input_unregister_handle
> >
> > Any suggestions?
>
> If you can recompile the kernel, enable CONFIG_INPUT in .config
>
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.
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?)
Where does this come from?
On Wed, 25 Jul 2012 18:10:38 +0000 (UTC)
Mijzelf <[email protected]> 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