linux设备驱动理论
xmzzy2012
这个作者很懒,什么都没留下…
展开
-
linux块设备驱动简介和实例
1、块设备是linux3大设备之一。其驱动模型主要针对磁盘,Flash等存储类设备。2、块设备为什么要缓存? 针对带磁头设备,需读取扇区,分布可能随机。需优化读取顺序,减小磁头机械运转次数。 针对不带磁头设备,暂时先扇区(或者块)读取到ram中缓存,只修改ram中相应位置数据,在写回到块设备,减小擦写次数。3、框架read()系统调用最终会调用一个适当的VF...原创 2020-02-22 11:18:19 · 664 阅读 · 0 评论 -
网络驱动与DM9000
网卡驱动在linux系统中的位置:重要数据结构和函数:/* 网卡设备*/struct net_device{ /* * This is the first field of the "visible" part of this structure * (i.e. as seen by users in the "Space.c" file). It is the...原创 2020-02-21 13:34:49 · 172 阅读 · 0 评论 -
ARM I/O内存
访问外部设备都是读写器寄存器,若寄存器可以当做内存一部分(统一编址)称为IO内存,比如ARM,POWERPC等外设寄存器看成独立空间的称为IO端口,比如x86操作步骤:1、申请2、映射3、访问4、释放具体操作操作步骤如下:1、申请——request_mem_region申请后在系统相当于对已有资源做了个标记,即本资源已经申请占用,若相同资源再申请时内核会报错。...原创 2020-02-19 17:00:40 · 677 阅读 · 0 评论 -
linux中断下半部处理
1、软中断注册软中断 如:open_softirq(MY_SOFTIRQ, my_softirq_action)在中断处理程序中触发软中断 如:raise_softirq(MY_SOFTIRQ)2、tasklet初始化一个tasklet: 方法1: DECLARE_TASKLET(name, func, data);定义名字为name的tasklet,默认为enab...原创 2020-02-19 14:21:29 · 168 阅读 · 0 评论 -
Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解
如之前所说,一直想知道显示数据都在哪个地方,通常的数据,比如 framebuffer 中的显示数据,和OpenGL 处理的数据有啥关系。目前为止我还没有弄明白 OpenGL 这块,但是 framebuffer 这部分差不多了。这篇文章记录了 framebuffer 的显示数据相关内容。1. 关于FIMD Tiny210v2 开发板属于 s5pv210 的一种,在这块开发板转载 2016-01-30 11:43:42 · 800 阅读 · 0 评论 -
linux设备驱动异步通知
异步通知概念:一旦设备就绪,则主动通知应用程序,这样应用程序就根本不用查询设备状态。就是发送和接受signal原创 2015-02-26 08:37:19 · 327 阅读 · 0 评论 -
阻塞与非阻塞
阻塞:故名思议就是阻塞在那边。更专业的解释当资源不能够被获取时,进程被挂起,直到资源被获得。(进程进入休眠状态,从调度器上的运行队列移走,直到被等待条件满足)非阻塞:在资源不能被获取时,要么就放弃,要么不停的查询直到条件满足。阻塞看是会效率低下,实则不然。当资源不可获取时,进程进入休眠,将cpu资源让给其他进程。如果不采用阻塞,当资源不满足是需要不停的轮询,反而会消耗cpu资源。原创 2015-02-25 16:39:09 · 328 阅读 · 0 评论 -
内核的几个内存动态申请函数
在内核空间常用的内存获取函数:kmalloc,get_free_page申请的内存在物理上连续;vmalloc申请的内存在物理上不连续原创 2015-02-26 08:56:36 · 378 阅读 · 0 评论 -
linux设备驱动的并发控制
并发的多个执行单元存在对共享资源的访问,竞态就可能产生。一般为防止竞态产生,可采用以下几种方法:1、屏蔽中断。local_irq_disable等操作,因屏蔽中断使得系统中的中断无法响应,会导致信息丢失。所以需要尽快地执行完临界区的代码2、原子操作。原子操作分为:整型原子操作和位原子操作3、自旋锁4、信号量。5、互斥量信号量与自旋锁区别:信号量:当获取不到信原创 2015-02-25 16:30:11 · 305 阅读 · 0 评论 -
驱动的分层和主机外设分离思想
驱动的分层是core核心层与例化。例如不同厂家的触摸屏都要用到input输入系统。输入核心层定义了底层设备驱动所需的API,如:分配和释放一个输入设备struct input_dev *input_allocate_device(void),void input_free_device(struct input_dev *dev)上报绝对坐标void input_repor原创 2015-02-26 10:19:37 · 375 阅读 · 0 评论