自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于USB麦克风框架

最近遇到一个问题:插入带麦克风的USB摄像头,摄像头可以正常输出图像但是没有声音,跟踪了一下整个框架记录一下先从kernel入手:kernel/sound/usb/card.c当插入USB麦克风,USB Core会通过注册的usb_audio_ids 匹配到usb_audio_probe()函数static struct usb_device_id usb_audio_ids [] = {#include "quirks-table.h" { .match_flags = (U.

2021-02-10 12:14:15 716

原创 Android HAL层库加载原理

Android HAL层的由来:由于市面做移动芯片的厂商很多,大部分厂商考虑到自己硬件的设计架构、安全、专利等方面原因,不愿意公开自己的这方面代码,也出于不同厂商硬件架构不太一样,适配开发难度周期长,GOOGLE在kernel之上加了一个HAL层,只要各个厂商实现Android 所需要的功能接口,可以以库的方式提供不用开源。问题来了,android如何实现针对不同的Hardware Module进行通用性调用的呢?以加载camera HAL层库为例:#define CAMERA_HARDWARE_NO

2021-02-10 12:04:00 251 1

原创 F2FS格式化过程

f2fs_super_block:struct f2fs_super_block { __le32 magic; /* Magic Number */ __le16 major_ver; /* Major Version */ __le16 minor_ver; /* Minor Version */ __le32 log_sectorsize; /* //log2 sector

2021-02-10 11:58:40 943

原创 F2FS MOUNT过程

整个磁盘区域被F2FS设计为6个区域,分别是Superblock,Checkpoint,Segment Info Table,Node Address Table,Segment Summary Area,以及Main Area。前5个区域总称为元数据区域,保存的是跟F2FS直接相关的元信息,而最后一个区域是保存文件数据的主要区域。元数据区域的主要作用是维持F2FS的一致性,然而频繁地修改元数据区域的数据会带来性能下降,也会导致磁盘寿命的减少,因此F2FS给每个区域在内存中创建了一个专门的数据结构..

2021-02-10 11:53:08 1112 2

原创 F2FS 之 元数据

Superblock 结构Superblock保存了F2FS的核心元数据的结构,包括磁盘大小,元区域的各个部分的起始地址等。Superblock在元数据区域的物理结构Superblock区域是由两个struct f2fs_super_block结构组成,互为备份。Superblock物理存放区域结构f2fs_super_block是F2FS对Superblock的具体数据结构实现,它保存在磁盘的最开始的位置(其实偏移了0x400),F2FS进行启动的时候从磁盘的前端直接读取出来。struct

2021-02-10 11:27:44 591

原创 F2FS 基础支持三

默认块分配在运行时,F2FS在“Main Area”区域管理6个活跃的log,分别是Hot/Warm/Cold node log和Hot/Warm/Cold data logs:(1) Hot node contains direct node blocks of directories.(2) Warm node contains direct node blocks except hot node blocks.(3) Cold node contains indire

2021-02-10 10:43:13 248

原创 F2FS 基础知识二

1.文件索引树结构大多数现代文件系统都喜欢使用 B-trees 或类似的结构来管理索引(index)以定位文件中的 blocks。大多数文件系统中通过使用“extents”来减少文件数据块的总索引大小。F2FS 不采用 B-tree 结构管理索引,也不使用extents减少文件数据块索引的大小(虽然F2FS为每个节点(node)维护一个extent作为提示)所谓的extent指的是一段连续的物理磁盘块,这样,只需要一个extent数据结构我们就能描述一段很长的物理磁盘空间,性价比很高。ext4文件

2021-02-10 10:41:19 1476

原创 F2FS 基础知识一

整个磁盘区域被F2FS设计为6个区域,分别是Superblock,Checkpoint,Segment Info Table,Node Address Table,Segment Summary Area,以及Main Area。前5个区域总称为元数据区域,保存的是跟F2FS直接相关的元信息,而最后一个区域是保存文件数据的主要区域。元数据区域的主要作用是维持F2FS的一致性,然而频繁地修改元数据区域的数据会带来性能下降,也会导致磁盘寿命的减少,因此F2FS给每个区域在内存中创建了一个专门的数据结构用于..

2021-02-10 10:29:59 2441 1

原创 CDC EEM-USB网络共享

客户用我们的台式Android 7 高通设备通过母口USB上网,开机一段时间内会出现ping不通的问题排查。1.CDC EEM USB设备插入上位机时,会被usbnet_probe()识别为USB网卡设备,然后进一步被识别为CDC EEM设备,是根据CLASS=2,SUBCLASS=0x0c,PROTO=7来识别的。CDC EEM设备:cdc_emm.c#define USB_CLASS_COMM 2#define USB_CDC_SUBCLASS_EE.

2021-02-10 10:12:35 1354

原创 MSM8937-Kernel 内存分布情况

物理内存加载//start_kernel()->setup_arch()->early_init_dt_scan_nodes()->early_init_dt_scan_memory()//从dts文件中加载物理内存early_init_dt_scan_memory(){ early_init_dt_add_memory_arch(base=0x80000000, size=0x40000000);}void __init __weak early_init_dt_add_m

2021-02-04 11:46:23 1446 1

原创 Kernel学习笔记之Buddy系统 __free_one_page()

Kernel5.11.0-rc2源码:static inline void __free_one_page(struct page *page,unsigned long pfn,struct zone *zone, unsigned int order,int migratetype, fpi_t fpi_flags){ struct capture_control *capc = task_capc(zone); unsigned long buddy_pfn; unsigned lo.

2021-01-27 13:54:39 636 2

原创 Android9-网络架构

WLAN驱动加载驱动源码目录:启动WPA_SUPPLICANTwpa_supplicant是一个连接、配置WIFI的工具源码位置服务声明部分:device/qcom/common/rootdir/etc/init.qcom.rc注意这个服务一开始是disable的wpa_supplicant的启动是通过属性控制服务的启动:这样wpa_supplicant就被启动了,可以用来控制wlanWIFI搜索DHCPAndroid8之前版本:Android8之后.

2021-01-25 13:44:31 413 1

原创 AArch64架构内存布局及线性地址转换

AArch64 Linux通常使用以下配置:4KB页面, 使用3级或4级转换表,支持39位(512GB)或48位(256TB)的虚拟地址。64KB页面,使用2级转换表,支持42位(4TB)虚拟地址他们的内存布局是一致的以内核defconfig默认的4KB page + 4 levels配置为例,LINUX在arm架构上把虚拟地址空间划分为2个空间, 虚拟地址和内核地址, 每个空间最大支持256TB.start      

2021-01-14 15:41:10 1494 1

原创 Kernel学习笔记-start_kernel()

@Kernel学习笔记-start_kernel()内核常用到的宏:__read_mostly: ##宏定义在 arch/arm/include/asm/cache.h#define __read_mostly __attribute__((__section__(".data..read_mostly"))) ##实例:bool early_boot_irqs_disabled __read_mostly; ##用来标记 early_boot_irqs_disabled 这个变量经常被读取

2021-01-14 15:22:20 243

msm8937芯片资料

msm8937芯片资料

2021-01-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除