Linux驱动
Amu@123
这个作者很懒,什么都没留下…
展开
-
Linux驱动之热插拔
这篇文章简单记录一下有关Linux驱动中的热拔插,在Linux内核驱动开发的时候经常会在程序里创建类,在类中创建设备,比如下面这一段,是从以前的代码中摘抄出来的major = register_chrdev(0, "fifth_drv", &sencod_drv_fops);fifthdrv_class = class_create(THIS_MODULE, "fifth_drv");fifthdrv_class_dev = class_device_create(fifthdrv_c原创 2020-10-12 22:32:17 · 1410 阅读 · 0 评论 -
Linux驱动之I2C创建实例
在上一节中,简单的介绍了Linux-3.4内核中的i2c驱动框架,那么,接下来,就来实际的创建i2c的驱动实例,加深对Linux内核中的i2c驱动的理解1、方法一第一中方法其实就是上节内容中所说的方法,现在来简单回顾一下,上节的内容最后的出来的结论是在系统开始运行之后,和架构相关的mach-xxxx.c文件先运行起来,这个文件中定义有i2c_board_info相关的结构体,结构体包含i2c设备的名字和地址,然后调用i2c_register_board_info 注册i2c_board_info原创 2020-05-25 23:29:44 · 1630 阅读 · 0 评论 -
Linux驱动之I2C框架(3.4内核)
在上一节的文章中介绍了在linux2.6内核中的I2C驱动框架,2.6内核现在已基本上不再使用了,可能版本有点太老了,但对于我们分析内核结构来说也不算过时,看懂旧的再看新的也就没有那么大的压力了,那今天就来分析一下Linux3.4内核中的I2C框架吧分析文件·drivers/i2c/busses/i2c-s3c2410.c注册平台设备驱动,查看probe函数的内容我只截取部分内容,从这些内容中就可以看出套路其实和之前的差不多,也是定义一个关于i2c的结构体,然后去设置这个结构体,设置的时候有一原创 2020-05-20 22:38:15 · 470 阅读 · 0 评论 -
Linux驱动之I2C框架(2.6内核)
i2c协议对于做嵌入式开发来说应该是必须要了解的一个协议了,也是最基本的一个协议,对i2c协议的物理特性的介绍和i2c设备的操作在我的裸机编程部分有讲解,今天来探索内核中的I2C的真正面目,使用内核:linux-2.6.22.6和以前一样,也是来看一个具体的文件来开始分析(drivers\i2c\busses\i2c-s3c2410.c)文件的入口,很简单,注册了平台软件驱动,重点来看结构体中的probe函数,下面来分步看一下这个函数的内容分配了一个s3c24xx_i2c结构体对象,使能i2c时钟原创 2020-05-17 22:03:03 · 256 阅读 · 0 评论 -
Linux驱动之触摸屏
这一节来学习触摸屏的知识,在之前的裸机编程中也有一节是介绍触摸屏的知识,所以这一节对于触摸屏的特性的介绍就不会太多,主要来看看在内核中,触摸屏的驱动是如何来实现的,先来看实例代码drivers/input/touchscreen/s3c2410_ts.c,从这个位置就可以知道,它是使用输入子系统来实现的先从入口函数看起,它也是注册平台设备驱动,看一下结构体的内容,从最重要的probe函数开始分析这个函数我只展示了部分的内容,从它的函数体就可以看出来,它主要干了这么几件事情1、分配了一个input_原创 2020-05-15 22:13:15 · 978 阅读 · 0 评论 -
Linux驱动之LCD程序编写
在上一节中,分析了内核中的LCD的驱动框架,不要被内核中复杂的调用过程把我们搞迷糊了,总结起来就是以下几点1、分配fb_info结构体2、设置fb_info结构体3、注册fb_info结构体是不是很简单,软件层面的fbmem.c不需要我们去管,当然,如果你想要去深入分析的话,剩下的硬件层面的代码就做了那么三件事情,这一节,来编写具体的内核LCD驱动,遵循上面的编程流程先来分配一个结构体,然后去设置它,在设置的时候要注意,fb_info结构体中有一个成员是固定的,就是表示这个设备的一些常用的参数,比原创 2020-05-11 22:39:45 · 424 阅读 · 0 评论 -
Linux驱动之LCD框架介绍
在裸机编程的时候,曾经编写过LCD的测试程序,对这一部分不是很了解的可以先去看一下,我们今天要做的是基于Linux内核框架下的LCD驱动程序,内核版本,Linux-2.6.22.6内核中已经集成了LCD的驱动框架,在driver/video/fbmem.c,打开这个文件,发现它是符合字符设备驱动的编写流程,下面是它的入口函数注册了一个字符设备驱动,主设备号FB_MAJOR是29,要注意的是在入口函数里注册了类,但是并没有在类下注册设备,先来看看它的操作函数集合中的函数上面的是open函数的详情,原创 2020-05-11 21:21:01 · 653 阅读 · 0 评论 -
输入子系统(二)
在上一节中介绍了Linux内核中的输入子系统的框架,在对输入子系统框架有了大概的了解之后,这一节来实际的编写代码,加深对输入子系统的理解,在写程序之前先来梳理一下,使用输入子系统编写程序的步骤1、最开始肯定是要注册一个代表物理硬件的input_device,这样的话,在内核成功识别之后才能对我们需要操作 的设备进行操作,2、提供对应的硬件操作函数 可以看出,在使用这个框架来编写程序之后,...原创 2019-12-14 21:25:52 · 126 阅读 · 0 评论 -
输入子系统(一)
1、框架之前写的驱动程序都是使用自己的框架,也只有我们自己知道在测试时该打开什么设备,那么,内核中提供了一套框架,将这些输入设备都进行了统一和规范化,这就是今天要来介绍的输入子系统打开内核source insight工程,在drivers目录下找到input.c,这是输入子系统的最开始的文件,从这里进行分析从上面这张图可以看到,input.c在它的入口函数里先注册了一个名为inout的类...原创 2019-12-14 14:37:21 · 400 阅读 · 1 评论 -
异步通知
前面分别使用了查询、中断、poll机制编写驱动程序之按键驱动,这一节中来介绍另外一种机制—异步通知。所谓的异步通知就是应用程序不再主动的去查询按键的模式,它可以去做别的事情,一旦有了按键事件发生,驱动程序将主动的通知应用程序来读取按键值,该机制使用的就是Linux下的信号signal来实现的,先来看看应用程序的写法void my_signal_fun(int signum){}int m...原创 2019-12-10 23:52:30 · 324 阅读 · 0 评论 -
同步互斥
这一节来了解一下字符设备驱动中的同步互斥模式,同步互斥模式就是在一个时刻只能有一个应用程序打开这个字符设备驱动,其他的应用程序要想打开必须要等另一个应用程序关闭之后才能打开这个字符设备,实现同步互斥机制的方法有很多,最简单的方法就是定义一个变量,让这个变量的初始值等于1,在第一个程序打开驱动之后让变量减一变为0,当另一个应用程序到来的时候,首先去判断这个变量的值,读取到变量的值为0,再减一的话就变...原创 2019-12-10 23:32:13 · 217 阅读 · 0 评论 -
poll机制
1、在之前的按键驱动程序里分别使用了查询和中断的模式,1、使用查询的时候程序需要在一个循环里不停的去,读取按键的状态,这个时候可以看到CPU的使用率是非常高的。2、改进之后使用中断的模式进行查询,虽然在中断里可以让进城休眠,依次来降低CPU的占有率,但是若没有发生中断程序会一直在等待,很显然,这样的情况也不是我们想要的。今天继续对这个程序进行改进,使用的是另一种机制-poll,在进行应用...原创 2019-12-09 23:06:41 · 668 阅读 · 0 评论 -
按键-中断
1、介绍1、本节来写使用中断的按键程序,使用中断的时候有两个重要的函数,使用"request_irq()"函数来注册一个中断程序,使用"free_irq"函数来卸载注册的中断服务函数。2、既然是使用中断,那么就不能像使用轮询的时候那么消耗CPU资源,使用休眠和唤醒的机制应用程序在读按键引脚状态的时候,如果没有按键按下的使用让程序休眠在这里,使用"wait_event_interruptib...原创 2019-12-07 23:32:35 · 387 阅读 · 0 评论 -
使用驱动程序点亮LED灯
继第一节第一个驱动程序框架记录之后,本篇文章将会在上一篇驱动程序的框架下编写点亮LED的驱动程序,同样会对上一个框架进行修改,优化。接下来进入正题1、点亮LED程序框架分析在最开始之前先来梳理一下点亮LED程序的框架1、通过对驱动程序的框架分析,我们知道第一步都要从入口函数开始,第一个驱动里我写的入口函数很简单,只是完成了必要操作这里的话就要进行改进。2、要点亮LED首先要对LED使用的...原创 2019-12-04 23:26:40 · 960 阅读 · 1 评论 -
第一个驱动程序
从今天开始就要进入内核驱动程序部分了,在这一节里就通过第一个驱动程序来介绍一下内核驱动模块的编写框架。static int first_drv_open(struct inode *inode, struct file *file){ printk("first_drv_open\n"); return 0;}static ssize_t first_drv_write(struct...原创 2019-12-02 23:54:22 · 309 阅读 · 0 评论