嵌入式Linux中文站

开发专区

Linux Kernel suspend/resume 过程

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驱动技术(四) _异步通知技术

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

阅读(208)

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

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

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

阅读(152)

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

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

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

阅读(165)

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

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

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

阅读(70)

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

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

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

阅读(60)

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

uboot的配置流程分析

uboot的配置流程分析

阅读(204)

简单介绍一下uboot的基本配置流程。和绝大多数源码编译安装一样,uboot在执行 make 之前需要执行 make XXXconfig 来配置相关信息,而且uboot本身是针对多种平台的bootloader,所以编译的过程也会有一点小麻烦,需要对它的源码结构有一点了解。移植uboot,大体上的流程是:配置uboot-编译-配置相关平台的启动程序-烧录 选平台工具链 平台就是CPU的架构,即exynos4412的平台就是arm,所以 ARCH=arm ,交叉编译工具链我这里用的是 arm-none-lin...

Linux IPC POSIX 信号量

Linux IPC POSIX 信号量

阅读(199)

模型 # include semaphore.h # include sys/stat.h # include fcntl.h sem_open() //初始化并打开有名信号量 sem_init() //创建/获得无名信号量 sem_wait()/sem_trywait()/sem_timedwait()/sem_post()/sem_getvalue() //操作信号量 sem_close() //退出有名信号量 sem_unlink() //销毁有名信号量 sem_destroy() //销毁无名信号...