
Linux驱动
drinkingcode
分享好玩科技,探索未知世界
展开
-
Linux设备驱动前的工作准备 ---- 内核的配置及Makefile编写
我们知道,在我们编写驱动时,需要用到一些函数接口,这些接口是在内核源码的头文件中定义的。我们若需要用到这些函数,就需要先对其内核源码进行编译。下面给大家讲解如何制作及编写其Makefile。I> 内核的配置 1.我们若想要我们编译的模块能在我们的开发板上运行,这就需要先在开发板上用 uname -r 命令查看我们开发板所使用的内核。比如我的开发板使用的是2.6.30.4的内核原创 2015-10-10 10:53:54 · 608 阅读 · 0 评论 -
Linux设备驱动程序之二 ---- 完善上一节的驱动程序
我们知道,在上一节驱动中,我们的主设备号是手动指定为111的,还有就是设备节点是手动mknod的。这在某种程度上,不利于我们驱动的移植性。接下来,我们对其进行进一步优化。I.首先是让其实现自动分配设备号,其驱动程序如下:#include #include #include #include int major;static int led_drv_open(原创 2015-10-10 10:53:59 · 508 阅读 · 0 评论 -
Linux设备驱动程序之三 ---- LED驱动程序的实现
LED驱动程序:#include #include #include #include #include #include #include int major;dev_t dev_num;static struct class *led_drv_class;static struct device *led_drv_dev;原创 2015-10-10 10:54:01 · 478 阅读 · 0 评论 -
Linux设备驱动之四----带中断的驱动程序
前言:本示例的目的是读取按键按下或松开时的按键值驱动程序如下:#include #include #include #include #include #include #include #include #include #include #include static struct class *thirddrv_class;static str原创 2015-11-03 12:48:36 · 1645 阅读 · 0 评论 -
Linux设备驱动之五----带poll机制的驱动程序
驱动程序的代码如下:#include #include #include #include #include #include #include #include #include #include #include #include static struct class *forthdrv_class;static struct class_device *f原创 2015-11-03 18:22:07 · 656 阅读 · 0 评论 -
Linux设备驱动之六----异步通知的驱动程序
驱动程序如下:#include #include #include #include #include #include #include #include #include #include #include #include static struct class *fifthdrv_class;static struct class_device *fifth原创 2015-11-04 10:14:56 · 792 阅读 · 0 评论 -
Linux设备驱动之七----总线设备驱动模型
前言:在Linux 2.6的设备驱动模型中,关心总线,设备和驱动这3个实体,总线将设备和驱动绑定。在系统没注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线自动完成;目的:本示例的目的是通过总线设备驱动模型来实现一盏LED的亮灭代码示例如下:led_dev.c#include #includ原创 2015-11-06 11:21:08 · 935 阅读 · 0 评论 -
linux中container_of(ptr, type, member)
在linux下很多地方使用了list_entry(链表结构实现), rb_entry(红黑树实现), sb_entry(文件系统实现)之类的结构,原因是因为linux内核在实现链表,红黑树这一类基本的数据结构的时候都是最简单化的实现,如果要使用这些基本数据结构,就需要在自己定义的数据结构中包含这类最基本的数据结构。而我们在使用中往往需要返回包含这类基本数据结构的大结构本身,这时候我们就需要用到li转载 2015-10-10 10:48:49 · 376 阅读 · 0 评论 -
Linux内核驱动fsync机制实现图解
在Linux内核中的IO模型基本分为4类:1、同步阻塞I/O2、同步非阻塞I/O3、异步阻塞I/O4、异步非阻塞I/O同步:应用显式地通过函数访问数据,在此函数返回时就会得到结果(成功或失败)。异步:应用会显示地通过函数提出访问或关注申请。数据到达时,硬件和驱动会通知应用,此时代码一般不在读写访问函数中,而是得到通知了再去有目的的访问数据。阻塞:在等待数据的过程中会休眠在此处,而非阻塞即函数不休眠转载 2015-10-10 10:48:54 · 745 阅读 · 0 评论 -
linux内核MKDEV()宏
http://archive.cnblogs.com/a/1982028/Kdev.h 中#define MKDEV(ma,mi) (((ma) #define MKDEV(ma,mi) ((ma)获取设备在设备表中的位置。我的理解是ma是主设备号,mi是次设备号主设备号由dev_t的高12位表示次设备号是dev_t的低20位我感觉MKDEV应该是把主设备号和次设备号合成d转载 2015-10-10 10:52:11 · 2062 阅读 · 0 评论 -
并发和并行
并发行和并行性的区别可以用馒头做比喻。前者相当于一个人同时吃三个馒头和三个人同时吃一个馒头。(今天听一个学长说的,感觉挺形象的!) 并发性(Concurrence):指两个或两个以上的事件或活动在同一时间间隔内发生。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。 并行性(parallelism)指两转载 2015-10-10 10:48:52 · 335 阅读 · 0 评论 -
Linux设备驱动之一 ---- 驱动的框架及其操作流程
I.驱动程序的编写#include #include #include #include static int led_drv_open(struct inode *inode, struct file *file){printk("this is a led_drv_open\n");return 0;}static ssize_t原创 2015-10-10 10:53:51 · 723 阅读 · 0 评论