![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux驱动
文章平均质量分 92
linux驱动
ZS_Wang_Blogs
嵌入式兴趣爱好者,为嵌入式而生
展开
-
1.linux驱动介绍
linux系统主要将设备分为3类:字符设备、块设备、网络设备字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度数据的设备,可以不按顺序读取,可以优化,调顺序,合并。块设备包括硬盘、磁盘、U盘和SD卡等...原创 2019-04-17 10:22:52 · 181 阅读 · 0 评论 -
12.3重写按键驱动-poll机制
一.了解poll机制poll机制:在规定时间内按下按键时立刻返回,没有的话在时间到后返回参考1:参考2:《linux设备驱动程序的p163页》在file_operations结构体中,open,read,write。对应的也提供了poll,在poll中加入poll函数驱动中poll函数格式为:unsigned int (*poll) (struct fi...原创 2019-05-31 15:45:14 · 235 阅读 · 0 评论 -
12.2重写按键驱动-中断方式
一.寻找s3c2410的request_irq(irq,handler, irqflags, *devname, *dev_id)的参数由于request_irq自动帮我们设置为中断引脚,所以我们可以在我们之前轮询模式的按键驱动代码的open函数修改,把虚拟地址的操作改成request_irq1.确定参数irq2.参数handler是我们自己写的中断处理函数,先写名称...原创 2019-05-29 10:34:38 · 261 阅读 · 0 评论 -
12.1重写按键驱动-中断方式-了解内核中断机制
一:了解中断流程单片机的中断流程是:在/work/system/linux-2.6.22.6下vim ./config_ok,知道内核的异常向量地址为0xffff0000有关于内核的中断机制,查看《嵌入式Linux应用开发完全手册》的p411那linux的中断流程是怎么样1.用trap_int构造异常向量,异常向量是:2.把代码拷贝到0xffff0000去...原创 2019-05-29 10:36:51 · 198 阅读 · 0 评论 -
12.4重写按键驱动-异步通知
一.什么是异步通知按键驱动中,我们之前写了查询方式,中断方式,poll机制,这几个都是应用程序主动去读取按键值,有没有一种驱动程序自己通知应用程序呢。就好比妈妈看护小孩,前三种是一直在他身边,等他醒了(有中断),妈妈再哄他(读取按键值)。而异步通知就是妈妈不用一直看着他,妈妈可以去做别的事,等他哭了(信号通知),妈妈再跑过去哄他。异步通知 :一旦设备就绪,则主动通知应用程序,应用程序...原创 2019-06-01 10:28:10 · 154 阅读 · 0 评论 -
12.5重写按键驱动——同步互斥阻塞
前言:思考,我们写的按键驱动,可能会出现多个应用程序打开同一个驱动。测试确实如此,有三个一样的进程,不同PID:怎么保证同一时刻只能有一个程序打开呢。我们想可以用如下代码实现:int canopen =1;然而,实际--canopen在硬件操作分为三步: 从寄存器读出 修改 写回寄存器 在这三个过程中,随时可能发生被另外一个程序...原创 2019-06-01 17:07:34 · 185 阅读 · 0 评论 -
12.6重写按键驱动——定时器防抖
学过单片机的都知道,按键可能会出现抖动现象。linux也一样。如下,出现两次按下的输出值按键由于他的物理特性,可能会在按键松开时产生多次脉冲,每次脉冲都可能产生中断。关键是消除多次读取脉冲,只读一次。引入定时器,每隔多少时间之后读取(错过抖动时序)。一.内核定时器参考《linux设备驱动程序p196》如果我们需要在将来的某个时间点调度执行某个动作,同时在该时间点到...原创 2019-06-02 09:16:58 · 233 阅读 · 0 评论 -
13.1读《linux设备驱动程序》笔记一
第二章:构造和运行模块1.只有授权用户(超级用户)才能装载模块2.驱动的装载因为是在内核中进行,所以可能导致系统的崩溃应用程序和内核模块的不同:1.应用程序:除了多线程,大多数是从头到尾执行单个任务,退出时可以不管资源的释放或其他清除工作2.内核模块:预先注册,以便服务于将来的某个请求,然后它的初始化函数就结束。好像告诉“我在这里,并且我能做这些工作”以及“我要离开啦,不...原创 2019-06-02 19:56:04 · 209 阅读 · 0 评论 -
14.1 input子系统详解
我们之前写的led驱动,按键驱动,在应用程序使用open("/dev/xxx")。但是现实的使用中除了自己或者公司内部的看得懂,实际的工作可能不会去打开设备设备。更多的,内核的驱动的加载编写是用input子系统或分层分离框架input子系统:由内核帮我们写好注册等纯软件的工作,而提供硬件层供我们自己编写,最终整合还是以按键驱动来研究input子系统框架图:1.input子系统在...原创 2019-06-02 21:44:24 · 282 阅读 · 0 评论 -
14.2 input子系统——按键驱动
上一节我们知道,写符合输入子系统框架的驱动程序的步骤为:1. 分配一个input_dev结构体2. 设置3. 注册4. 硬件相关的代码,比如在中断服务程序里上报事件参考我们/*参考gpio_keys.c代码和他的probe函数*/input子系统的主设备号为131.写出输入子系统框架代码:/*参考gpio_keys.c代码和他的probe函数*/#incl...原创 2019-06-03 16:47:10 · 430 阅读 · 0 评论 -
14.3驱动的分离分层
1.引入驱动的分离分层input系统把驱动分成input_handler和input_device。让内核专注于纯软件,驱动工程师专注于硬件。我们引入驱动的分离分层还是参考gpio_keys.c它的入口函数是诸如一个平台driver结构体里面有一个.probe函数,我们只关心probe函数2.引入bus_drv_dev模型bus虚拟总线类型,里面有.ma...原创 2019-06-04 11:20:58 · 392 阅读 · 0 评论 -
12.重写按键驱动-轮询查询
按键驱动编写步骤:1.驱动框架2.硬件资料查询3.代码: 一:轮询查找 二:中断方式 三:poll机制 四:异步通知 五:同步互斥阻塞轮询查找方式:一.驱动框架#include <linux/module.h>#include <linux/kerne...原创 2019-05-27 20:51:48 · 214 阅读 · 0 评论 -
11.重写——led驱动
我们之前的驱动程序已经把框架写好,只是打印一些语句,没有做其他的事,现在我们让他点亮led灯驱动的硬件操作分为3步: 看原理图 看芯片手册(这里是S3C2440) 写硬件相关代码 linux驱动的硬件相关代码和单片机的有什么不同呢单片机的是直接操作物理地址linux的是操作虚拟地址(由ioremap函数映射,物理地址——>虚拟地址)1.查看原理图...原创 2019-05-26 20:32:29 · 349 阅读 · 0 评论 -
2.字符设备框架
博主:平台:s3c2440+linux2.6.22.6+busybox1.7.0一、字符设备基础字符设备:是指只能一个字节一个字节进行读写操作的设备,不能随机读取设备中的某一数据、读取数据要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED等。一般每个字符设备或者块设备都会在/dev目录(可以是任意目录,这样是为了统一)下对应一个设备文件。linux...原创 2019-04-17 10:24:50 · 624 阅读 · 0 评论 -
3.字符设备驱动——led驱动和按键驱动和定时器
APP通过一个函数打开文件进行驱动程序,它的属性就是:属于字符设备,有主设备号。应用程序进去c库进入内核,内核最后调用驱动,驱动里有led_open,led_read,write......。VFS系统怎么通过APP的函数找到驱动呢。它是字符设备,那就是它在字符设备的数组里面chrdev找到一项,结构,这个结构是驱动程序我们自己来实现,来写的。步骤1:先写程序,2:定义结构体。这个结构体...原创 2019-04-17 10:28:17 · 496 阅读 · 0 评论 -
4.输入子系统
git代码:https://github.com/China-wzs/Linux-driver/blob/master/buttons.rar1.自己写按键驱动融入子系统框架之前在第一期和第二期衔接字符设备驱动视频中,我们写了驱动代码, 1.major 2.fire_operations .open ...原创 2019-04-17 10:34:02 · 136 阅读 · 0 评论 -
5.lcd驱动流程
github驱动代码:https://github.com/China-wzs/Linux-driver/blob/master/4.lcd.rarLCD驱动程假设app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0----------------------------------------------------------...原创 2019-04-17 10:39:25 · 297 阅读 · 0 评论 -
6.触摸屏驱动
github驱动代码:https://github.com/China-wzs/Linux-driver/blob/master/5.%E8%A7%A6%E6%91%B8%E5%B1%8Fts%E9%A9%B1%E5%8A%A8.rar1. make menuconfig 去掉原来的触摸屏驱动程序-> Device Drivers-> Input device supp...原创 2019-04-17 10:59:08 · 769 阅读 · 0 评论 -
7.USB设备驱动
1.基础知识现象:把USB设备接到PC1. 右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序问1. 既然还没有"驱动程序",为何能知道是"android phone"答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动...原创 2019-04-17 11:04:40 · 221 阅读 · 0 评论 -
7.块设备驱动
一、正确理解块设备驱动的概念1、块设备和字符设备的差异块和字符是两种不同的访问设备的策略;同一个设备可以同时支持块和字符两种访问策略;设备本身的物理特性决定了哪一种访问策略更适合;块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲;块设备驱动最适合存储设备。2、块设备驱动的特点字符设备只能顺序访问(如串口发送数据顺序),而块设备可以随机访问(不连续块访问);...原创 2019-04-17 11:06:03 · 472 阅读 · 0 评论 -
8.块设备和字符设备的区别
字符设备驱动提供open,read函数,块设备函数不能像字符设备驱动一样,因为这会降低效率。块设备驱动像坐电梯一样,先全部上去,再全部下去。不像字符设备一样上来下去,这样效率很低。主要和块设备的内部机制有关...原创 2019-04-17 11:06:51 · 903 阅读 · 1 评论 -
9.网卡驱动程序框架
网卡驱动程序框架:app:socket-------------------------------------------------------------------------------- 若干层网络协议--纯软件---------------------------...转载 2019-04-17 11:11:38 · 554 阅读 · 1 评论 -
10.重写最简单的驱动——打印驱动
1.模仿参考新建myled.c,参考Myleds.c,复制他的一些函数代码修改函数名(Myleds.c是我之前自己写的,没有的话按照下面图片写open和write函数就行)如:2.定义结构体file_operations3.把结构体告诉内核我们定义了这个结构体,但是没有用起来,所以要告诉内核,怎么告诉,需要一个系统函数register_chrdev原型:int re...原创 2019-05-26 15:39:55 · 874 阅读 · 0 评论 -
10.1设置设备节点
1.Module模块(module)是一种向Linux内核添加设备驱动程序、文件系统及其他组件的有效方法,而无需连编新内核或重启系统,模块消除了宏内核的许多限制,模块有许多优点1. 通过使用模块,内核发布者能够预先编译大量驱动程序,但并不会造成内核镜像发生膨胀,在自动检测硬件(例如USB)或用户提示之后,安装例程选择适当的模块并将其添加到内核中2. 内核开发者可以将试验性的代码打包到模...原创 2019-05-26 15:54:18 · 409 阅读 · 0 评论 -
v4l2驱动框架
参考:https://blog.csdn.net/duanlove/article/details/7853106原创 2019-08-09 14:47:12 · 238 阅读 · 0 评论