2012-07-25 18:25:15

by Mijzelf

[permalink] [raw]
Subject: Re: Uknown symbols in rfkill_backport.ko on 2.6.25.17 on mips

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?





2012-07-26 21:26:00

by Pavel Roskin

[permalink] [raw]
Subject: Re: Uknown symbols in rfkill_backport.ko on 2.6.25.17 on mips

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