tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: How to build a custom module under NetBSD--9.x and newer?



WARNING: module error: `link_set_modules' section wrong size (got 16, wanted 8)
WARNING: module error: cannot fetch info for `zaptel', error 8


Yeah, I chased this down some time back: I wanted to load the DRMKMS
modules on the command-line like you can with Linux/FreeBSD, but,
coudn't because of this error.

What's happening here is that the .kmod file ends up with a
`link_set_modules' of size 16 instead of 8 because the module is
compiled from sources which have more than 1
	MODULE(MODULE_CLASS_FOO, "name", "deps")
defined in them.

Yup.

In addition to the possibility of having 2 MODULE()s in a single source
file, you might be building the module with some _other_ source file
from another module (probably one of the "required" modules).

You could look at the module's link map file (in the build object
directory) to see which object files include link_set_modules content.
It should look like:

	link_set_modules
	                0x0000000000000000        0x8
	 link_set_modules
	                0x0000000000000000        0x8 ld.o

(You may need to build with MKDEBUG and/or MKKDEBUG to create the map
file.)



Only 3 .kmod files in /stand have this double-definition issue:

```
$ for f in $(find /stand/amd64/10.99.2/ -name *.kmod);
 do readelf -Wa $f | grep 'link_set_modules .*000010 ' && echo $f;
 done
[11] link_set_modules PROGBITS 0000000000000000 00db20 000010 00 A 0 0 8
/stand/amd64/10.99.2/modules/coda5/coda5.kmod
[12] link_set_modules PROGBITS 0000000000000988 04fc00 000010 00 A 0 0 8
/stand/amd64/10.99.2/modules/drmkms/drmkms.kmod
[ 9] link_set_modules PROGBITS 0000000000000000 003f20 000010 00 A 0 0 8
/stand/amd64/10.99.2/modules/drmkms_pci/drmkms_pci.kmod
$
```

For coda5.kmod:
```
$ fgrep -r 'MODULE(' /usr/src/sys/coda/
/usr/src/sys/coda/coda_psdev.c:MODULE(MODULE_CLASS_DRIVER, vcoda, NULL);
/usr/src/sys/coda/coda_vfsops.c:MODULE(MODULE_CLASS_VFS, coda, "vcoda");
$ ident /stand/amd64/10.99.2/modules/coda5/coda5.kmod
/stand/amd64/10.99.2/modules/coda5/coda5.kmod:
    $NetBSD: coda_namecache.c,v 1.28 2022/05/20 19:34:22 andvar Exp $
    $NetBSD: coda_psdev.c,v 1.62 2022/05/03 20:52:31 andvar Exp $
    $NetBSD: coda_subr.c,v 1.32 2020/04/13 19:23:17 ad Exp $
    $NetBSD: coda_venus.c,v 1.30 2013/10/17 20:56:02 christos Exp $
    $NetBSD: coda_vfsops.c,v 1.90 2022/03/28 12:37:46 riastradh Exp $
    $NetBSD: coda_vnops.c,v 1.118 2022/03/27 16:24:58 christos Exp $
$
```

For drmkms.kmod the 2 MODULE(...) definitions are:
```
$ fgrep -r 'MODULE(' /usr/src/sys/external/bsd/drm2/ | tee xxx.txt
/usr/src/sys/external/bsd/drm2/amdgpu/amdgpu_module.c:MODULE(MODULE_CLASS_DRIVER, amdgpu, "drmkms,drmkms_pci,drmkms_sched,drmkms_ttm"); /* XXX drmkms_i2c */ /usr/src/sys/external/bsd/drm2/dist/drm/drm_agpsupport.c:MODULE(MODULE_CLASS_MISC, drmkms_agp, "drmkms"); /* XXX agp */ /usr/src/sys/external/bsd/drm2/dist/drm/radeon/r600d.h:# define AUDIO_DTO_MODULE(x) (((x) & 0xffff) << 16) /usr/src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.c:MODULE(MODULE_CLASS_MISC, drmkms_sched, "drmkms,drmkms_linux"); /usr/src/sys/external/bsd/drm2/drm/drm_module.c:MODULE(MODULE_CLASS_DRIVER, drmkms, "drmkms_linux,sysmon_power"); /usr/src/sys/external/bsd/drm2/i915drm/i915_module.c:MODULE(MODULE_CLASS_DRIVER, i915drmkms, "acpivga,drmkms,drmkms_pci"); /* XXX drmkms_i2c */ /usr/src/sys/external/bsd/drm2/linux/linux_module.c:MODULE(MODULE_CLASS_MISC, drmkms_linux, "i2cexec"); /usr/src/sys/external/bsd/drm2/nouveau/nouveau_module.c:MODULE(MODULE_CLASS_DRIVER, nouveau, "drmkms,drmkms_ttm"); /* XXX drmkms_i2c */ /usr/src/sys/external/bsd/drm2/nouveau/nouveau_pci.c:MODULE(MODULE_CLASS_DRIVER, nouveau_pci, "nouveau,drmkms_pci"); /usr/src/sys/external/bsd/drm2/pci/drm_pci_module.c:MODULE(MODULE_CLASS_MISC, drmkms_pci, "drmkms,pci"); /usr/src/sys/external/bsd/drm2/radeon/radeon_module.c:MODULE(MODULE_CLASS_DRIVER, radeon, "drmkms,drmkms_pci,drmkms_ttm"); /* XXX drmkms_i2c */ /usr/src/sys/external/bsd/drm2/ttm/ttm_module.c:MODULE(MODULE_CLASS_DRIVER, drmkms_ttm, "drmkms"); /usr/src/sys/external/bsd/drm2/via/via_module.c:MODULE(MODULE_CLASS_DRIVER, viadrmums, "drmkms,drmkms_pci"); /usr/src/sys/external/bsd/drm2/vmwgfx/vmwgfx_module.c:MODULE(MODULE_CLASS_DRIVER, vmwgfx, "drmkms,drmkms_pci,drmkms_ttm"); /* XXX drmkms_i2c */
$ cut -d: -f1 xxx.txt | while read line; do echo ${line##*/}; done > drm.txt
$ ident /stand/amd64/10.99.2/modules/drmkms/drmkms.kmod | fgrep -f drm.txt
    $NetBSD: drm_module.c,v 1.31 2022/07/19 22:24:47 riastradh Exp $
    $NetBSD: sched_fence.c,v 1.7 2022/07/28 10:44:46 riastradh Exp $
$
```

For drmkms_pci.kmod, the 2 MODULE(...) definitions are in:
```
$ ident /stand/amd64/10.99.2/modules/drmkms_pci/drmkms_pci.kmod | fgrep -f drm.txt
    $NetBSD: drm_agpsupport.c,v 1.13 2022/07/19 22:24:33 riastradh Exp $
    $NetBSD: drm_pci_module.c,v 1.7 2018/08/28 03:41:39 riastradh Exp $
$
```

You might have a similar situation with two MODULE(...) in the sources
comprising your module.

Dunno how to fix this though...

-RVP

!DSPAM:63d8d9bb216371006074684!



+--------------------+--------------------------+----------------------+
| Paul Goyette       | PGP Key fingerprint:     | E-mail addresses:    |
| (Retired)          | FA29 0E3B 35AF E8AE 6651 | paul%whooppee.com@localhost    |
| Software Developer | 0786 F758 55DE 53BA 7731 | pgoyette%netbsd.org@localhost  |
| & Network Engineer |                          | pgoyette99%gmail.com@localhost |
+--------------------+--------------------------+----------------------+


Home | Main Index | Thread Index | Old Index