引用楼主cumt2009于2010-05-31 15:15发表的 [设备驱动]最简单的HelloWorld驱动实验碰到的问题和经验分享 :
参考tekkaman的linux设备驱动程序学习:
http://blog.chinaunix.net/u1/34474/showart.php?id=407202 小弟新手,初次接触设备驱动学习,写的不对的还请指正呀~~
今天实验了第一个设备驱动Hello,world!模块,期间碰到了几个问题,在此分享下经验,希望以后的朋友碰到了类似问题能少走弯路.
实验环境:
主机:Ubuntu10.04,emacs,minicom等.
.......
情况是这样的,在/lib/modules/2.6.32.2/目录下面,有多个*.ko文件,这里是hello.ko和hellop.ko,于是我将hello.ko和另外一个modules.dep.bb删除后,只剩下hellop.ko文件,接着重新测试后,不再提示"rmmod: module 'hellop' not found"
今天在进行字符设备scull驱动实验的时候,也同样出现了这个问题,其实这里只需要将/lib/modules/2.6.32.2/目录下面的modules.dep.bb删除即可搞定!!!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我在这里看到,不是modules.dep.bb的原因,我在mini2440上也实验了,modules.dep.bb会再次产生的。在这里找到了原因:http://blog.chinaunix.net/uid-20564848-id-74053.html,是这个版本的busybox中的rmmod这个命令的问题,实质已经卸载成功了,它还在提示这个not found。修改这个remmod这个命令的源代码就Ok了。
[root@FriendlyARM /]# ls
bin home linuxrc proc root tmp www
dev kangear mnt
rmmod sbin usr
etc lib opt rmmod.c sys var
[root@FriendlyARM /]#
insmod /kangear/alloc_mem.ko get_free_page: pagemem va addr=c7af6000 pa addr=37af6000
get_free_pages: pagesmem va addr=c7ac8000 pa addr=37ac8000
__get_zeroed_page: pagezmem va addr=c7af2000 pa addr=37af2000
kmalloc: kmallocmem va addr=c7a3cb80 |tpa addr=37a3cb80
kmalloc: kmallocmem say <<<--- Kmalloc Mem OK!--- >>>
vmalloc: vmallocmem va addr=c94f0000
[root@FriendlyARM /]#
rmmod alloc_mem.ko[root@FriendlyARM /]# rmmod alloc_mem
<<<<--- Module Exit --->>>
rmmod: module 'alloc_mem' not found[root@FriendlyARM /]#
[root@FriendlyARM /]# //
再来一遍[root@FriendlyARM /]#
[root@FriendlyARM /]#
insmod /kangear/alloc_mem.koget_free_page: pagemem va addr=c7b1b000 pa addr=37b1b000
get_free_pages: pagesmem va addr=c7b00000 pa addr=37b00000
__get_zeroed_page: pagezmem va addr=c7b18000 pa addr=37b18000
kmalloc: kmallocmem va addr=c7a3c100 |tpa addr=37a3c100
kmalloc: kmallocmem say <<<--- Kmalloc Mem OK!--- >>>
vmalloc: vmallocmem va addr=c95e7000
[root@FriendlyARM /]#
./rmmod alloc_mem <<<<--- Module Exit --->>>
[root@FriendlyARM /]#//
没有了
rmmod的源代码:
复制代码- #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));
- }
|
luther@gliethttp:/vobs/tmp$ arm-linux-gcc -o rmmod rmmod.c [ 此帖被kangear在2013-02-15 22:39重新编辑 ]