首页
学习
活动
专区
工具
TVP
发布

人人都是极客

专栏作者
495
文章
820604
阅读量
173
订阅数
深入理解 kernel panic 的流程
我们在项目开发过程中,很多时候会出现由于某种原因经常会导致手机系统死机重启的情况(重启分Android重启跟kernel重启,而我们这里只讨论kernel重启也就是 kernel panic 的情况),死机重启基本算是影响最严重的系统问题了,有稳定复现的,也有概率出现的,解题难度也千差万别,出现问题后,通常我们会拿到类似这样的kernel log信息(下面log仅以调用BUG()为例,其它异常所致的死机log信息会有一些不同之处):
刘盼
2023-01-05
1.6K0
ALSA子系统 | 如何添加虚拟声卡
我们知道,asoc框架里面主要包含machine codec platform 这三大部分:
刘盼
2023-01-05
1.8K0
Uboot 大全 | uboot 启动流程(二)
uboot在初始化完成后会为用户提供一个命令行交互接口,用户可通过该接口执行uboot定义的命令,以用于查看系统状态,设置环境变量和系统参数等。为了方便对硬件和驱动的管理,uboot还引入了类似linux内核的设备树和驱动模型特性。当然,为了增加系统的可配置性、可调试性以及可跟踪性等,它还支持环境变量、log管理、bootstage统计以及简单的ftrace等功能。下面将对这些特性做一简单的介绍。
刘盼
2023-01-05
1.4K0
图形驱动技术栈概览
1 说明背景1.1 近来想法1.2 几个概念2 全局视角2.1 应用场景(了解)2.2 大概原理(了解)2.3 技术图景(了解)3 用户空间3.1 OpenGL 和 libGL(了解)3.2 libXCB 和 XServer(了解)3.3 libGL 和 Mesa(了解)4 用户和内核4.1 软件构图(了解)4.2 驱动视角(待掌握)4.3 源码视角(了解)5 内核和固件5.1 工作流程(掌握)5.2 交互途径(掌握)5.3 寄存器组设计(掌握)5.4 通信协议设计(掌握)6 固件和硬件6.1 固件软件设计(掌握)6.2 软件硬件接口(了解)6.3 体系结构简介(了解)6.4 图形流水线(了解)7 参考资料
刘盼
2023-01-05
1.9K0
一文搞定伙伴分配器
当系统内核初始化完毕后,使用页分配器管理物理页,当使用的页分配器是伙伴分配器,伙伴分配器的特点是算法简单且高效,支持内存节点和区域,为了预防内存碎片,把物理内存根据可移动性分组,针对分配单页做了性能优化,为了减少处理器的锁竞争,在内存区域增加1个每处理器页集合。
刘盼
2023-01-05
9720
ALSA子系统 | POP音排查
这个POP音的产生主要是因为codec开始工作时,耳机等输出或mic输入声道上的直流电平跳变产生的;手机或一般的手持设备上不会有负电压,音源信号必须在一个直流电平上(如1/2VDD上)输出,这样一个从0电平到1/2VDD的直流跳变,通过隔直电容后到耳机上必然会产生POP音,同样地对于喇叭输出也类似;codec内部操作某些寄存器也会产生pop,有的时间比较长,需要增加延时。
刘盼
2023-01-05
1.6K0
入门篇-GPU知识概览
做了一段时间的 GPU 固件和驱动开发,加上平时学习的一些零散的知识,最近打算整理,将这些做成一页文章。 主线任务:梳理 GPU 的知识大纲 =====> 对标 GPU入门工程师 支线任务:了解 GPU 硬件工作机理 支线任务:掌握 GPU 固件工作机理 =====> 对标 GPU固件工程师 支线任务:了解 GPU 驱动 和 GPU 固件的交互接口 支线任务:掌握 GPU 驱动工作机理 =====> 对标 GPU驱动工程师 支线任务:了解 GPU 驱动 和 LIBDRM 的交互接口
刘盼
2023-01-05
1.6K0
引导内存分配器
1.引导内存分配器的作用因为内核里面有很多内存结构体,不可能在静态编译阶段就静态初始化所有的这些内存结构体。另外,在系统启动过程中,系统启动后的物理内存分配器本身也需要初始化,如伙伴分配器,那么伙伴分配器如何获取内存来初始化自己呢 ?为了达到这个目标,我们先实现一个满足要求的但是可能效率不高的笨家伙,引导内存分配器。用它来负责系统初始化初期的内存管理, 最重要的, 用它来初始化我们内存的数据结构, 直到我们真正的内存管理器被初始化完成并能投入使用, 我们将旧的内存管理器丢掉。
刘盼
2023-01-05
7910
mmap的系统调用
mmap:进程创建匿名的内存映射,把内存的物理页映射到进程的虚拟地址空间。进程把文件映射到进程的虚拟地址空间,可以像访问内存一样访问文件,不需要调用系统调用read()/write()访问文件,从而避免用户模式和内核模式之间的切换,提高读写文件速度。两个进程针对同一个文件创建共享的内存映射,实现共享内存。2.删除内存映射
刘盼
2023-01-05
1.3K0
Buddy 内存管理机制(下)
这里体现了 Buddy 的核心思想:在内存释放时判断其 buddy 兄弟 page 是不是 order 大小相等的 free page,如果是则合并成更高一阶 order。这样的目的是最大可能的减少内存碎片化。
刘盼
2023-01-05
1.3K0
Buddy 内存管理机制(上)
内存是计算机系统中最重要的核心资源之一,Buddy 系统是 Linux 最底层的内存管理机制,它使用 Page 粒度来管理内存。通常情况下一个 Page 的大小为 4K,在 Buddy 系统中分配、释放、回收的最小单位都是 Page。
刘盼
2023-01-05
1.2K0
分享一篇DMA原理好文
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
刘盼
2023-01-05
9010
万字整理内存管理之Cache
其实现实中,CPU通用寄存器的速度和主存之间存在着太大的差异。两者之间的速度大致如下关系:
刘盼
2023-01-05
7691
一文搞懂 | Linux pinctrl/gpio子系统
pinctrl 子系统和 gpio 子系统虽然难度不大,但在内核里的使用率非常高,本文争取一次性把相关内容介绍一遍。
刘盼
2023-01-05
8600
Linux电源管理之Runtime PM
作者简介:Loopers,码龄11年,喜欢研究内核基本原理 前言 什么是Runtime PM? Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主
刘盼
2022-10-09
1.6K0
通过小实验让你彻底理解VMA
作者简介: Loopers,码龄11年,喜欢研究内核基本原理 在32位机器上,总共有4G大小的虚拟地址空间,其中0-3G是给应用程序使用,3-4G是给内核使用。 在64位机器上,目前还不完全支持64位地址宽度,常见的地址长度有39(512GB)和48位(256TB),目前我使用的模拟器采用的是39位的地址宽度,这样的话用户空间和内核空间各占512GB的地址空间。 当一个应用程序在用户跑起来的时候,它内部是如何正常运行的,通过一个简单的例子详细说明下。 #include <stdio.h> #include 
刘盼
2022-09-28
5630
为什么mmap之后访问地址仍然发生了缺页异常?
作者简介: viho he,ARM64专家,现供职于某芯片公司,专注于Linux内核、BSP、ARM64虚拟化以及与ARM64 SoC相关的各种底软技术 问题简述 在笔者的开发平台上,应用程序使用ION申请cma内存,并用mmap映射到用户地址空间去做写操作。 重点代码摘要如下: 客户希望提高 node->var = some_value; 这里的访问效率(实际代码要复杂些,是申请了一个大数组并往里循环读写数据)。 第一轮分析 首先用perf分析应用程序行为,发现程序在运行时产生了不少page fault
刘盼
2022-09-22
1.3K0
内存管理专栏 | 之内存管理架构
一、内存管理架构 二、虚拟地址空间布局架构 三、物理内存体系架构 四、内存结构 五、内存模型 六、虚拟地址和物理地址的转换 七、内存映射原理分析 一、内存管理架构 内存管理子系统架构可以分为:用户空间、内核空间及硬件部分3个层面,具体结构如下所示:1、用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源。2、内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。3、硬件:处理器包含一个内存管理单元(Memo
刘盼
2022-09-02
1.3K0
文件系统专栏 | 之文件系统挂载
ext4文件系统挂载 大家可以使用以下命令挂载一个u盘到 /mnt目录下: mount -t ext4  /dev/sda1 /mnt 其中mount这个应用程序就是使用了mount函数进行系统调用,其系统调用为: SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,   char __user *, type, unsigned long, flags, void __user *, data) {  return
刘盼
2022-08-31
3.2K0
内核启动时为什么要做线性映射?
作者简介: 周文嘉: 曾服务于ARM、阿里系子公司、HTC等公司。10年以上工作经验,主要从事系统软件开发,涵盖:系统库开发、指令集优化、Linux内核开发等。累计为某些开源社贡献过一定数量的patch。 在 Linux 内核启动之后,对于 32 位的系统来说,他会把 0 ~ 896M 这部分低端内存(low memory)都做线性映射,不管这部分内存是否需要用到。对于 64 位的系统,内核会把所有的物理(一般情况如此,除非物理内存特别大)内存都映射出来。这么做的目的是啥?这里先说结论,然后分析代码。 这么
刘盼
2022-08-26
6090
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档