使用insmod加载内核模块时,报以下错误:

/ # insmod a.ko
insmod: ERROR: could not insert module ./a.ko: Unknown symbol in module

环境缺少模块依赖,使用modinfo查看依赖:

/ # modinfo ./a.ko
filename:       /home/admin/./a.ko
description:    Common API for compressed memory storage
author:         ************
license:        GPL
depends:        libphy
retpoline:      Y
name:           a
vermagic:       4.19.0-12-2-amd64 SMP mod_unload modversions 

depends: libphy 可以看出依赖libphy。先加载libphy,再加载内核模块,可正常加载。

/ # modprobe libphy
/ # insmod ./a.ko

二、查看动态库依赖关系

有一动态编译工具eeupdate64e,将工具拷贝到环境上无法使用,报-/bin/sh:eeupdate64e not found 问题。
确定已经给工具赋予了可执行权限,说明不是权限问题。
查看工具依赖的动态库:

/ # ldd eeupdate64e linux-vdso.so.1 (0x00007ffc38ff1000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f2e7f429000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2e7f20a000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e7ee19000) /lib64/ld-linux-x86-64.so.2 (0x00007f2e800c5000) / # readelf -d eeupdate64e Dynamic section at offset 0x30e9e0 contains 30 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [librt.so.1] 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000c (INIT) 0x16080 0x000000000000000d (FINI) 0x223564 0x0000000000000019 (INIT_ARRAY) 0x50e668 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes) 0x000000000000001a (FINI_ARRAY) 0x50e670 ....... .......

使用ldd eeupdate64ereadelf -d eeupdate64e 命令均可查看工具eeupdate64e依赖的动态库。
结果显示,工具依赖librt.so.1 libpthread.so.0 libc.so.6三个动态库,从编译链中拷贝相应的动态库到/lib目录下即可。
😄 😄 😄

背景最近在项目中加载内核模块和动态库时,都遇到加载失败情况。后发现都是依赖关系问题,在此记录此类问题的解决方法。查看内核模块依赖关系使用insmod加载内核模块时,报以下错误:/ # insmod a.koinsmod: ERROR: could not insert module ./a.ko: Unknown symbol in module环境缺少模块依赖,使用modinfo查看依赖:/ # modinfo ./a.infofilename: /home/admin/./
Helios 内核 — 用于 JavaScript 的 include() Helios Kernel 是一个同构的 JavaScript 模块加载器和依赖项管理器。 在同构下,意味着基于 Helios 内核的应用程序或可以在基于浏览器的环境和运行,无需任何类型的转换。 在撰写本文时,这是唯一一个专注于真正同构的模块加载器。 Helios Kernel 跟踪依赖图,根据应用程序不同独立部分的需要,在运行时动态加载和卸载相应的模块。 当其他模块仍在下载或解析时开始初始化准备好用于此的模块,并处理一些棘手的问题,例如循环依赖或损坏的代码(报告问题,但仍使应用程序保持活动状态),这是足够聪明的。 但是 Helios 内核的主要特性是 Helios Kernel 提供了必要的功能,旨在使依赖项管理变得简单明了。 模块和依赖声明的语法以经典的包含样式实现: // list of de
(1)找不到程序所依赖的Qt /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5: version `Qt_5' not found (required by ./运行程序名) (2)Could not Load the Qt platform plugin "xcb" in "" even though it was found 直接提示段错误即segmentation fault,或者Illegal instruction (core dumped) 非法指令
自己在openwrt/package/utils/目录下新添加了一个程序包,在编译的时候报错, ...is missing dependencies for the following libraries:libpthread.so.0. 这需要在该程序包的顶层makefile中添加红色字体部分。 define Package/rssi_client SECTION:=utils
最近项目用到了opencv,在测试环境编译后生成了so文件,在测试环境运行正常后准备在预发环境进行上线前的测试 但是System.loadLibrary(Core.NATIVE_LIBRARY_NAME)一直加载不成功,也没有报错 更改捕获Exception为Throwable,发现libopencv_java330.so的某个依赖文件没找到或者不存在 安装对应的依赖so文件后再次部署,运行
最近在做UOS的客户端开发。我的开发环境是UOS 1022的,打了一个deb给客户。但是客户的环境是UOS 1021。 根据客户的反馈,这个包安装后打不开。进一步了解后,程序启动后会出现segmentation fault (段错误)。 这个安装包在UOS 1022是可以正常使用的,为什么在UOS 1021上就异常了呢。 我将程序的依赖,用二分法删除,发现只要删除依赖目录中的 libpthread.so ,程序就可以正常启动了。 我对比了UOS 1022和UOS 1021 的li
在交叉编译一个项目,链接了uClibc中的libpthread.a,出现了undefined reference to  `_Unwind_Resume',符号缺失问题。添加-lgcc_eh这个就能够解决。 pgf77 -o ../gamess.01.x -Bstatic -i8 -i8storage -fastsse -Mipa=fast,safe -Mprof=func ga
(1) $ ldd /bin/grep linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0xb7eca000) /lib/ld-linux.so.2 (0xb801e000) (2) $ LD_TRACE_LOADED_OBJECTS=...
gn编译中,因为涉及多平台的编译,windows、cortex-a9、cortex-a7-poky在生成一个动态库的时候都没问题, 但是当在x86-64平台编译时,却一直提示: hidden symbol `pthread_atfork' in /opt/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin/../aarch64-linux-gnu/libc/usr/lib/aarch64-linux-gnu/libpthread_nonshared.a(
depends.exe (老版本vs带此工具) macox: 查看依赖动态库 otool -L test 可以查看 @rpath路径 LC_RPATH , 用这个路径替换动态库的@rpath otool -l test linux: ldd -v test