Hi everybody,
I tried the 2.6.22 kernel on top of the full source package from Jan 30.
Essentially I do
- untar uClinux-dist-20070130.tar.bz2
- delete linux-2.6.x directory
- untar vanilla kernel linux-2.6.22.tar.bz2
- apply Greg's patch linux-2.6.22-uc0.patch ontop of the vanilla kernel.
- rename linux-2.6.22 directory to linux-2.6.x and move it into the uClinux
distribution as replacement for the standard 2.6.19 kernel.
Then I update my Coldfire 5272 configuration with the new stuff included for
the 2.6.22 release. Most of the new settings are selected 'n' since they
don't pertain to coldfire/uClinux.
Initial testing showed that everything is working great, i.e. as well as the
'regular' 2.6.19 kernel or better. One reason I wanted to try 2.6.22 was a
problem I experienced doing relatively large writes to a NFS mounted drive.
In 2.6.19, the NFS write sometimes got locked up infinitely, whereas in
2.6.22 I could happily observe that this never happened.
However, now to the reason I am writing to this mailing list;
I do experience a problem with kernel modules. I build and link my kernel
module outside the source tree using the -C < 2.6.22 tree> make convention.
The module builds and links fine, as it did in 2.6.19. Upon loading the
module I see the following:
# insmod user0.ko
user0: Unknown symbol __stop_fixup
user0: Unknown symbol __start_fixup
insmod: cannot insert `user0.ko': Unknown symbol in module (-1): No such
file or directory
#
After some digging into the source trees I understand that there is a
relatively major difference in the <linux/modules.h> header file for
include/[asm-m68knommu | asm-m68k ]. The macro MODULE_ARCH_INIT references
__stop_fixup/__start_fixup symbols, which are externally declared in
modules.h. During the module linkage processing, I think that the
MODULE_ARCH_INIT macro is added to the .mod.c files generated as
struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
But the problem is that __start_fixup/__stop_fixup are left undefined and
subsequently the 'insmod' command fails. My hunch is that one of the .lds
(linkage scripts) needs to be updated accordingly to cover for this new
symbol, but I haven't yet figured out how.
Does anyone of you fine gentlemen have any input on this? Is this a bug in
the distribution?
Thanks in advance,
Harry
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev