一般用printk

查看/etc/sysconf文件,看看内核调试信息放到了哪里

打印的消息一般放在/var/log/messages文件里面。

如果你是在X Windows下的XTerm中insmod的,你不会看到输出,使用dmesg就可能看到在加载和卸载模块时的输出内容,只有直接在console下加载才能直接显示到屏幕上。

Linux下程序分为内核态和用户态,我们编写的驱动是内核态的,通过insmod加载.ko模块,再向/dev中注册设备节点后,用户态的程序就可以通过open,read,write,ioctl,release等方法访问,所以按你的意思,需要写一个用户态的可执行文件对设备进行操作,调试设备是否驱动成功。

一个完整的驱动,需要提供如下的东西,
第一,用户空间/dev下面的设备节点(我觉得类似于windows驱动开发中的符号链接,是专门暴露给用户态使用的)。当然,如果该设备仅仅是内核的使用,例如I2C,则不需要在/dev下面建立设备节点。
第二,驱动程序,就是能到映射到/dev下面的fopen等系列操作。

make写好的驱动程序之后会生成.ko文件,此ko文件就是编译之后生成的模块文件,也就是Makefile文件中obj-m缩生成的文件,然后需要将此文件加载到模块,即使用insmod或者modprobe命令将生成的模块文件(.ko文件加载进内核),但是此时所写好的应用程序还是不能运行,需要在/dev下创建设备节点,手动创建设备节点的方法是:mknod 设备节点名称 设备类型  主设备号  次设备号,例如:mknod  memdev c 260  0,创建好之后会在/dev目录下看到一个字符设备名字为memdev的类型。然后此时应用程序才能正常运行。

Linux的主设备号和次设备号:

以我的理解就是,主设备号是对应一个驱动程序,鉴别的是驱动。因为一个驱动程序很可能为多个设备提供服务。而次设备号就表明该驱动程序具体为哪个设备服务,鉴别的是设备。所以驱动程序向外暴露的“接口”(也就是/dev下的文件),可以有多个。所以可以看到很多主设备号相同的设备文件,但次设备号不同的设备文件。

举一个例子:也就是针对一个.ko模块mknod多个设备节点,然后用户层应用程序就可以对分别对这些设备节点(文件)操作了,实质上操作了不同的设备。

references:

http://unix.stackexchange.com/questions/125919/fatal-module-hello-ko-not-found

http://bbs.csdn.net/topics/110062713

http://blog.sina.com.cn/s/blog_6925948d0101kwky.html

http://blog.163.com/jammy_lee/blog/static/10119547820092391220182/

http://blog.chinaunix.net/uid-21778123-id-1815416.html

http://blog.csdn.net/robinvanpersie/article/details/7912457

Linux驱动开发相关的更多相关文章

  1. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  2. 【转】linux驱动开发的经典书籍

    原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...

  3. 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  4. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  5. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  6. Linux内核(17) - 高效学习Linux驱动开发

    这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...

  7. linux驱动开发的经典书籍

    转载于:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html 参加实习也近一个月了,严重感觉知识不够,真是后悔学校里浪费那么 ...

  8. Linux驱动开发:USB驱动之usb_skel分析

    在学习了这么些天的驱动之后,个人觉得驱动就是个架构的问题,只要把架构弄清楚了 然后往里面添砖加瓦就可以了,所以似乎看起来不是太困难,但也许是是我经验不足吧,这只能算是个人浅见了 这两天在学习USB驱动 ...

  9. 转:linux驱动开发的经典书籍

    源地址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为 ...

随机推荐

  1. BZOJ1430: 小猴打架

    1430: 小猴打架 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 328  Solved: 234[Submit][Status] Descripti ...

  2. AS3读取加密XML

    首先要确定xml使用了哪些加密方式,这样在As3中就反过来解密. 我加密xml的方式是先将xml文件打包为一个压缩文件,然后将压缩文件进行RC4加密,最后用base64将加密过的压缩包转为base64 ...

  3. Java集合的实现细节—Set集合和Map集合

    Set:代表无序.不可重复的集合 Map:代表key-value对集合,也称为关联数组 从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展. 1.Set集合和Map集合的 ...

  4. windows 查看端口被占用

    C:\Users\xxxx> 根据端口找到进程14716 C:\Users\xxxx>tasklist|findstr "14716"node.exe 14716 Co ...

  5. Django之Cookie与Session

    一.cookie 1.cookie使用 def cookie(request): print(request.COOKIES) # 获取所有的COOKIES obj = render(request, ...

  6. 给那些因为Firebug而舍不得FireFox的朋友

    Google Chrome浏览器调试 作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/20 ...

  7. .NET--接口设计

    我们学习.net视频的时候,老师讲的是"介面设计",有意思的是,这里的介面不是我们想象中的界面的意思,而是接口的意思. 由于视频是Micorsoft公司做的,所以整个视频看下来.仅 ...

  8. [MongoDB] Remove, update, create document

    Remove: remove the wand with the name of "Doom Bringer" from our wandscollection. db.wands ...

  9. Div与table的区别

    1:速度和加载方式方面的区别 div 和 table 的差异不是速度,而是加载方式,速度只能是指网络速度,如果速度足够快,是没有差异的: div 的加载方式是即读即加载,遇到 <div> ...

  10. AIX 常用命令和知识

      BOOTLIST:#bootlist -m normal -o (查看bootlist)#bootlist -m normal (设置bootlist为空,谁要在我机器上执行我就要哭了)#boot ...