- 博客(13)
- 资源 (87)
- 收藏
- 关注
原创 linux电源管理架构
linux电源管理非常复杂,牵扯到系统机的待机、频率电压变换、系统空闲时间的处理以及每个设备驱动对系统待机的支持和每个设备的运行时runtime电源管理,可以说它和系统中的每个设备驱动都息息相关。linux内核电源管理的整体架构, 1)CPU在运行时根据系统负载进行动态电压和频率变换的CPUFreq 2) CPU在系统空闲时根据空闲的情况进行低功耗模式的CPUIdle 3)多核系统内下
2017-01-21 23:01:42 3045
原创 linux中的regulator
Regulator模块用于控制系统中某些设备的电压/电流供应。在嵌入式系统(尤其是手机)中,控制耗电量很重要,直接影响到电池的续航时间。所以,如果系统中某一个模块暂时不需要使用,就可以通过regulator关闭其电源供应;或者降低提供给该模块的电压、电流大小。regulator常用概念Regulator : 电源芯片, 比如电压转换芯片 Consumer : 消费者,使用电源的部件, Regul
2017-01-20 00:41:23 1664
原创 设备驱动中的pci(kernel-4.7)
PCI 总线架构主要被分成三部分: 1.PCI 设备。 符合 PCI 总线标准的设备就被称为 PCI 设备,PCI 总线架构中可以包含多个 PCI 设备。Audio 、LAN 都是一个 PCI 设备。PCI 设备同时也分为主设备和目标设备两种,主设备是一次访问操作的发起者,而目标设备则是被访问者。2.PCI 总线。 PCI 总线在系统中可以有多条,类似于树状结构进行扩展,每条 P
2017-01-19 23:45:35 1960
原创 设备驱动中的mmc(kernel-4.7)
MMC的体系结构,其分为三层 /dev下设备文件访问MMC/SD/SDIO用户空间 |--------------------|-----------------------------------------------------内核空间 \ / MMC Card层(对应具体的设备驱动,如MMC/SD卡块设备驱
2017-01-16 23:09:18 1661
原创 usb otg探索
USB系统组成USB标准中将USB系统描述为三个部分:USB主设、USB从设、设备间联通。 一个USB主设需要根据协议对数据的传输增加相应的协议信息以及协议的解析(Protocol Engine);需要对传输的数据进行串行化及解串行化(SIE-Serial Interface Engine);需要对数据传输的差错进行检测、处理(ErrorHandling)等: 而软件层上需要对USB主设
2017-01-16 14:30:30 849
原创 多线程编程实例练习
pthread_join使一个线程等待另一个线程结束。代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。#include <pthread.h> #include <stdio.h> #include <stdlib.h>
2017-01-12 21:11:30 2470
原创 android usb gadget分析
Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c。这个文件实现USB的上层应用协议。 首先包含了一些系统级别的头文件,如模块、电源管理、of API等 #include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#
2017-01-10 23:51:39 6189
原创 设备驱动中的regmap
regmap 机制是在 Linux 3.1 加入进来的特性。主要目的是减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器。其实这就是内核做的一次重构。regmap 除了能做到统一的 I/O 接口,还可以在驱动和硬件 IC 之间做一层缓存,从而能减少底层 I/O 的操作次数。 以一个 I2C 设备为例。读写一个寄存器,肯定需要用到i2c_transfer这样的 I2C 函数
2017-01-09 23:31:38 9078
原创 设备驱动中的iomem(kernel-4.7)
对于外设的访问,最终都是通过读写设备上的寄存器实现的,寄存器不外乎:控制寄存器、状态寄存器和数据寄存器,这些外设寄存器也称为“IO端口”,并且一个外设的寄存器通常是连续编址的。不同的CPU体系对外设IO端口物理地址的编址方式也不同,分为I/O映射方式(I/O-mapped)和内存映射方式(Memory-mapped)。Linux设计了一个通用的数据结构resource来描述各种I/O资源(如:I/O
2017-01-06 15:36:59 1218
原创 设备驱动中的misc(kernel-4.7)
Linux里面的misc杂项设备是主设备号为10的驱动设备,它的注册跟使用比较的简单,所以比较适用于功能简单的设备。 miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。 在内核中用s
2017-01-05 21:49:17 1585
原创 linux usb枚举过程分析
插入一个 USB设备的处理机制总体计: 1. 中断定时查询: 2. 总体架构设计: 3. 解析各个部分:中断定时查询: Hub层处理 usb枚举 当守护程序第一次运行或usb port上状态发生变化,守护进程被唤醒都会运行hub_events函数,这个函数在usb系统中处理核心位置,usb的枚举过程就是由它完成。usb具体的枚举流程: hub_events函数sta
2017-01-05 16:07:34 11373 4
原创 设备驱动中的spin_lock(kernel-4.7)
在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin_lock。1、spin lock的特点 总结spin lock的特点如下: (1)spin lock是一
2017-01-03 23:24:27 1272
原创 设备驱动中的inode(kernel-4.7)
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在”块”中,那么很显然,
2017-01-03 22:38:17 1478
Telit_LM940_Hardware_User_Guide_r4
2018-06-12
Amazon Sagemaker端到端的托管机器学习平台
2018-06-06
高通手机RF PCB LAYOUT GUIDELINES
2018-05-30
ARM System Developer’s Guide Designing and Optimizing System Software
2018-05-29
D1_03_Sebastien_Dudek_HomePlugAV_PLC
2018-05-28
80-NB715-1_G_Making_First_Call_on_NikeL
2018-04-24
MTK_Wi-Fi_SoftAP_Software_Programming_Guide_v4.2
2016-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人