- 博客(54)
- 收藏
- 关注
原创 初识Linux内核--1
Linux内核启动分为三个阶段:引导加载(BIOS/UEFI初始化、加载内核)、内核初始化(架构设置、子系统初始化)和用户空间启动(init进程)。硬件抽象层通过架构代码、驱动框架、内存管理和中断子系统实现硬件差异屏蔽,提供统一接口。关键实现包括多级页表抽象、内存区域划分、中断号统一管理等,使内核能适配不同硬件平台。
2025-12-15 17:14:43
224
原创 Tracepoint 机制
Linux内核Tracepoint机制是内核预定义的静态探测点,用于高效收集运行时信息。Tracepoint包含名称、开关状态和桩函数,通过debugfs向用户态提供数据输出。相比printk,它将信息存入ringbuffer,并通过钩子函数实现定制化数据采集。开发者可通过/sys/kernel/debug/tracing目录查看所有Tracepoint,使用TRACE_EVENT宏创建包含6个组件的自定义跟踪点,包括名称、原型、参数、数据结构、赋值和输出格式。内核通过DEFINE_TRACE定义trace
2025-11-04 11:14:29
916
原创 kmalloc内存池的设计与实现
:数组中的索引(index)通常对应内存块尺寸的2的次幂(如index=3对应8B,2^3=8)。内核在启动初始化时,就通过kmem_cache_create接口预先创建好一系列特定尺寸的slab cache,当内核代码调用kmalloc申请内存时,会根据请求的大小自动选择最合适的slab cache进行分配。内核中除了针对特定数据结构task_struct/mm_struct等的专用slab内存池外,还存在大量对小内存的需求,如8B/16B等,kmalloc内存池体系就是为了高效满足这种需求设计的。
2025-09-30 10:47:05
647
原创 缺页中断处理机制
动态映射区,内核通过vmalloc()分配内存后,会立即分配物理页并修改内核页表,当进程访问这边新vmalloc区域时,发现页表内核部分的对应的项为空,就会触发缺页,此时执行vmalloc_fault,该函数的主要工作就是将主内核页表 中对应的顶级页目录项同步到当前进程的页表内核部分。真正的物理内存分配与映射,是延迟到第一次访问该区域,从而触发缺页中断时,由内核根据vma的类型(匿名/文件、私有/共享)和访问类型(读/写),以一种“用到再给”的懒惰策略完成的。
2025-09-29 15:33:14
521
原创 EDK2编译报错:BrotliCompress.c:20:10: fatal error: ./brotli/c/common/constants.h: No such file or directo
解决EDK2环境搭建中编译报错
2025-03-21 10:33:48
716
1
原创 内存管理之匿名页面
匿名页面在刚分配的时候会加入到active LRU链表的头部,在活跃LRU链表移动一段时间后 ,会到达链表的尾部,shrink_active_list()会将该页加入到不活跃LRU链表中,然后shrink_inactive_list()会扫描不活跃链表,然后通过add_to_swap()为该页面分配交换区,再进过pageout()把该页面写到交换分区。匿名页面的建立是在缺页中断分配完成之后,此时已经建立了进程虚拟地址和物理地址之间的映射关系,用户进程访问虚拟地址就可以访问到匿名页面中的内容。
2025-01-14 19:24:17
207
原创 内存管理之页面回收
在LRU算法中新产生的页面被添加到链表的开头,当系统内存紧张时,LRU链表尾部的页面将会离开并被换出,当系统再需要这些页面的时候,会重新置于链表的开头,也是会存在一种情况,频繁被使用的页面,也会不可避免的会被换出。内存紧张时总是优先换出文件映射的文件缓存页面,而不是匿名页,因为大多数情况下,文件混存页面不需要被回写到磁盘,除非页面内容被修改了,也就是脏页,匿名页面总是要在写入交换分区之后,才能被换出。直接内存回收是同步回收,就是执行页面回收的进程就是应用进程本身,会阻塞调用者进程的执行。
2025-01-13 20:53:05
194
原创 Linux内存管理调试
1. 当pages free小于pages min,说明所有内存耗尽,此时说明内存压力过大,会开始触发同步回收,表现为系统卡死,分配内存被阻塞,开始尝试碎片整理、内存压缩,如果都不奏效,则开始执行 OOM Killer,直到pages free大于pages high。2. 当pages free在pages min和pages low之间,说明内存压力较大,kswapd0线程开始回收内存,直到pages free大于pages high。slab相关信息,包括总页面大小,可回收页面和不可回收页面。
2025-01-10 11:34:17
83
原创 解决grub中编译报错
O 后指定平台架构,是ARM还是x86,像search serial linux等这些,都是mod模块,如果make完,在grub-core中会生成很多.mod文件,如果命令中没有对应的.mod文件,就会报错。1、grub-core的编译规则,在执行完configure后会自动生成,因此需要添加编译规则,不应该在生成的Makefile中添加,需要在Makefile.in中更改;因此添加功能源代码后,需要在这两个文件也要,添加规则进入,不然在编译的时候,会报链接不到接口,报:not define!
2024-11-07 19:46:28
642
1
原创 IMA/EVM开发和测试流程
评估的含义是在进程存取文件之前,内核先判断文件的完整性度量值和预先存入到文件的扩展属性“security.ima”中的值是否一致,如果一致则允许存取操作,不一致则拒绝。EVM 子系统将安全相关的扩展属性的值合在一起作为消息输入,将密钥“evm-key”作为密钥输入,算出当前的 HMAC 值,用这个值和之前存储在扩展属性 security.evm 中的值进行比较,确定文件的安全相关扩展属性的完整性是否被破坏。同样,EVM的扩展属性security.evm的值也有两种形式,一种是HMAC,另一种是数字签名。
2024-10-21 11:26:51
1322
原创 cgroup基本原理与使用
在cgroups v2中,虚拟文件系统通常挂载在`/sys/fs/cgroup/`,并且不同控制器的文件不再分散,而是统一到一个cgroup目录下。说明:控制该 cgroup 的内存换出到 swap 的倾向,值在 0 到 100 之间,数值越大表示更倾向于将内存换出到 swap。说明:设置该 cgroup 的内存软限制,允许 cgroup 在有剩余内存时使用更多的内存,但当系统内存紧张时会首先回收超出部分。说明:控制当进程迁移到一个新的 cgroup 时是否将其当前的内存使用量一起迁移。
2024-09-18 11:00:30
395
原创 Linux中RT-Mutex实现
本文主要梳理优先级继承的基本原理,优先级继承主要是用来解决优先级反转,可以简单理解为一个进程在当前进程拥有的锁上阻塞时,会继承另一个进程的优先级。举个例子说明,进程A、B、C,其中A优先级最高,B次之,C最小,那么当 A 在 C 拥有的锁上阻塞时,C 将继承 A 的优先级。因此,如果 B 变为可运行状态,它将不会抢占 C,因为此时 C 具有 A 的高优先级。一旦 C 释放锁,它将失去继承的优先级,然后 A 可以继续使用 C 拥有的资源。
2024-07-31 16:58:12
1220
原创 UEFI和Legacy简介
Legacy启动模式是指BIOS 固件用来初始化硬件设备的引导过程,Legacy启动模式包含一系列已安。目前UEFI替代Legacy的极大原因就是,UEFI使用GPT的分区引导方案,支持更大的硬盘。Legacy下安装的系统,就会调用Legacy引导模式启动,同理如果检测到是UEFI下安装的系统,则。另外,在UEFI规范中还有个兼容模块—CSM,是 一个特殊模块,可以为不支持 UEFI 的系统和硬。时,Legacy会切换到列表中的下一个设备并不断重复此过程,直到找到引导加载程序,否则返回。
2023-12-28 15:30:33
979
原创 UEFI开发 - 编译Option ROM之解决error: Cyclic dependency detected while generating rule
基于UEFI规范进行VBIOS开发
2023-08-30 17:11:04
584
原创 修改无法被git检测到,导致无法提交修改
本地代码仓中新增文件夹,文件夹中包含所有功能代码,执行git status。git add -f 修改的内容。无文件要提交,干净的工作区。就可以进行代码提交了!就会显示出来,然后执行。
2023-08-23 15:55:04
1295
原创 AIS架构之QCarCam API介绍以及代码实战
本文旨在通过调用libais_client相关接口实现同时打开多路摄像头,常见的车载应用场景中,像AVM就是同时打开前、后、左、右4路摄像头,环视应用拿到4路图像数据后,进行融合拼接,呈现出360环视效果。在实现同时打开4路camera之前,首先介绍下常用的QCarCam API。
2023-05-24 16:25:24
4982
13
Android v4l2 camera apk
2022-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