一般用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. zabbix 添加自定义key

    vim /etc/zabbix/zabbix_agentd.conf UserParameter=zjzc.login,/bin/sh /usr/sbin/get_login.sh UserParam ...

  2. 深入理解Java的protected修饰符

    其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类 ...

  3. poj 2836 Rectangular Covering(状态压缩dp)

    Description n points are given on the Cartesian plane. Now you have to use some rectangles whose sid ...

  4. java.lang.NoClassDefFoundError 异常

    在项目实施过程中,当访问某一个功能时,出现异常为  java.lang.NoClassDefFoundError  com/xxx/yyy/Zzzz > ,检查发现这个类实际已经存在于应用服务器 ...

  5. jsonp+handler 的实现

    //参考 http://www.cnblogs.com/yuwensong/archive/2013/05/28/3103064.html 后台: public void ProcessRequest ...

  6. Android中获取网页表单中的数据实现思路及代码

    在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...

  7. VCS仿真 Dump Memory

    VCS仿真 Dump Memory 两种方法 vcs联合verdi生成fsdb文件 vcs生成vpd文件 VCS联合verdi生成fsdb文件 1.testbench中加入如下语句: initial ...

  8. JS高级程序设计学习笔记之JS事件(1)

    事件流 冒泡 定义:事件开始时由最具体的元素接收,然后逐级上传到较为不具体的节点.(IE9.FF.Chrome.Safari会将事件一直冒泡到window对象.IE5.5及其以下会跳过<html ...

  9. C#中public、private、protected、internal、protected internal (转载)

    在C#语言中,共有五种访问修饰符:public.private.protected.internal.protected internal.作用范围如下表:访问修饰符 说明public 公有访问.不受 ...

  10. sql语句的分类

    这些天在看Oracle database 11g SQL开发指南,关于sql语句的分类,感觉有必要记录一下. sql语句主要分五类: DML(DATA MANIPULATION LANGUAGE, 数 ...