嵌入式Linux中文站

Linux Kernel suspend/resume 过程

阅读(137)

休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作 的 参考文章:作者: zhangjiejing kzjeef#gmail.com Date: 2010-04-07, http://www.thinksrc.com 我的linux内核版本:3.0.31 对于休眠(suspend)的简单介绍 在Linux中,休眠主要分三个主要的步骤: 1、冻结用户态进程和内核态任务 2、调用注册的设备的suspend

Linux驱动技术(四) _异步通知技术

阅读(208)

异步通知的全称是信号驱动的异步IO,通过信号的方式,放期望获取的资源可用时,驱动会主动通知指定的应用程序,和应用层的信号相对应,这里使用的是信号 SIGIO 。操作步骤是 应用层程序将自己注册为接收来自设备文件的SIGIO信号的进程 驱动实现相应的接口,以期具有向所

Linux驱动技术(五) _设备阻塞/非阻塞读写

阅读(152)

等待队列 是内核中实现进程调度的一个十分重要的数据结构,其任务是维护一个链表,链表中每一个节点都是一个PCB(进程控制块), 内核会将PCB挂在等待队列中的所有进程都调度为睡眠状态,直到某个唤醒的条件发生 。应用层的阻塞IO与非阻塞IO的使用我已经在Linux I/O多路复用一文中讨论过了,本文主要讨论驱动中怎么实现对设备IO的阻塞与非阻塞读写。显然,实现这种与阻塞相关的机制要用到等待队列机制。本文的内核源码使用的是3.14.0版本 设备阻塞IO的实现 当我们读写设备文件的IO时,最终会回调驱动中相应的接

Linux驱动技术(六) _内核中断

阅读(165)

在硬件上,中断源可以通过中断控制器向CPU提交中断,进而引发中断处理程序的执行,不过这种硬件中断体系每一种CPU都不一样,而Linux作为操作系统,需要同时支持这些中断体系,如此一来,Linux中就提出了 软中断 的概念,也有人叫 内核中断 ,其本质就是使用统一的方式对不同硬件中断体系中的中断号进行再映射,在操作系统中操作的中断号都是这些映射过的软中断号。就是下图中的irq_num Linux内核中定义了名为irq_desc的 中断例程描述符表 来描述中断服务例程, 每一个irq_desc对象数组中的下标

Linux驱动技术(七) _内核定时器与延迟工作

阅读(70)

内核定时器 软件上的定时器最终要依靠硬件时钟来实现,简单的说,内核会在时钟中断发生后检测各个注册到内核的定时器是否到期,如果到期,就回调相应的注册函数,将其作为中断底半部来执行。实际上,时钟中断处理程序会触发TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器。 设备驱动程序如要获得时间信息以及需要定时服务,都可以使用内核定时器。 jiffies 要说内核定时器,首先就得说说内核中关于时间的一个重要的概念: jiffies变量 ,作为内核时钟的基础,jiffies每隔一个固定的时间就会增加1

Linux驱动技术(八) _并发控制技术

阅读(60)

为了实现对临界资源的有效管理,应用层的程序有原子变量,条件变量,信号量来控制并发,同样的问题也存在与驱动开发中,比如一个驱动同时被多个应用层程序调用,此时驱动中的全局变量会同时属于多个应用层进程的进程空间,这种情况下也要使用一些技术来实现对并发的控制。本文将讨论内核中下述并发控制技术的技术特点和应用场景。 中断屏蔽 原子操作 原子变量操作 原子位操作 自旋锁 传统自旋锁 读写自旋锁 顺序锁 RCU 信号量 传统信号量 读写信号量 完成量 互斥量 中断屏蔽 顾名思义,就是屏蔽所有的中断。在嵌入式系统,中断屏

Linux文件I/O

阅读(107)

a small, nonnegative integer for use in subsequent system calls (read(2), write(2), lseek(2), fcntl(2), etc.) ($man 2 open). 一个程序开始运行时一般会有3个已经打开的文件描述符: 0 :STDIN_FIFLENO,标准输入stdin 1 :STDOUT_FILENO,标准输出stdout 2 :STDERR_F

从misc子系统到3+2+1设备识别驱动框架

阅读(63)

misc子系统在Linux中是一个非常简单的子系统,但是其清晰的框架结构非常适合用来研究设备识别模型。本文从misc子系统的使用出发,通过了解其机制来总结一套的设备识别的驱动框架,即使用 使用同一个驱动,向上提供多个设备文件接口,向下控制多个(相应的)设备 ,这就需要该驱动可以根据不同的设备文件来控制与之相应的设备。 misc的使用 Linux 中有三大类设备:字符,网络,块设备,每一种设备又细分为很多类,比如字符设备就被预先分为很多种类,并在文件中标记了这些种类都使用了哪个主设备号,但即便如此,硬件千千