linker weirdness for MIPS kernel?
Jayachandran C.
c.jayachandran at gmail.com
Tue Mar 29 11:35:16 UTC 2011
On Tue, Mar 29, 2011 at 12:45 PM, Adrian Chadd <adrian.chadd at gmail.com> wrote:
> Hi guys,
>
> I'm trying to use modules on my MIPS boards and I'm hitting a snag.
>
> # kldload ./wlan.ko
> # kldload ./ath_hal.ko
> # kldload ./ath_rate_sample.ko
> link_elf_obj: symbol ieee80211_iterate_nodes undefined (1)
> linker_load_file: Unsupported file type
> kldload: can't load ./ath_rate_sample.ko: Exec format error
> # nm ./wlan.ko | grep ieee80211_iterate_nodes
> 00015edc t ieee80211_iterate_nodes
> # kldstat
> Id Refs Address Size Name
> 1 7 0x80000000 80000000 kernel
> 2 1 0xc7b4e000 538e4 wlan.ko
> 3 1 0xc7ba2000 70b88 ath_hal.ko
> #
>
> So the wlan module is loaded, it has that symbol internally, but the linker
> isn't gluing them together. That (1) is a local patch of mine to figure out
> where it's broken - here, it's broken in link_elf_obj.c:1038 . Ie, it's the
> first loop in relocate_file().
>
> I'm not up to date on how all this ELF and kernel module/linker magic works,
> could someone please give me a hand diagnosing why this is happening?
There was an issue we had seen in link_elf.c in another context, the value we
have for linker_kernel_file->address is not correct for mips, it should be
actually the KERNLOADADDR in config file.
Not really sure if your problem is related, but here is a small hack/patch to
try:
diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
index 1e0bac1..14dfe9e 100644
--- a/sys/kern/link_elf.c
+++ b/sys/kern/link_elf.c
@@ -323,7 +323,11 @@ link_elf_init(void* arg)
if (dp != NULL)
parse_dynamic(ef);
+#ifdef __mips__
+ linker_kernel_file->address = (caddr_t) 0xffffffff80100000;
+#else
linker_kernel_file->address = (caddr_t) KERNBASE;
+#endif
linker_kernel_file->size = -(intptr_t)linker_kernel_file->address;
if (modptr != NULL) {
--
JC.
More information about the freebsd-mips
mailing list