linu-驱动
欧阳海宾
这个作者很懒,什么都没留下…
展开
-
platform总线所有函数解析
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver。Linux 2.6的设备驱动模型中,把I2C、RTC、LCD等都归纳为platform_device。总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。Linux2转载 2017-08-21 09:50:05 · 504 阅读 · 0 评论 -
内核时钟操作
内核时钟操作Include/linuc/clk.h分析首先打开sourceinsight内核工程,搜索clk.h,这个文件里的函数都是与平台无关,他们的实现都是不同的平台有不同的实现方法。 /** *clk_get - lookup and obtain a reference to a clock producer. *@dev: device for cloc原创 2017-08-23 10:55:20 · 490 阅读 · 0 评论 -
fopen、open和popen区别
open:直接操作物理设备,比如磁盘、设备文件 一般设备/设备文件都通过open来操作 fopen:则通过缓冲区来操作(所以不能用在驱动里),读写都在缓冲区上 ,一般用来操作普通文件filepopen:会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令 依照popen参数中的type值建立管道连接到子进程的输入/输出设备中,转载 2017-08-26 11:49:44 · 2975 阅读 · 0 评论 -
参考内核块设备驱动写:z2ram.c在内存中开辟一块空间来模拟成块设备
#include #include #include #include #include #include /*参考内核块设备驱动写:z2ram.c在内存中开辟一块空间来模拟成块设备*//*转载请注明原文地址:http://blog.csdn.net/oyhb_1992测试方法:1 insmod2 格式化 mkdosfs /dev/xxx3 挂载块设备 mount /de原创 2017-09-06 14:32:57 · 1245 阅读 · 1 评论 -
输入设备--宏BITS_TO_LONGS (数组位图操作) —内核源文件input.h分析
struct input_dev { const char *name; //输入设备名 const char *phys; const char *uniq; struct input_id id; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; /*个数组代表input设备所支持的事件,使用位图的方法来表示。什么是位图,就是使用某转载 2017-08-28 17:04:31 · 631 阅读 · 0 评论 -
输入设备框架1—应用层—完整的代码工程
输入设备框架应用层输入设备框架的头文件在#vi /usr/include/linux/input.h type:是事件类型,都在这个头文件里有描述如EV_KEY按键事件类型type:设备类型。可以设置为:#defineEV_SYN 0x00 表示设备支持所有的事件#defineEV_KEY原创 2017-08-26 21:15:42 · 1136 阅读 · 0 评论 -
宏BITS_TO_LONGS (数组位图操作) 代码测试
#include #include #include #define BITS_PER_LONG 32#define BITS_PER_BYTE 8 #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))//nr个位需要多少个long型数据变量来存储#define DI原创 2017-08-29 17:12:26 · 426 阅读 · 0 评论 -
分配并注册主次设备号
分配并注册主次设备号 设备号是在驱动module中分配并注册的,也就是说,驱动module拥有这个设备号(我的理解),而/dev目录下的设备文件是根据这个设备号创建的,因此,当访问/dev目录下的设备文件时,驱动module就知道,自己该出场服务了(当然是由内核通知)。 在Linux内核看来,主设备号标识设备对应的驱动程序,告诉linux内核使用哪一个驱动程序为该设备(也就是/转载 2017-07-21 09:03:33 · 331 阅读 · 0 评论 -
linux模块驱动简单的Makefile
Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式。简单的例子,Begin of hello.c file[cpp] view plain copy print?#include #include #include static int __init test_init(void) { p转载 2017-07-20 10:58:21 · 243 阅读 · 0 评论 -
Linux内核中断:request_irq,free_irq
Linux内核中断 步骤一:打开内核源代码,在里面搜索interrupt.h文件 打开文件后我们可以在里面看到这样的函数typedef irqreturn_t (*irq_handler_t)(int,void *);申请中断号request_irq(unsigned int irq, irq_hand原创 2017-08-17 21:55:40 · 2549 阅读 · 0 评论 -
输入设备框架—驱动层—完整的代码工程
输入设备驱动/***********所有的函数结构体定义都在linux/input.h*****************/转载请标明出处,原文地址#include #include #include #include #include #include #include #include /*测试,可以将开发板上的系统的当前终端重定向为标准输入以测试*输入命令 #e原创 2017-08-27 18:35:48 · 413 阅读 · 0 评论 -
平台设备和驱动是怎么匹配的?
平台设备和驱动是怎么匹配的?在Linux源码的sourceindight工程下搜索platform_device.h,这个文件是设备结构体,驱动结构体的定义,还有操作这两个结构体的函数如:平台设备注册,平台驱动注册。先看两个结构体://平台设备struct platform_device { constchar * name; //设备名,可以用来原创 2017-08-22 10:38:21 · 2327 阅读 · 0 评论 -
Linux内核定时器
Linux内核定时器打开内核sourceinsight工程,搜索timer.h,打开include/linux/time.h目录下的文件,ps:linux的头文件都是在某个include文件夹下,而Linux/include目录下的头文件是用的最多的头文件,它一般是通用的头文件和硬件平台无关,而我们用的时候也是一般用这个目录下的头文件。 打开头文件struct timer_list原创 2017-08-17 09:22:29 · 271 阅读 · 0 评论 -
编写LED驱动:如何用Linux内核里静态映射好的GPIO
编写LED驱动:如何用Linux内核里静态映射好的GPIO 步骤一:打开内核源代码,在里面搜索regs-gpio.h文件 打开文件后我们可以在里面看到这样的宏VA:表示虚拟地址的缩写我们找到虚拟地址的定义PA:表示物理地址再找物理地址的定义还有诸如GPIOA,GP原创 2017-08-16 22:25:52 · 542 阅读 · 0 评论 -
字符设备驱动框架1
转载注明转载地址:http://blog.csdn.net/oyhb_1992/article/details/77102667原创 2017-08-12 09:44:48 · 229 阅读 · 0 评论 -
字符设备驱动框架2:设备文件(设备节点)如何和驱动建立联系-Linux字符设备中的两个重要结构体(file、inode)
对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示上图描述了用户空间应用程序通过系统调用来调用程序的过程。一般而言在驱动程序的设计中,会关系 struct file 和 struct inode这两个结构体。用户空间使用open()系统调用函数打开一个字符设备时( int fd = open("dev/demo", O_RDWR)转载 2017-08-12 10:34:10 · 1280 阅读 · 0 评论 -
字符设备驱动框架3:深入探讨—完整的驱动代码工程
misc混杂设备驱动框架是对cdev驱动的进一步封装,用的更方便/*****************cdev.h********************/struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list;原创 2017-08-26 10:11:27 · 227 阅读 · 0 评论 -
混杂设备驱动框架1
转载请注明原地址:http://blog.csdn.net/oyhb_1992/article/details/77108374原创 2017-08-12 18:22:42 · 274 阅读 · 0 评论 -
总线设备驱动框架1
Kobject,kset是设备模型的基本结构体,设备模型使用这两个结构体来完成设备的层次关系,但在实际的设备驱动编写中,我们基本上用不到kobject,kset这些结构体,是因为这些结构体又被嵌入到更大的结构体中,原因在于kobject,kset结构体只能表征设备的层次关系,但是一个设备的驱动,并不是简单的一个层次关系而已,因此,必需要把kobject,kset结构体嵌入转载 2017-08-13 10:10:07 · 229 阅读 · 0 评论 -
平台总线设备驱动框架1
/********************************************************/内核版本:2.6.35.7运行平台:三星s5pv210/********************************************************/ 1、什么是platform(平台)总线?相对于USB、PCI、I2C、SP转载 2017-08-13 10:37:09 · 351 阅读 · 0 评论 -
平台总线驱动框架1—完整的代码工程
总线只是负责找到设备和驱动匹配,并调用驱动里的probe函数,在匹配后的probe函数里该注册混杂设备驱动还得注册。代码如下:专题2-总线设备驱动模型---第2课-平台设备驱动设计key_dev.c#include #include #include #include MODULE_LICENSE("GPL");#define GPFCON 0x56000050sta原创 2017-08-13 11:42:16 · 351 阅读 · 0 评论 -
字符设备驱动模型,混杂设备驱动模型,总线驱动模型之间的关联
原创 2017-08-13 12:03:41 · 738 阅读 · 0 评论 -
输入子系统驱动模型
原创 2017-08-13 22:06:48 · 229 阅读 · 0 评论 -
编写LED混杂设备驱动:静态映射,如何用Linux内核里的gpio_request(),gpio_set_value()等函数,ioctl函数
如何用Linux内核里的gpio_request(),gpio_set_value()等函数编写LED驱动 步骤一:打开Linux内核源代码里的Documentation文件夹下的gpio.txt文档 文档里介绍了要用到的头文件和gpio函数介绍,用到的头文件是#include 步骤二:打开Linux sourceindight工程搜索gpio.原创 2017-08-16 10:21:56 · 5484 阅读 · 0 评论 -
操作帧缓冲:测试程序 struct fb_var_screeninfo struct fb_fix_screeninfo fix
帧缓冲驱动-应用层#include#include#include//堆空间#man calloc#include#include#include#include//mmap()函数 /*测试:可以在开发板上测试,也可以在pc上测试*pc上测试要注意先进入真实终端模式,通过ctrl+alt+f1~f6可原创 2017-08-28 23:08:42 · 2152 阅读 · 0 评论