Linux驱动开发相关
一般用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驱动开发相关的更多相关文章
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- 【转】linux驱动开发的经典书籍
原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...
- 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- Linux驱动开发必看详解神秘内核(完全转载)
Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入L ...
- Linux内核(17) - 高效学习Linux驱动开发
这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...
- linux驱动开发的经典书籍
转载于:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html 参加实习也近一个月了,严重感觉知识不够,真是后悔学校里浪费那么 ...
- Linux驱动开发:USB驱动之usb_skel分析
在学习了这么些天的驱动之后,个人觉得驱动就是个架构的问题,只要把架构弄清楚了 然后往里面添砖加瓦就可以了,所以似乎看起来不是太困难,但也许是是我经验不足吧,这只能算是个人浅见了 这两天在学习USB驱动 ...
- 转:linux驱动开发的经典书籍
源地址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为 ...
随机推荐
- zabbix 添加自定义key
vim /etc/zabbix/zabbix_agentd.conf UserParameter=zjzc.login,/bin/sh /usr/sbin/get_login.sh UserParam ...
- 深入理解Java的protected修饰符
其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类 ...
- poj 2836 Rectangular Covering(状态压缩dp)
Description n points are given on the Cartesian plane. Now you have to use some rectangles whose sid ...
- java.lang.NoClassDefFoundError 异常
在项目实施过程中,当访问某一个功能时,出现异常为 java.lang.NoClassDefFoundError com/xxx/yyy/Zzzz > ,检查发现这个类实际已经存在于应用服务器 ...
- jsonp+handler 的实现
//参考 http://www.cnblogs.com/yuwensong/archive/2013/05/28/3103064.html 后台: public void ProcessRequest ...
- Android中获取网页表单中的数据实现思路及代码
在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...
- VCS仿真 Dump Memory
VCS仿真 Dump Memory 两种方法 vcs联合verdi生成fsdb文件 vcs生成vpd文件 VCS联合verdi生成fsdb文件 1.testbench中加入如下语句: initial ...
- JS高级程序设计学习笔记之JS事件(1)
事件流 冒泡 定义:事件开始时由最具体的元素接收,然后逐级上传到较为不具体的节点.(IE9.FF.Chrome.Safari会将事件一直冒泡到window对象.IE5.5及其以下会跳过<html ...
- C#中public、private、protected、internal、protected internal (转载)
在C#语言中,共有五种访问修饰符:public.private.protected.internal.protected internal.作用范围如下表:访问修饰符 说明public 公有访问.不受 ...
- sql语句的分类
这些天在看Oracle database 11g SQL开发指南,关于sql语句的分类,感觉有必要记录一下. sql语句主要分五类: DML(DATA MANIPULATION LANGUAGE, 数 ...