Ubuntu 22.04中无法加载libcomposite.ko模块的技术求助
解决Ubuntu加载libcomposite.ko模块失败的问题
错误原因分析
- modprobe提示模块找不到:你使用
modprobe时指定完整模块路径的方式错误,modprobe默认从/lib/modules/$(uname -r)/目录下查找不带.ko后缀的模块名,直接传入完整路径会导致它无法识别目标模块。 - insmod提示未知符号:
insmod不会自动处理模块依赖,libcomposite.ko依赖的USB gadget核心模块未提前加载,因此出现未知符号错误。
修复步骤
确认模块是否存在
先检查系统中是否真的存在该模块:ls /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/libcomposite.ko如果输出对应文件路径,说明模块存在;若提示文件不存在,需先安装对应内核版本的额外模块包:
sudo apt install linux-modules-extra-$(uname -r)用modprobe正确加载模块(推荐方式)
modprobe会自动处理模块依赖,直接执行:sudo modprobe libcomposite如果因内核版本魔法值不匹配导致加载失败(比如模块由其他版本内核编译),可尝试强制忽略版本校验(注意:此操作可能引发稳定性问题):
sudo modprobe --force-vermagic libcomposite若必须使用insmod,先加载依赖模块
先查看libcomposite.ko的未定义依赖符号:nm /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/libcomposite.ko | grep " U "输出内容即为该模块依赖的其他模块符号,通常需要先加载
usb_gadget、configfs等核心模块:sudo insmod /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/usb_gadget.ko sudo insmod /lib/modules/$(uname -r)/kernel/fs/configfs/configfs.ko # 根据nm输出的其他依赖,依次加载对应模块完成依赖加载后,再执行:
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/libcomposite.ko验证模块加载状态
执行以下命令确认模块是否成功加载:lsmod | grep libcomposite若输出模块相关信息,说明加载成功。
内容的提问来源于stack exchange,提问作者Prateek Sonthalia
相关产品推荐
相关产品推荐

