主题 : 驱动的加载与卸载中常见问题:rmmod chdir no such file or directory 的最终解决办法 复制链接 | 浏览器收藏 | 打印
我在磨剑
级别: 新手上路
UID: 8085
精华: 1
发帖: 7
金钱: 90 两
威望: 50 点
贡献值: 10 点
综合积分: 34 分
注册时间: 2009-08-09
最后登录: 2009-12-01
楼主  发表于: 2009-10-15 19:49

 驱动的加载与卸载中常见问题:rmmod chdir no such file or directory 的最终解决办法

管理提醒: 本帖被 kasim 设置为精华(2009-10-15)
首先在开发板上建立/lib/modules/2.6.29.4-FriendlyARM这样一个文件夹,注意,板子上的/lib/modules下有一个现成的文件夹叫2.6.29-FriendlyARM,该文件夹和2.6.29.4-FriendlyARM是有区别的。2.6.29.4-FriendlyARM记录了系统的完整版本号。所有待安装的模块文件.ko需要放在这个新建的文件夹/lib/modules/2.6.29.4-FriendlyARM下面。关于新建文件夹,mini2440的用户手册上7.3.3节中的“注意”里写的路径是有错误的,请大家注意。
安装:#insmod *.ko
卸载:#rmmod *
*为模块名称,不是设备名称。
[ 此帖被33479758在2009-10-15 21:44重新编辑 ]
级别: 新手上路
UID: 10162
精华: 0
发帖: 47
金钱: 365 两
威望: 151 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2009-10-26
最后登录: 2013-09-07
1楼  发表于: 2009-10-28 13:42
我的还是不能卸载呀………………


[root@FriendlyARM /]# cd /lib/modules/2.6.29.4-FriendlyARM/
[root@FriendlyARM 2.6.29.4-FriendlyARM]# pwd
/lib/modules/2.6.29.4-FriendlyARM
[root@FriendlyARM 2.6.29.4-FriendlyARM]# ls    
hello.ko        modules.dep.bb
[root@FriendlyARM 2.6.29.4-FriendlyARM]# insmod hello.ko
Hello, Mini2440 module is installed !
[root@FriendlyARM 2.6.29.4-FriendlyARM]# rmmod hello    
[root@FriendlyARM 2.6.29.4-FriendlyARM]# lsmod
mini2440_hello_module 1088 0 - Live 0xbf000000
[root@FriendlyARM 2.6.29.4-FriendlyARM]#
级别: 新手上路
UID: 10162
精华: 0
发帖: 47
金钱: 365 两
威望: 151 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2009-10-26
最后登录: 2013-09-07
2楼  发表于: 2009-10-28 14:29
有点明白了,不能随便改名字,或者说改了也没用。还得rmmod mini2440_hello_module 来卸载。
可能跟make modules已经指定名字有关(个人猜测,linux内核还不懂)。
能不能像x86上面直接写个makefile直接编译内核(无需make modules,编译目录直接insmod 呢),请高手指教!

x86上面makefile对应如下:

ifneq ($(KERNELRELEASE),)
    obj-m :=hello.o
else
    KERNELDIR ?=/usr/src/linux-2.6.20
    PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c
endif
级别: 新手上路
UID: 10162
精华: 0
发帖: 47
金钱: 365 两
威望: 151 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2009-10-26
最后登录: 2013-09-07
3楼  发表于: 2009-10-28 14:32
谢谢4楼kasim!
就是模块名怎么和文件名不对应呢,x86上好像不是这样的,是不是还是和那个make module以及对应的makefile有关?
级别: 新手上路
UID: 10162
精华: 0
发帖: 47
金钱: 365 两
威望: 151 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2009-10-26
最后登录: 2013-09-07
4楼  发表于: 2009-10-28 18:56

 回 7楼(kasim) 的帖子

大哥,谢谢你呀,果然是这样。我一直以为一定要指定交叉工具为arm-linux-gcc ,
那个 $(MAKE)可以根据KERNELDIR目录下的主Makefile(这是我首先能想到的)或是其他什么信息决定到底用什么编译工具(gcc or arm-linux-gcc),直接指定交叉工具出错,是因为$(MAKE) -C $(KERNELDIR) M=$(PWD) modules这个不仅指定CC,应该还有LD或是其他信息,可以这么理解吗?
级别: 新手上路
UID: 10162
精华: 0
发帖: 47
金钱: 365 两
威望: 151 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2009-10-26
最后登录: 2013-09-07
5楼  发表于: 2009-10-29 08:07
再次感谢kasim指导!