brk实现

brk系统调用主要实现在mm/mmap.c函数中。 [mm/mmap.c] SYSCALL_DEFINE1(brk, unsigned long, brk) { unsigned long retval; unsigned long newbrk, oldbrk; struct mm_struct ...

yooooooo @ 2020/07/30

camera otp介绍

随着5Meg 、8Meg、12Meg 等高像素摄像头在手机中的应用越来越广,终端客户对camera的成像效果和品质要求越来越高,如何提升摄像头模组的一致性和各方面的性能已显得尤为重要。今天就为大家介绍在高像素模组中被越来越广泛应用的OTP技术。 1. 何谓OTP 全称:OTP(One Time Pr ...

yooooooo @ 2020/07/30

带你遨游USB世界

1、什么是USB USB的全称是Universal Serial Bus,通用串行总线。它的出现主要是为了简化个人计算机与外围设备的连接,增加易用性。USB支持热插拔,并且是即插即用的,另外,它还具有很强的可扩展性,传输速度也很快,这些特性使支持USB接口的电子设备更易用、更大众化。 本文将从USB ...

yooooooo @ 2020/07/18

USB技术浅析

《带你遨游USB世界》中,我们已经初步介绍了USB的整体架构,本文将从以下几个方面继续介绍USB的内容。 USB3.0有什么新特性? TYPEC介绍 otg识别流程 一、USB3.0 USB是史上定义出的最成功的PC外围互连技术,并且已经迅猛地被引入到CE和Mobile领域。仅仅在2006年,就有超 ...

yooooooo @ 2020/07/18

Linux ADF(Atomic Display Framework)浅析---概述

概述 因为工作关系,最近有涉及到ADF(Atomic Display Framework)相关的内容,部分内容来自互联网 ADF(Atomic Display Framework)是Google新增的Display框架,用来替换Framebuffer。 ADF在Android hwcomposer ...

yooooooo @ 2020/07/17

vmalloc函数

kmalloc、vmalloc和malloc这三个常用的API函数具有相当的分量,三者看上去很相似,但在实现上大有讲究。kmalloc基于slab分配器,slab缓冲区建立在一个连续的物理地址的大块内存之上,所以缓冲对象也是物理地址连续的。如果在内核中不需要连续的物理地址,而仅仅需要内核空间里连续的 ...

yooooooo @ 2020/07/08

slab为什么要进行着色处理

大概的简述一下,及cpu读取内存里的东西时,并不会直接去内存去读取,这样会导致读取的数据很慢。cpu会到一级缓存读取所需要的数据,而一级缓存则会去内存里面读取数据,读取的方式是通过缓存行(cache line)的形式来进行读取。当一级缓存内的数据需要置换时,则会将缓存内的数据置换到二级缓存内,然后依 ...

yooooooo @ 2020/06/24

伙伴系统的概述

Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种:一种是之前介绍过的利用非连续内存的分配;另外一种则是用一种有效的方法来监视内存,保 ...

yooooooo @ 2020/06/24

soft lockup和hard lockup介绍

在linux kernel里,有一个debug选项LOCKUP_DETECTOR。 使能它可以打开kernel中的soft lockup和hard lockup探测。 这两个东西到底有什么用处那? 首先,soft/hard lockup的实现在kernel/watchdog.c中, 主体涉及到了3个 ...

yooooooo @ 2020/06/15

linux系统奔溃之vmcore:kdump 的亲密战友 crash

crash 是目前广泛使用的 linux 内核崩溃转储文件的分析工具,掌握 crash 的使用技巧,对于分析定位内核崩溃的问题,有着非常重要的作用。本文首先介绍了 crash 的基本概念和安装方法,其次详细介绍了如何使用 crash 工具分析内核崩溃转储文件,包括各种常用调试命令的使用方法,最后以几 ...

yooooooo @ 2020/06/14

布局文件中的sp、dp还有px的区别

前言: 众所周知,Android厂商非常多,各种尺寸的android手机、平板层出不穷。导致了Android生态环境的碎片化现象越来越严重。Google公司为了解决分辨率过多的问题,在Android的开发文档中定义了px、dp、sp,方便开发者适配不同分辨率的Android设备。对于初级程序员来说理 ...

yooooooo @ 2020/06/11

kvmalloc函数

你应该曾经纠结过是用kmalloc(),还是vmalloc()?现在你不用那么纠结了,因为内核里面现在有个API叫kvmalloc(),可以认为是kmalloc()和vmalloc()的双剑合一。屠龙刀和倚天剑的合体。 内核里面有大量的代码现在都使用了kvmalloc(),譬如: source/ip ...

yooooooo @ 2020/06/10

crash工具分析sysdump使用

一、准备环境 1)获取crash工具。注意区分版本(arm/arm64/x86_64)。 2)获取对应软件版本的符号表文件(如vmlinux),可以将该文件放置 crash工具同一目录下。 3)获取sysdump文件,并把所有sysdump文件追加到一个文件sysdump.core中: 4)使用cr ...

