
嵌入式Linux
最后一只晴天小猪
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【嵌入式Linux驱动程序-基础篇】- 混杂设备
混杂设备 在设备号比较紧张的情况下,我们可以采用混杂设备,可用将一些之间没有联系的设备使用同一个主设备号,而使用不同的次设备号。主设备号通常为10。混杂设备使用miscdevice结构体来表示,如下所示: struct miscdevice{ int minor; // 次设备号 const char *name; ...原创 2018-08-14 11:05:59 · 569 阅读 · 0 评论 -
【嵌入式Linux驱动程序-基础篇】- 中断处理
中断处理 1 中断的请求和释放 当设备需要中断功能时,应当向内核请求中断。如果驱动工程师没有通过请求中断的方式通知Linux内核需要使用中断,那么内核只会简单的应答并且忽略该中断。 1.1 请求中断线 请求中断线可以使内核知道外设应该使用哪一个中断号,哪一个中断处理函数。请求中断线在需要与外部设备交互时发生。Linux内核提供了request_irq()函数请求中断线。该函数如下: ...原创 2018-08-14 17:13:35 · 1274 阅读 · 0 评论 -
【嵌入式Linux驱动程序-基础篇】- 前和后半部
前和后半部 实际开发中,我们常常会面对一个问题:中断处理应当如何去处理一个较长时间的任务。我们都知道,中断处理不能被阻塞过长时间,不然就影响中断的效率。既要保证工作量大,又要保证中断速度快,确实是很难解决的难题。因此,内核开发者就通过前和后半部的方法来解决这难题。 内核开发者将中断分为2部分处理,前半部分实际响应中断的入口,即我们request_irq注册时所传递的中断处理函数。后半部则是前半...原创 2018-08-15 10:52:15 · 323 阅读 · 0 评论 -
【嵌入式Linux驱动程序-基础篇】- tasklets机制
Tasklets机制 tasklet在某些方面类似于内核定时器,它们一直在中断时间运行,它们一直运行在调度它们的同一个CPU上,并且它们接收到一个unsigned long参数。不像内核定时器,我们无法请求在一个指定的时间执行函数,需要通过调度tasklet,当我们简单的调用调度后,内核将在一个适当的时间去执行。这个行为对于中断处理特别有用,即“上下半部(前后半部)”。实际上,一个tasklet...原创 2018-08-15 15:07:31 · 335 阅读 · 0 评论 -
【嵌入式Linux驱动程序-基础篇】- 驱动与硬件层间的通信
驱动与硬件层间的通信 1 IO端口和IO内存 目前大多数处理器外设都是通过读写寄存器操作芯片外设,这些寄存器处于内存地址或者I/O地址上。从硬件角度考虑,内存和IO区域没有概念上的区别,均是通过地址总线、数据总线和控制总线(读写信号)来进行读写操作。 并非所有处理器厂商将IO端口和IO内存给予独立的地址空间,但有些厂商认为IO端口属于外设,有别于内存,需要将两者的地址区别开来。inter处理...原创 2018-08-13 11:22:55 · 1548 阅读 · 0 评论 -
【嵌入式Linux驱动程序-进程间通信】- 信号量 1
信号量 1 信号量的简述 信号量是Linux内核保护临界资源的一种方式。在FreeRTOS等嵌入式系统中的信号量可能会分为互斥信号量或者计数信号量。Linux内核中的信号量也可分为这两种,但是大多情况下,信号量作为互斥锁方式来时用。Linux内核中的信号量只有当得到信号量的进程时才能够进入临界区,执行临界代码。当一个信号量试图去获取一个已经上锁的信号量(即该信号量已经被其他进行占用了)时,进程...原创 2018-08-16 15:10:41 · 374 阅读 · 0 评论 -
【嵌入式Linux驱动程序-进程间通信】-完成量
完成量 1 完成量概述 很多情况下,我们需要让某一个线程等待另一个线程执行完某个操作后,才能继续执行后续操作。Linux内核中提供完成量这种机制可实现这个同步过程。当然,信号量也是可以完成同步操作。但是完成量比信号量效率更高。此处引用《Linux设备驱动程序第三版》的一段程序,如下: struct semaphore sem; init_MUTEX_LOCKED(&sem); st...原创 2018-08-17 14:57:34 · 440 阅读 · 0 评论