Symptoms & scope
- The module load fails even though its file exists.
- Kernel log names Unknown symbol or disagrees about version of symbol.
Relevant environment
Kernel modules installed through packages or external builds; symbol resolution differs from userspace shared-library linking.
Recognizable messages (synthetic examples)
example_module: Unknown symbol drm_open (err -2)Check provider availability and the module’s build context; unlike a userspace linker error, this belongs to kernel module loading.
example_module: disagrees about version of symbol module_layoutRebuild against the exact kernel and symbol data rather than force-load the incompatible module.
Possible causes
These are possible explanations, not a confirmed diagnosis. Several independent faults can coexist.
- A required provider module or optional kernel component may be missing.
- The module may be built against the wrong kernel configuration or symbol-version data; a matching uname release alone is insufficient.
Diagnose safely
Run one command at a time in the relevant session. Read the explanation first. Uppercase placeholders need your own values; tools and privileges vary by distribution. These commands are displayed here and never executed by the website.
Check 1
Read the exact missing or mismatched symbols; kernel journal access may require an administrator.
journalctl -b -k --no-pager --grep='Unknown symbol|disagrees about version of symbol'Interpret the result: A version-disagreement line supports ABI mismatch, while an unresolved symbol alone can also mean its provider was not installed or loaded.
Check 2
Replace example_module with the failed module. This lists planned module dependencies without loading them.
modprobe --show-depends example_moduleInterpret the result: A missing provider or unexpected path points to packaging/dependency problems. Successful dependency listing does not prove symbol ABI compatibility.
Evidence-guided next steps
Restore the required provider package
If the symbol belongs to a supported optional kernel component that is absent, install the corresponding distribution module package for the running kernel. Use the package’s normal dependency-index regeneration and load sequence.
Precautions: Do not guess a provider by similarly named symbols or copy modules from another release. Avoid loading a replacement into an active device path without its documented procedure.
Recovery / rollback: Restore the prior package snapshot and boot entry if the provider package changes a working device.
Did this solution help you?
Rebuild using matching symbol-version data
If versions disagree, rebuild the external module against the exact supported kernel build and its Module.symvers through the documented package workflow. Keep related external modules built against the same symbol data.
Precautions: modules_prepare alone does not generate Module.symvers when module versioning is enabled. Do not use force-modversion to bypass this evidence.
Recovery / rollback: Use the previous compatible module/kernel package pair if the rebuild fails; restore the previous image if it contained external modules.
Did this solution help you?
References & review
This guide was prepared from primary project or distribution sources and reviewed on the date shown. This is an editorial source check, not evidence that a fix was reproduced on your hardware. Diagnostic log examples are synthetic fixtures. Version-dependent details must be checked against your installed release.
- External modules: Module.symvers and modversions (project or distribution documentation)
- NVIDIA unresolved kernel-symbol examples (project or distribution documentation)
- Kernel module symbol-version rejection implementation (upstream implementation; behavior can vary by version)