yooooooo @ 2020/05/20

android 8.1 安全机制 — SEAndroid & SELinux

1. SELinux 背景知识 1.1 DAC 与 MAC 在 SELinux 出现之前,Linux 上的安全模型叫 DAC,全称是 Discretionary Access Control,翻译为自主访问控制。 DAC 的核心思想很简单,就是:进程理论上所拥有的权限与执行它的用户的权限相同。比如, ...

yooooooo @ 2020/05/19

伙伴系统分配内存

内核中常用的分配物理内存页面的接口函数是alloc_pages(),用于分配一个或者多个连续的物理页面,分配页面个数只能是2个整数次幂。相比于多次分配离散的物理页面,分配连续的物理页面有利于提高系统内存的碎片化,内存碎片化是一个很让人头疼的问题。alloc_pages()函数有两个,一个是分配gfp ...

yooooooo @ 2020/05/17

ARM64内核内存布局图

ARM64架构处理器采用48位物理寻址机制,最大可以寻找到256TB的物理地址空间。对于目前的应用来说已经足够了,不需要扩展到64位的物理地址寻址。虚拟地址也同样最大支持48位支持,所以在处理器的架构设计上,把虚拟地址空间划分为两个空间,每个空间最大支持256TB。Linux内核在大多数体系结构中都 ...

yooooooo @ 2020/05/11

swapper_pg_dir的作用

在内存系统初始化过程中,有如下代码: 这里,我们看到了神秘的swapper_pg_dir,全局搜索一下,发现了 在head_32.S中,定义了如下的BSS段,BSS段是在内核映像文件中不占空间,但是在内核被加载到内存时,会保留相应的空间。 在BSS段,一共保留了4个页面的空间,分别用initial_ ...

yooooooo @ 2020/05/04

ARM32 页表映射

在32bit中的Linux内核中一般采用3层映射模型,第1层是页面目录(PGD),第2层是页面中间目录(PMD),第3层才是页面映射表(PTE)。 但在ARM32系统中只用到两层映射,因此在实际代码中就要3层映射模型中合并一层 。在ARM32架构中,可以按段(section)来映射,这时采用单层映射 ...

yooooooo @ 2020/05/03

Linux动态频率调节系统CPUFreq之三:governor【转】

在上一篇文章中,介绍了cpufreq的core层,core提供了cpufreq系统的初始化,公共数据结构的建立以及对cpufreq中其它子部件提供注册功能。core的最核心功能是对policy的管理,一个policy通过cpufreq_policy结构中的governor字段,和某个governor ...

yooooooo @ 2020/05/02

Linux动态频率调节系统CPUFreq之二:核心(core)架构与API【转】

"Linux动态频率调节系统CPUFreq之二:核心(core)架构与API" 上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共逻辑向CPUFreq ...

yooooooo @ 2020/04/30