随笔分类 - Kernel
摘要:Trace32 CMM概述 CMM(Command Macro Model)是由Lauterbach公司定义的一种脚本语言Q,用于控制它的TRACE32调试器系列。CMM脚本通常用于自动化调试或测试任务,例如加载代码,配置目标硬件,运行测试等。 1.1 Trace32 系统命令SYStem SYSt
阅读全文
摘要:背景 内核中有很多判断条件在正常情况下的结果都是固定的,除非极其罕见的场景才会改变,通常单个的这种判断的代价很低可以忽略,但是如果这种判断数量巨大且被频繁执行,那就会带来性能损失了。内核的static-key机制就是为了优化这种场景,其优化的结果是:对于大多数情况,对应的判断被优化为一个NOP指令,
阅读全文
摘要:1. 背景介绍 在偶然的一次实验中(具体是pinctrl实验),我发现有些平台的pincontroller驱动起得很晚,而pinctrl client驱动却起得很早,在设备驱动模型中probe之前又会进行管脚复用的相关设置,按照常理来讲,这就产生了某种依赖性: pincontroller必须尽早启动
阅读全文
摘要:T32 MARM介绍 T32 MARM是Lauterbach的Trace32软件包的一部分,专门用于ARM基础架构的微处理器。Trace32是一款强大的系统级调试器广泛用于嵌入式系统和微处理器的开发。 T32 MARM提供了对ARM核心和多核心设备的全面支持,支持各种不同的ARM核心,包括Corte
阅读全文
摘要:查找 Linux 内核中 F2FS 文件系统相关的补丁(比如针对内核 5.15 的补丁或 feature),可以参考以下几个权威渠道: 1. Kernel.org 的 git 仓库 这是 Linux 内核官方源代码仓库。 地址:https://git.kernel.org/ F2FS 通常在子目录
阅读全文
摘要:Trace32工具解压 1.使用7-zip解压两次: 2.查看安装手册 3.安装步骤按照文档中的1、2、3进行 4.在解压文件中找到安装工具,如下: 5.准备安装 点击Next: 接着点击I accept the... 设置安装目录 接着选择安装目录: 6.指定安装目录 7.选择安装类型 8.选择平
阅读全文
摘要:Linux内核中unlikely宏的作用 在Linux内核中,unlikely宏是一个非常重要的工具,它主要用于 指导编译器进行代码优化,以提高程序的执行效率。 unlikely宏的定义与作用 定义: unlikely宏通常定义为 __builtin_expect(!!(x), 0),其中x是你要判
阅读全文
摘要:Linux内核中的PAGE_SHIFT 什么是PAGE_SHIFT? 在Linux内核中,PAGE_SHIFT是一个非常重要的宏,它定义了一个页的大小,通常是2的幂次方。这个值表示了虚拟地址空间中一个页的偏移量占用了多少位。换句话说,它告诉我们一个页的大小是多少字节。 PAGE_SHIFT的作用 页
阅读全文
摘要:1、前言 struct kref结构体是一个引用计数器,它被嵌套进其它的结构体中,记录所嵌套结构的引用计数。引用计数用于检测内核中有多少地方使用了某个对象,每当内核的一个部分需要某个对象所包含的信息时,则该对象的引用计数加1,如果不需要相应的信息,则对该对象的引用计数减1,当引用计数为0时,内核知道
阅读全文
摘要:由于Linux版本的在不断更新,当设备驱动去兼容不同版本的内核时,需要知道当前使用的内核源码版本,以此来调用对应版本的内核API,这两个宏定义在文件 /usr/include/linux/version.h #define LINUX_VERSION_CODE 263213 #define KERN
阅读全文
摘要:内核代码中充斥着大量的__iomem修饰的void类型的指针,像下面这样: void __iomem *devm_ioremap_resource(struct device *dev, const struct resource *res) { resource_size_t size; void
阅读全文
摘要:pr_debug 是 Linux 内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同。如果定义了 CONFIG_DYNAMIC_DEBUG 配置选项,pr_debug 会扩展为 dynamic_pr_debug,这允许在运行时动态地控制调试信息的输出。如果没有定义 CONFIG_DYNA
阅读全文
摘要:背景 高通平台下提供了一个工具,专门用来抓取内核死机以后的dump信息。如果只是非系统层面的crash(例如底层应用,安卓程序),则不能抓取dump信息。 在阅读一些文档的时候知道有这个功能,但是一直没时间尝试。 介绍 流程为: 1、进入dump模式:系统需要触发crash, 同时机器需要进行war
阅读全文
摘要:Meltdown是2018年初公开的一种严重的计算机安全漏洞,影响了多种处理器,包括英特尔、ARM和某些AMD处理器。其原理基于利用现代CPU的“推测执行”(speculative execution)和“缓存时间差异”(cache timing)来泄露内存数据。以下是Meltdown漏洞的工作原理
阅读全文
摘要:find_sys_call_table 和 kallsyms_lookup_name 都可以用于查找内核符号,但它们的具体作用和使用场景有所不同。以下是两者的详细对比: 1. find_sys_call_table 作用 find_sys_call_table 是一种通过遍历内核内存或者其他方式来手
阅读全文
摘要:下面是在实际工作中遇到的一次内核(5.4.110)访问非法内存地址(空指针)导致出错的现场,在这里记录一下简单的分析流程为以后遇到类似的问题作为参考。 [ 220.619861] Unable to handle kernel NULL pointer dereference at virtual
阅读全文
摘要:在Linux内核中,"backport printk"和"front printk"都是用于记录内核消息和调试信息的机制,但它们的工作方式和使用场景有一些区别。 "backport printk"是一种在内核中记录消息和调试信息的机制,可以将这些信息输出到控制台、串口、网络等目标。它通常用于在内核启
阅读全文
摘要:1 简介 这个文档记录了用 kGDB 调试 Linux 内核的全过程,都是在前人工作基础上的一些总结。以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台。 要使用 KGDB 来调试内核,首先需要修改 config 配置文件,打开相应的配置,配置内核启动参数,甚至修改串口驱动添加 poll
阅读全文
摘要:问题描述 内核调试中最常见的一个问题是:内核Panic后,如何快速定位到出错的代码行? 就是这样一个常见的问题,面试过的大部分同学都未能很好地回答,这里希望能够做很彻底地解答。 问题分析 内核Panic时,一般会打印回调,并打印出当前出错的地址: kernel/panic.c:panic(): #i
阅读全文
摘要:简介 pstore文件系统(是的,这是个文件系统)是Persistent Storage的缩写,最早在2010年由 Tony Luck 设计并合入Linux主分支,设计的初衷是在内核Panic/Oops时能自动转存内核日志(log_buf),在Panic重启后,把转存的日志以文件形式呈现到用户空间以
阅读全文


浙公网安备 33010602011771号