rmmod: chdir(/lib/modules): No such file or directory 解决方法

本文介绍了解决在Linux环境下卸载KO模块时遇到的问题,包括创建必要的/lib/modules目录、自定义rmmod命令以避免错误提示的方法。


必须创建/lib/modules/2.6.30.4这样一个空目录,否则不能卸载ko模块.
# rmmod nls_cp936
rmmod: chdir(/lib/modules): No such file or directory
但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:
rmmod: module 'nls_cp936' not found

初步发现,原来这是编译kernel时使用make modules_install生成的一个目录,

但是经测试得知,rmmod: module 'nls_cp936' not found来自于busybox,并不是来自kernel,

1.创建/lib/modules/2.6.30空目录就.

2.使用如下源码生成rmmod命令,就可以没有任何提示的卸载ko模块了[luther.gliethttp]

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <fcntl.h>

#include <string.h>

#include <errno.h>

int main(int argc, char *argv[])

{

const char *modname = argv[1];

int ret = -1;

int maxtry = 10;

while (maxtry-- > 0) {

ret = delete_module(modname, O_NONBLOCK | O_EXCL);//系统调用sys_delete_module

if (ret < 0 && errno == EAGAIN)

usleep(500000);

else

break;

}

if (ret != 0)

printf("Unable to unload driver module \"%s\": %s\n",

modname, strerror(errno));

}

3.把生成的命令复制到文件系统

# arm-linux-gcc -static -o rmmod rmmod.c

# arm-linux-strip -s rmmod

# cp rmmod /nfs/

cp /nfs/rmmod /sbin

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/qiaoliang328/archive/2010/01/15/5191821.aspx

<think>嗯,用户遇到了使用rmmod卸载驱动时出现“can'tchangedirectoryto'/lib/modules'”的错误。根据提供的引用内容,这个问题通常是因为系统缺少必要的目录结构导致的。首先,我需要确认错误的具体信息,用户提到的目录不存在,比如/lib/modules或者其子目录如3.0.18。根据引用[1]和[3],解决方案是手动创建缺失的目录。例如,如果提示缺少/lib/modules,就用mkdir-p创建它。如果进一步提示子目录如3.0.18不存在,同样需要创建。另外,引用[3]提到即使有/lib/modules目录,仍可能需要创建特定版本号的子目录,这可能是内核版本的问题。接下来,用户可能已经尝试过这些步骤,但问题仍未解决,所以需要寻找其他方法。考虑到modprobe-r命令可能更可靠,因为它会处理依赖关系,如引用[3]中的建议。此外,检查内核模块是否真的存在或是否被正确加载也很重要,可能需要使用lsmod确认模块名称是否正确。用户可能还遇到模块被占用的情况,这时候需要确保没有进程在使用该模块,可能需要fuser命令或重启系统。另外,权限问题也不容忽视,尤其是使用sudo或root权限执行命令。如果所有方法都失败,可能需要更深入的排查,比如检查文件系统是否只读,或者是否有其他系统配置问题。最后,确保内核版本与目录名称一致也是关键,因为模块通常存储在/lib/modules/$(uname-r)下,所以需要确认目录名称是否正确。</think>### 解决方案:`rmmod`卸载驱动失败的常见原因及处理方法 #### 1. **检查并手动创建缺失的目录** - **现象**:`rmmod: can't change directory to '/lib/modules'` **解决方法**: ```bash mkdir -p /lib/modules ``` 若进一步提示子目录不存在(如`3.0.18`),则继续创建对应版本号的目录: ```bash mkdir -p /lib/modules/$(uname -r) # 自动匹配当前内核版本 ``` 或手动指定版本号(参考错误提示): ```bash mkdir -p /lib/modules/3.0.18 # 替换为实际提示的版本号 ``` **原理**:`rmmod`依赖`/lib/modules/<内核版本>/`目录查找模块信息[^1][^3]。 #### 2. **使用`modprobe -r`替代`rmmod`** - **适用场景**:目录已存在但卸载仍失败 **命令示例**: ```bash modprobe -r 模块名 # 自动处理模块依赖关系 ``` **优势**:`modprobe`会读取`/lib/modules/<内核版本>/modules.dep`文件,避免手动路径问题[^3]。 #### 3. **检查模块是否被占用** - **步骤**: 1. 确认模块未在使用: ```bash lsmod | grep 模块名 # 检查模块是否加载 ``` 2. 查找占用进程: ```bash fuser -v /sys/module/模块名 # 查看占用进程 ``` 3. 强制卸载(谨慎使用): ```bash rmmod -f 模块名 # 可能导致系统不稳定 ``` #### 4. **检查文件系统权限** - **问题**:目录权限不足或只读文件系统 **解决方法**: ```bash mount -o remount,rw / # 重新挂载根目录为可读写 chmod 755 /lib/modules # 确保目录权限正确 ``` #### 5. **其他排查方法** - **内核版本匹配**: 检查当前内核版本与目录是否一致: ```bash uname -r # 显示当前内核版本 ls /lib/modules # 查看已有目录 ``` - **模块名称验证**: 确保卸载时使用的名称与加载时一致(不带`.ko`后缀): ```bash rmmod hello # 正确:加载时是`insmod hello.ko` ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值