一.Linux设备分类 Linux系统为了管理方便,将设备分成三种基本类型: 字符设备 块设备 网络设备 字符设备: 字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性.字符设备驱动程序通常至少要实现open.close.read和write的系统调用. 字符终端(/dev/console)和串口(/dev/ttyS0以及类似设备)就是两个字符设备,它们能很好的说明“流”这种抽象概念. 字符设备可以通过文件节点来访问,比如/dev/tty1和/de…
通过<手把手教Linux驱动1-模块化编程,玩转module>的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数. 一.给模块传递参数 当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数.这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能.例如:我们写一个模块程序,来完成硬件中断的操作.在Linux操作系统中,每个中断都有一个中断号.如果我们在模块里面将中断号写死,那我们的模块只能响应特定的…
转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎点赞评论. https://blog.csdn.net/RadianceBlau/article/details/74722395本系列导航: Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) Linux DTS(Device Tree Source)设备树…
1.申请设备号 #include <linux/fs.h> int register_chrdev_region(dev_t first, unsigned int count, char *name); 静态分配字符设备号,从fist开始的count个,name为设备名称(name会出现在/proc/devices和sysfs中),成功返回0,失败返回一个负的错误码 int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, un…
大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点.本专题会一直更新,有任何疑问,可以留言或者加我微信. 一.什么是模块化编程? Linux的开发者,遍布世界各地,他们相互之间觉大数估计都不认识.如果真的是对这些开发者进行统一管理,那是很难做到的.所以大牛们,在设计Linux内核的时候,融入了模块化的思想.也就是说,现在大家已经有一个现成的Linux操作系统了,所有的开发者写的代码对于这个Linux操作系统而言都是一个模块,开发者可以模块的形式将…
字符设备 Linux中设备常见分类是字符设备,块设备.网络设备,其中字符设备也是Linux驱动中最常用的设备类型.因此开发Linux设备驱动肯定是要先学习一下字符设备的抽象的.在内核中使用struct cdev来描述一个字符设备如下 struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigne…
/***************************** ** 驱动程序模板* 版本:V1* 使用方法(末行模式下):* :%s/xxx/"你的驱动名称"/g********************************/ #include <linux/mm.h>#include <linux/miscdevice.h>#include <linux/slab.h>#include <linux/vmalloc.h>#includ…
本文基于icool210开发板,内核版本:linux2.6.35: 驱动代码: (1)头文件:led.h #ifndef __LED_H__ #define __LED_H__ #define LED_MAGIC 'l' #define LED_1_ON _IO(LED_MAGIC, 0) #define LED_1_OFF _IO(LED_MAGIC, 1) #define LED_2_ON _IO(LED_MAGIC, 3) #define LED_2_OFF _IO(LED_MAGIC,…
欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http://blog.csdn.net/xiayulewa   1.1.1.   设备号 alloc_chrdev_region(&dev, 0, 1, "buttons") /  register_chrdev_region: 动态申请设备号, 设备号组成了链表节点. 最后的结果为:所有的c…
90%的驱动模型都是按照下图开发的 下面来说下设备描述结构是什么东西 打开Linux-2.6.32.2的Source Insight 工程,搜索cdev 比如一个应用程序需要调用read和write这两个指令,然后内核里肯定也存在read和write,可能是xxx_read和xxx_write这样的函数,而驱动就是衔接这用户空间和内核空间的,read和xxx_read以及write和xxx_write就是属于驱动里面的一部分,而read和xxx_read就属于上述图片的一部分,如果这个文件是只读…