有人对现有的电源管理提出了意见,认为驱动程序不应该做电源管理,paper地址在这里: http://www.ruf.rice.edu/~mobile/publications/xu2014apsys.pdf 没有仔细看完,但我确实发现很多驱动中的suspend和resume函数,要么是空的,要么根本就没有提供:)…
Advanced Configuration and Power Management Interface(ACPI)是由Intel,Microsoft等厂家订的一套Spec,规范了OS,APP对于电源的管理.ACPI涉及很广,这里仅涉及一些System Power Management, Device Power Management. System PM:S0: working modeS1: CPU停止工作, CPU,RAM继续供电,cache flush到Ram,Device若无必要则处…
如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 User-Space Device Drivers in Linux: A First Look Mats Liljegren Senior Software Architect Device drivers in Linux are traditionally run in kernel spa…
本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富. 1. 前言 在 <开发流程>中介绍了PM开发的一般流程,重点是好的模型.简单有效的接口参数.可量化的测试环境以及可独性强的输出. 内核中功耗开发无论是新模型开发还是已有模型的调优,都需要了解现有的框架,遵循已有框架,简单有效的修改.这就需要了解<Android/Linux内核Power Management知识点>,关于Linux省电,从开机-->运行-->suspend-->关机这四种状态,开机/关机…
1 关于Zephyr Zephyr是Linux基金会维护的微内核项目,来源于WindRiver向Zephyr捐赠的Rocket RTOS内核.主要用于开发针对物联网设备的实时操作系统. Zephyr操作系统很小.具有扩展性并且专为小型物联网设备设计,它的模块化设计使不论采用哪个架构创建物联网方案,都能满足所有设备的需求. 相关资源: Zephyr官网提供了相关帮助文档,并且在github维护了Zephyr Kernel和Zephyr SDK Tools. 2 Zephyr的Power Manag…
前文初步介绍了Linux用户态设备驱动,本文将介绍一个典型的案例.Again, 如对Linux用户态设备驱动程序开发感兴趣,请阅读本文,否则请飘过. Device Drivers in User Space: A Case for Network Device Driver | 用户态设备驱动:以网卡驱动为例 Hemant Agrawal and Ravi Malhotra, Member, IACSIT Abstract -- Traditionally device drivers spec…
BACKGROUND INFORMATION Embodiments of the present invention are directed to optical links and, more particularly, to optical links which may save power when the optical link is unplugged and maintain eye safety standards. Most optical links to date a…
A method for operating a memory module device. The method can include transferring a chip select, command, and address information from a host memory controller. The host memory controller can be coupled to a memory interface device, which can be cou…
Types of Device Drivers Windows可能会有User-mode的驱动,但是我们只关注Kernel-Mode的驱动. WDM Drivers WDM是一种驱动模型,是比较常用的驱动模型. WDM可以分为以下几类: Bus Drivers 负责检测到连接到该总线的设备的与PnP/Power相关的事件,并且通知IO Manager, PnP Manager, Power Manager. Function Drivers 负责某一具体设备的driver,是狭义上的driver…
本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富. 开发流程 针对一个PM feature进行开发,设计模型是第一步.模型设计好之后,还要保留参数接口,可以基于这些参数针对特殊个体进行优化. 建立一个可以快速迭代.准确可靠.可量化的验证环境尤其重要.一方面可以验证设计的模型是否有效.正确:另一方面还可以调整找到最适合的参数. 针对嵌入式设备来说,最主要的是达到性能和功耗的平衡:在满足性能要求的前提下,尽量降低功耗. 这就涉及到如何去量化性能(Performance)和功耗(Power)…
“Do you pine for the nice days of Minix-1.1, when men were men and wrote their own device drivers?” Linus Torvalds Pre-requisites In order to develop Linux device drivers, it is necessary to have an understanding of the following: C programming. Some…
来源:http://www.drdobbs.com/cpp/accessing-device-drivers-from-c/184416423/   Device Drivers are written largely in C or C++. No explicit support for Device Driver communication is included in the current .NET framework. David implements support with C#…
0.ABSTRACT (1)non-volatile memory——low standby power DRAM——high performance and better active power (2)we: present a runtime-adaptive method of DRAM decay——reduce DRAM refresh energy (largestandby power due to refresh) present two methods——DRAM bypas…
一个简短的引论 它给这一章总线架构的高级概述 集中访问讨论Peripheral Component Interconnect(PCI,外围组件互连)外设内核函数 PCI公交车是最好的支持的内核总线 本章主要介绍PCI驱动程序假设寻找其硬件和获得对它的訪问 本章也会介绍ISA总线 PCI接口 PCI是一组完整的规范,定义了计算机的各个不同部分之间应该怎样交互 PCI规范涵盖了与计算机接口相关的大部分问题 PCI架构被设计为ISA标准的替代品,有三个主要目标 获得在计算机和外设之间数据传输时更好的性…
基本介绍 第三类是标准的网络接口Linux设备,本章介绍的内核,其余的交互网络接口描述 网络接口,必须使用特定的内核数据结构本身注册,与外部分组交换数据线打电话时准备 经常使用的文件上的网络接口操作是没有意义的,因此在它们身上无法体现Unix的"一切都是文件"的思想 网络驱动程序异步自外部世界的数据包 网络设备向内核请求把外部获得的数据包发送给内核 Linux内核中的网络子系统被设计成全然与协议无关 在网络世界中使用术语"octet"指一组8个的数据位.它是能为网络…
基本介绍 2.6内核设备模型来提供的抽象叙述性描述的一般系统的结构,为了支持各种不同的任务 电源管理和系统关机 用户空间与通信 热插拔设备 设备类型 kobject.kset和子系统 kobject是组成设备模型的基本结构 对象的引用计数 sysfs表述 数据结构关联 热插拔事件处理 kobject基础知识 <linux/kobject.h> 嵌入的kobject 内核代码非常少去创建一个单独的kobject对象.kobject用于控制对大型域相关对象的訪问 kobject的初始化 首先将ko…
简单介绍 很多类型的驱动程序编程都须要了解一些虚拟内存子系统怎样工作的知识 当遇到更为复杂.性能要求更为苛刻的子系统时,本章所讨论的内容迟早都要用到 本章的内容分成三个部分 讲述mmap系统调用的实现过程 讲述怎样跨越边界直接訪问用户空间的内存页 讲述了直接内存訪问(DMA)I/O操作,它使得外设具有直接訪问系统内存的能力 Linux的内存管理 地址类型 Linux是一个虚拟内存系统,这意味着用户程序所使用的地址与硬件使用的物理地址是不等同的 有了虚拟内存,在系统中执行的程序能够分配比物理内存很…
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉:既可让人明白「为何如此设计」,即「知其然更知其所以然」:也能剥离一些琐碎的细节,让更多没那么多时间与精力.或者背景知识不足的朋友,对核心方法和思路,多一点理解,即,给人提供一种「纲举目张提纲挈领抽丝剥茧」的可能性. 机缘巧合,俺今天就决定抛砖引玉,写一篇不那么好的工程文档.也期望对本文话题感兴趣的朋…
基本介绍 块设备驱动程序通过主传动固定大小数据的随机访问设备 Linux核心Visual块设备作为基本设备和不同的字符设备类型 Linux块设备驱动程序接口,使块设备最大限度地发挥其效用.一个问题 一个数据块指的是固定大小的数据,而大小的值由内核确定 数据块的大小一般是4096个字节.可是能够依据体系结构和所使用的文件系统进行改变 与数据块相应的是扇区,它是由底层硬件决定大小的一个块,内核所处理的设备扇区大小是512字节 假设要使用不同的硬件扇区大小.用户必须对内核的扇区数做相应的改动 注冊 注…
简单介绍 tty设备的名称是从过去的电传打字机缩写而来,最初是指连接到Unix系统上的物理或虚拟终端 Linux tty驱动程序的核心紧挨在标准字符设备驱动层之下,并提供了一系列的功能,作为接口被终端类型设备使用 有三种类型的tty驱动程序:控制台.串口和pty /proc/tty/drivers 当前注冊并存在于内核的tty设备在/sys/class/tty下都有自己的子文件夹 小型TTY驱动程序 <linux/tty_driver.h> struct tty_driver tiny_tty…
ch03.字符设备驱动程序 编写驱动程序的第一步就是定义驱动程序为用户程序提供的能力(机制).接下来以scull(“Simple Character Utility for Loading Localities”区域装载的简单字符工具,scull是一个操作内存区域的字符设备驱动程序,这片内存区域就相当于一个设备)为例说明. 主设备号和次设备号 对字符设备的访问时通过文件系统内的设备名称进行的.这些名称被称为特殊文件.设备文件或者简单称之为文件系统树的节点.它们通常位于/dev目录,字符设备驱动程…
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉:既可让人明白「为何如此设计」,即「知其然更知其所以然」:也能剥离一些琐碎的细节,让更多没那么多时间与精力.或者背景知识不足的朋友,对核心方法和思路,多一点理解,即,给人提供一种「纲举目张提纲挈领抽丝剥茧」的可能性. 机缘巧合,俺今天就决定抛砖引玉,写一篇不那么好的工程文档.也期望对本文话题感兴趣的朋…
一.剧情回顾 在上一篇链接器的秘密里面我们讲到我们用一些特殊的宏让链接器帮我们把一些初始化好的结构体列好队并安排在程序的某一个段里面,这里我例举出了三个和我们主题相关段的分布情况,它们大概如下图所示:(我们可以通过搜索宏ll_entry_declare来找到它们) 那么问题来了,那它们三个是什么关系呢?它们在程序里面是怎么被用到的呢? 二.剧透 剧透环节希望你们喜欢,uclass对驱动进行了归类处理,它描述了具有相似方法的驱动,而不管它们的具体形式.比如对于GPIO它们会具有读取管脚和设置管脚输…
Xenserver 的新版本6.2现在已经全面开源,省掉了原有的序列号,也能免费体验曾经标题中的付费高级功能. 安装镜像:http://downloadns.citrix.com.edgesuite.net/akdlm/7281/XenServer-6.2.0-install-cd.iso 管理中心:http://downloadns.citrix.com.edgesuite.net/akdlm/7282/XenServer-6.2.0-XenCenter.msi 若干台物理服务器就可以进行我们…
概述:系统要及时的感知硬件的状态,通常有两种方式:一种是轮询.一种是通过响应硬件中断.前者会浪费处理器的时间,而后者不会. 准备并口 在没有节设定产生中断之前,并口是不会产生中断的 并口的标准规定设置port2(px37a.0x27a或者其他port)的第4位将启用中断报告.0×10 当处于启用中断状态.每当引脚10的电平发生从低到高改变时.并口就会产生一个中断 引脚9是并口数据字节中的最高位 安装中断处理例程 中断信号线是很珍贵且有限的资源 内核维护了一个中断信号线的注冊表.该注冊表类似于I/…
ch02.构造和运行模块 模块的构造: #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); static int hello_init(void) { printk("Hello,world\n"); ; } static void hello_exit(void) { printk("Goodbye,cruel world\n"…
ch01. 设备驱动程序简介 设备驱动程序的作用在于提供机制(需要提供什么功能),而不是提供策略(如何使用这些功能). 内核功能划分: 进程管理:进程创建.销毁.进程间通信.共享cpu调度器. 内存管理:内核为每个进程创建一个虚拟地址空间,内核的不同部分在和内存管理子系统交互时使用一组函数调用,包括简单的malloc/free函数以及其他的复杂的函数. 文件系统:“一切皆文件”. 设备控制:几乎每一个系统操作都会映射到物理设备上.除了处理器.内存以及其他很有限的几个对象外,所有设备控制操作都由与…
Also, be aware that hibernation (suspend to disk or S4 sleep) is not supported on hackintosh. You should disable it: sudo rm /var/vm/sleepimage sudo mkdir /var/vm/sleepimage Always check your hibernatemode after updates and disable it. System updates…
Spec 更正: 上面紅色框框應該還要再增加一個 ILIM pin 硬體所設定的 input current limit, 也就是說 input current limit 最多可以從這 3 個 ILIM pin.IINLIM register.IDPM_LIM register 其中1個 來決定 input current limit. Supplement mode : 在上圖的 左方DPM的最後階段, 若 system load 持續增加, Ibat 的 Ichg 會減至0, 若 syst…
本章主要介绍Linux内核的内存管理. kmalloc函数的内幕 不正确所获取的内存空间清零 分配的区域在物理内存中也是连续的 flags參数 <linux/slab.h> <linux/gfp.h> GFP_KERNEL 在空暇内存较少时把当前进程转入休眠以等待一个页面 分配内存的函数必须是可重入的 GFP_ATOMIC 用于在中断处理例程或其它执行于进程上下文之外的代码中分配内存,不会休眠 GFP_USER 用于为用户空间页分配内存.可能会休眠 GFP_HIGHUSER 类似于…