• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : [设备驱动]最简单的HelloWorld驱动实验碰到的问题和经验分享 复制链接 | 浏览器收藏 | 打印
no z no d
级别: 侠客
UID: 12281
精华: 1
发帖: 68
金钱: 750 两
威望: 79 点
贡献值: 1 点
综合积分: 156 分
注册时间: 2010-01-03
最后登录: 2015-08-09
楼主  发表于: 2010-05-31 15:15

 [设备驱动]最简单的HelloWorld驱动实验碰到的问题和经验分享

此帖售价 25 金钱,已有 1 人购买
若发现会员采用欺骗的方法获取财富,请立刻举报,我们会对会员处以2-N倍的罚金,严重者封掉ID!
[ 此帖被cumt2009在2015-08-09 22:23重新编辑 ]
嵌入式博大精深
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-05-31 15:39
干得不错,顶一个,谢谢分享。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2010-05-31 17:32
**1,在编译该模块之前,请确保你的内核源码树已经搭建好,也就是给驱动开发的环境是否搭建好了

最重要的一点,你必须用和要加载这个模块的内核相同的配置来配置内核源代码树。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
no z no d
级别: 侠客
UID: 12281
精华: 1
发帖: 68
金钱: 750 两
威望: 79 点
贡献值: 1 点
综合积分: 156 分
注册时间: 2010-01-03
最后登录: 2015-08-09
3楼  发表于: 2010-05-31 20:00
引用第2楼kasim于2010-05-31 17:32发表的  :

最重要的一点,你必须用和要加载这个模块的内核相同的配置来配置内核源代码树。

噢,对,对,是的; 版主说的相同配置是不是这样理解:"比如,从官方网站下载的内核2.6.32.2的配置(#make menuconfig)和开发板的内核2.6.32.2的配置信息一样,对吧";因为,我是参考友善在我们arm9之家论坛提供的资料"Mini2440 Linux移植开发实战指南"进行的配置,然后烧写到mini2440.同时,仍然以该内核源码作为KERNELDIR.这样也就是像您说的板子和编译驱动所用的内核源码是相同的配置,对吗,呵呵. 谢谢版主的提示
嵌入式博大精深
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2010-05-31 21:39

 回 3楼(cumt2009) 的帖子

是的,如果你是为开发板写内核模块,可以理解为,必须先加载和开发板上跑的内核一样的内核配置。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
no z no d
级别: 侠客
UID: 12281
精华: 1
发帖: 68
金钱: 750 两
威望: 79 点
贡献值: 1 点
综合积分: 156 分
注册时间: 2010-01-03
最后登录: 2015-08-09
5楼  发表于: 2010-05-31 21:47

 回 4楼(kasim) 的帖子

噢,好的,再次感谢版主的指导~
嵌入式博大精深
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
6楼  发表于: 2013-02-15 22:22
引用楼主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.ko
get_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的源代码:
复制代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>
  5. #include <string.h>
  6. #include <errno.h>
  7. int main(int argc, char *argv[])
  8. {
  9.     const char *modname = argv[1];
  10.     int ret = -1;
  11.     int maxtry = 10;
  12.     while (maxtry-- > 0) {
  13.         ret = delete_module(modname, O_NONBLOCK | O_EXCL);//系统调用sys_delete_module
  14.         if (ret < 0 && errno == EAGAIN)
  15.             usleep(500000);
  16.         else
  17.             break;
  18.     }
  19.     if (ret != 0)
  20.         printf("Unable to unload driver module \"%s\": %s\n",
  21.              modname, strerror(errno));
  22. }


luther@gliethttp:/vobs/tmp$ arm-linux-gcc -o rmmod rmmod.c 
[ 此帖被kangear在2013-02-15 22:39重新编辑 ]
级别: 新手上路
UID: 116691
精华: 0
发帖: 16
金钱: 90 两
威望: 18 点
贡献值: 0 点
综合积分: 32 分
注册时间: 2015-06-29
最后登录: 2016-09-18
7楼  发表于: 2015-10-07 21:01
等等等等等等等等
级别: 新手上路
UID: 110924
精华: 0
发帖: 8
金钱: 15 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2014-12-09
最后登录: 2016-01-14
8楼  发表于: 2015-12-30 16:39

 回 楼主(cumt2009) 的帖子

kanyiyan
级别: 新手上路
UID: 135734
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
贡献值: 0 点
综合积分: 34 分
注册时间: 2017-11-23
最后登录: 2018-04-02
9楼  发表于: 2017-11-28 18:48
hahaodfdgb
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go