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驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为 ...
随机推荐
- Linux企业级项目实践之网络爬虫(20)——扩展成为规则插件模式
为了方便我们爬虫功能的扩展,最好使用插件机制.使用插件技术能够在分析.设计.开发.项目计划.协作生产和产品扩展等很多方面带来好处:(1)结构清晰.易于理解.由于借鉴了硬件总线的结构,而且各个插件之间是 ...
- pyglet: a cross-platform windowing and multimedia
pyglet pyglet: a cross-platform windowing and multimedia library for Python.
- STL中序列式容器的共性
代码如下: /* * vector_1.cpp * * Created on: 2013年8月6日 * Author: Administrator */ #include <iostream&g ...
- [RxJS] Reactive Programming - Sharing network requests with shareReplay()
Currently we show three users in the list, it actually do three time network request, we can verfiy ...
- Play Framework Web开发教程(33): 结构化页面-组合使用模板
和你编写代码相似,你编写的页面也能够由多个小的片段组合而成,这些小的片段本身也能够由更小的片段构成.这些小片段一般是能够在其他页面反复使用的:有些部分能够用在全部页面,而有些部分是某些页面特定的.本篇 ...
- OpenMp 基本
OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Di ...
- 将16进制(HTML)颜色值转换成 Color类型
private void btnChangeColor_Click(object sender, EventArgs e) { txtColor.BackColor = ColorTranslator ...
- easyUI的datagrid控件日期列不能正确显示Json格式数据的解决方案
EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正 ...
- WebApi2官网学习记录---批量处理HTTP Message
原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...
- 树状jquery导航条
$(function () { $(".leftsecoundtitle").css({ "display": "none" ...