
源码分析
文章平均质量分 86
g_salamander
这个作者很懒,什么都没留下…
展开
-
i2c 子系统分析
一、i2c驱动核心层分析i2c驱动核心层主要为设备驱动层提供设备注册、通信、管理等接口,同时连接i2c控制器驱动。这里首先分析i2c子系统中比较重要的几个结构体:1、driverstruct i2c_driver { unsigned int class; // 驱动支持的设备类型,如传感器、eeprom等 /* Notifies the driver t原创 2012-02-27 14:46:55 · 3866 阅读 · 0 评论 -
dvfs 解析
DVFS(Dynamic Voltage and Frequency Scaling)动态电压频率调节,是一种实时的电压和频率调节技术。在 CMOS 电路中功率消耗主要可以分为动态功率消耗和静态功率消耗,公式如下: 其中 C 代表负载电容的容值,V 是工作电压,α 是当前频率下的翻转率,f为工作频率,I_dq 代表静态电流。公式的前部分代表的是动态功率消耗,后部分则代表的是静态功率消耗。从公式中可以看出,想要降低动态功率消耗可以从C、V、α、f 着手,对于软件来讲常用的调节方式只涉及到 V、f 两原创 2013-11-29 17:49:48 · 17863 阅读 · 1 评论 -
uboot 命令分析(二)
1、setenv 命令用于设置环境变量,用法介绍如下# setenvsetenv - set environment variablesUsage:setenv name value ... - set environment variable 'name' to 'value ...'setenv name - delete environment variab原创 2013-11-19 19:07:42 · 18397 阅读 · 2 评论 -
genalloc — 通用内存分配器
genalloc 是 linux 内核提供的通用内存分配器,源码位于 lib/genalloc.c。这个分配器为独立于内核以外的内存块提供分配方法,采用的是最先适配原则,android 最新的ION 内存管理器对ION_HEAP_TYPE_CARVEOUT 类型的内存就是采用的这个分配器。1、基础数据结构首先看下分配器用到的几个数据结构,struct gen_pool 用来描述一个内存原创 2013-02-02 16:09:50 · 7444 阅读 · 0 评论 -
uboot 启动流程分析(二) — 第二阶段
在 uboot 第一阶段启动完成后将会调用 start_armboot 开始第二阶段的启动流程,这个阶段的代码由 c 语言编写,分析如下:一、基础数据结构第二阶段主要用到了两个数据结构即 gd_t 和 bd_t,其定义如下:/* 全局数据结构 */typedef struct global_data { bd_t *bd; /* 指向板级原创 2013-01-04 17:51:52 · 11107 阅读 · 5 评论 -
uboot 命令分析(一) — bootm
bootm 用于将内核镜像加载到内存的指定地址处,如果有需要还要解压镜像,然后根据操作系统和体系结构的不同给内核传递不同的启动参数,最后启动内核。一、arm 架构处理器对 linux 内核启动之前环境的五点需求1、cpu 寄存器设置 * R0 = 0 * R1 = 板级 id * R2 = 启动参数在内存中的起始地址2、cpu 模式 * 禁止所有原创 2013-01-04 17:52:35 · 21428 阅读 · 2 评论 -
android gralloc 流程分析
Android 中 lcd 是一个帧缓冲设备,驱动程序通过处理器的 lcd 控制器将物理内存的一段区域设置为显存,如果向这段内存区域写入数据就会马上在 lcd 上显示出来。Android 在 HAL 中提供了gralloc 模块,封装了用户层对帧缓冲设备的所有操作接口,并通过 SurfaceFlinger 服务向应用提供显示支持。在启动过程中系统会加载 gralloc 模块,然后打开帧缓冲设备,获原创 2013-01-04 17:50:49 · 16980 阅读 · 2 评论 -
android button light 流程分析(三) — framework
一、初始化信息首先看看Android中的几种电源状态定义,这几个值定义了不同的led开闭状态以及lcd背光的不同亮度模式: // flags for setPowerState private static final int SCREEN_ON_BIT = 0x00000001; private static final int SCREEN_原创 2012-09-05 18:55:39 · 8901 阅读 · 2 评论 -
android button light 流程分析(二) — HAL & JNI
一、基础数据信息首先看一下HAL定义的light类型:/** * The id of this module */#define LIGHTS_HARDWARE_MODULE_ID "lights"/* * These light IDs correspond to logical lights, not physical. * So for example, if yo原创 2012-09-05 17:53:43 · 6126 阅读 · 0 评论 -
android 休眠唤醒机制分析(一) — wake_lock
Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统仍然需要正常运行的情况下使用,比如听歌、传输很大的文件等。本文主要分析driver层wake_lock的实现。一、wake_lock 定义和接口enum { WAKE_LOCK_SUSP原创 2012-09-14 13:33:03 · 51944 阅读 · 1 评论 -
android 休眠唤醒机制分析(三) — suspend
前面我们分析了休眠的第一个阶段即浅度休眠,现在我们继续看休眠的第二个阶段 — 深度休眠。在深度休眠的过程中系统会首先冻结所有可以冻结的进程,然后依次挂起所有设备的电源,挂起顺序与设备注册的顺序相反,这样保证了设备之间电源的依赖性;直至最后进入省电模式,等待用户或者RTC唤醒;在唤醒过程中则会按照设备注册的顺序依次恢复每个设备的电源进入正常工作状态,解冻相关的进程,然后再进行浅度休眠的唤醒流程。原创 2012-09-17 16:41:42 · 14979 阅读 · 0 评论 -
android 休眠唤醒机制分析(二) — early_suspend
early_suspend是Android休眠流程的第一阶段即浅度休眠,不会受到wake_lock的阻止,一般用于关闭lcd、tp等设备为运行的应用节约电能。Android的PowerManagerService会根据用户的操作情况调整电源状态,如果需要休眠则会调用到HAL层的set_screen_state()接口,在set_screen_state()中会向/sys/power/state节点原创 2012-09-15 14:51:12 · 16862 阅读 · 1 评论 -
framebuffer 子系统分析
一、常见结构体分析1、fb_infostruct fb_info { int node; int flags; struct mutex lock; /* 调用open/release/ioctl时的锁 */ struct mutex mm_lock; /* fb_mmap和smem_*的锁 */ struct fb_var_screeninfo var; /* 当前LC原创 2012-05-11 13:26:42 · 4740 阅读 · 0 评论 -
android button light 流程分析(一) — driver
一、led-classled-class是button light driver的核心层,代码位于drivers/leds/目录下,提供了一些数据结构和接口,其中创建了一个leds设备类,用于管理系统所有的led,代码如下:static int __init leds_init(void){ leds_class = class_create(THIS_MODULE, "leds"原创 2012-09-05 13:53:12 · 4613 阅读 · 2 评论