- 博客(41)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 C1-Ultra FVP调试并运行Linux kernel全程记录,硬核演示如何解决启动问题
本文详细记录了使用C1-UltraFVP和ARM Development Studio搭建ARM64 Linux内核调试环境的过程。通过boot-wrapper-aarch64作为引导加载程序,编译6.19.3版本内核和buildroot制作的rootfs,并解决了四个关键问题:1) 添加FVP安全内存参数;2) 修正CPU ID匹配问题;3) 处理MPAM寄存器访问异常;4) 启用参考计数器。最终成功启动Linux内核,为后续内核源码级研究建立了完善的调试环境。
2026-05-30 20:22:30
225
原创 获取编译并运行ARM64可信系统软件栈(TF-A+OP-TEE+UEFI+Linux)
本文介绍了在FVP_Base_RevC-2xAEMvA平台上构建OP-TEE可信执行环境的完整流程。首先通过repo工具获取4.2.0分支源码,下载对应的FVP模拟器并解压。然后配置编译环境,建议使用Docker容器避免依赖冲突,提供了详细的Dockerfile配置。编译时需要指定FVP_USE_BASE_PLAT=y参数,使用多线程加速构建过程。最后在主机环境运行编译好的软件栈,为后续使用Arm Development Studio进行源码级调试做好准备。整个过程涵盖了从源码获取、环境配置到编译运行的完整
2026-05-26 10:28:35
243
原创 嵌入式工程师能不能干SoC固件架构师,还缺啥?
嵌入式工程师转型SoC固件架构师的核心在于能力升级而非跨行。具备3年以上嵌入式开发经验者,通过补齐五大核心能力缺口即可实现转型:1)深入理解SoC芯片底层架构;2)掌握启动链路设计;3)培养架构设计思维;4)建立功耗/性能/可靠性优化意识;5)具备芯片全流程认知。转型需避免三大误区:过度强调编码能力、盲目追求芯片设计知识、碎片化学习。建议分阶段重点突破软硬件底层知识、启动体系、架构思维等关键领域,3-6个月可实现能力跃迁。嵌入式开发经验是转型的宝贵基础,关键在于从执行层思维升级为系统设计思维。
2026-05-25 14:49:26
411
原创 学习ARM新姿势,理论实践的结合
我用ARM Development Studio和FVP把ARM架构和系统软件栈(从firmware一直到Linux OS)一口气研究了个遍,所有寄存器变化,cache,mmu页表等等都能可视化直观的看到,而且整个系统级软件栈都可以源码级debug,简直不要太爽,比qemu强大一百倍,各个异常级别,安全状态都可以直观的看到,gic,smmu等高级系统组件都可以看到寄存器级别的状态,但是比qemu上手门槛更高,教程也很少,我研究了很久才掌握,一旦掌握你会发现,遇到的所有问题立马就会在脑海里有对策了,所以学习困
2026-05-23 08:46:55
91
原创 记录人生第一个Linux内核Patch被采纳的经历
本文记录了作者提交Linux内核SMMUv3驱动补丁的经历。作者发现驱动代码中DMA内存分配的重试逻辑存在边界条件问题,提交补丁后收到维护者Will Deacon和Robin Murphy的反馈,指出其对DMA API理解的不足。经过修改和重新提交,最终补丁被采纳。作者体会到内核开发的严谨性,认识到底层技术的复杂性,并学习了开源社区的规范流程。这次经历让作者对内核开发有了更深理解,为未来贡献更有价值的补丁奠定了基础。
2026-05-21 13:49:35
375
原创 无需硬件开发板,从零构建并运行ARM aemfvp-a-rme软件栈
本文介绍了Armv-ABaseRevCAEMFVP虚拟平台的使用方法,重点说明aemfvp-a-rme堆栈的配置流程。该平台支持系统级虚拟化探索,包含两个AEM集群,每个最多4核心。文章详细阐述了从环境搭建(Docker配置、Git初始化)、代码获取(repo工具使用)、网络配置(TAP接口创建)到构建运行(Docker容器构建、测试用例执行)的全过程。针对国内用户网络访问困难的问题,作者提供了预打包的源码和编译环境。最后给出了启动基础Shell和测试用例的具体命令示例。
2026-05-18 10:26:45
473
原创 Linux内核SLUB调试之slabinfo工具
Linux内核SLUB调试工具slabinfo使用指南 摘要: slabinfo是Linux内核官方提供的SLUB调试工具,可直接获取内核内存分配器的精确数据。该工具位于内核源码tools/mm目录下,编译后可通过软链接全局调用。使用需root权限,内核需开启CONFIG_SLUB_DEBUG配置。工具核心功能包括:查看完整slab列表、定位高内存占用缓存、排查内存碎片、检测不可回收slab等。通过-r参数可获取详细统计信息,-U参数专门用于排查OOM问题。进阶调试支持动态开启/关闭slab调试功能(FZP
2026-04-08 09:56:47
58
原创 Linux内核SLUB调试功能
SLUB 作为 Linux 内核内存管理的核心组件,其内置调试功能为内存损坏问题提供了 “原生、轻量、精准” 的解决方案。它不仅能覆盖 UMR、UAF、OOB 等常见 bug 类型,还能与 KASAN、UBSAN 形成互补(例如 SLUB 更适合轻量场景,KASAN 更适合全量内存检测)。本文通过一个简单的内核模块演示了slub debug对double free的检测,实际应用中可以检测很多其他类型的bug。
2026-03-10 14:20:40
62
原创 Linux内核UBSAN实战
UBSAN 是 Linux 内核开发的 “UB 捕手”,通过 “编译时插桩 + 运行时检查”,能精准定位数组越界、算术溢出等隐藏 bug。本文通过编写内核模块,完整演示了 UBSAN 的使用流程
2025-10-18 13:12:53
344
原创 KASAN:Linux内核内存错误检测的利器
KASAN 通过轻量级编译器插桩与影子内存映射,可检测越界访问、use-after-free等多种错误,且性能开销远低于传统工具(Generic 模式下运行时开销约 2-5 倍,内存开销增加 1/8)。本文将从背景知识、原理剖析、Kunit 测试几个维度,全面讲解 KASAN 的技术细节与实践方法。
2025-10-18 13:05:27
353
原创 Linux内核Oops - 工具与脚本
本文介绍了定位 Linux 内核 Oops 的关键工具和脚本,包括反汇编(objdump)、地址转换(addr2line、faddr2line)、调试分析(GDB)、状态检查(kernel-chktaint)、栈分析(checkstack)、栈跟踪解析(decode_stacktrace)、指令解析(decodecode)和维护者查询(getmaintainer)。掌握这些工具的使用,能显著提高内核错误排查效率,从 Oops 日志快速定位到具体代码问题。
2025-10-18 13:02:02
414
原创 Linux内核Oops - 输出详解
Oops 输出包含了从错误类型到寄存器状态、从调用栈到内存映射的全方位信息,是内核调试的 "黑匣子"。掌握这些信息的解读方法,能显著提高内核错误排查效率。下一篇文章将介绍如何使用专业工具(如 objdump、GDB 、addr2line等)将 Oops 信息与源代码精确关联,实现错误的快速定位。
2025-10-18 12:55:33
98
原创 Linux内核Oops - 实战
本文介绍了 Linux 内核 Oops 的基本概念和工作原理,通过一个包含 Workqueue 机制的内核模块实战演示了 Oops 的触发过程,并分析了错误原因及修复方法。理解 Oops 的产生机制和输出信息是内核调试的基础,下一篇我们将详细解读 Oops 输出的每一部分内容,帮助开发者更精准地定位内核错误。
2025-10-18 12:49:31
288
原创 Linux内核调试:kdb实战
kdb 以其轻量、直接的交互方式,成为内核调试中快速诊断问题的利器。无论是查看进程状态、分析内存异常,还是设置简单断点,它都能在不依赖外部工具的情况下完成核心调试任务。结合 kgdb 的源码级调试能力,kdb 为 Linux 内核开发提供了灵活且高效的调试方案。
2025-10-18 12:44:35
423
原创 Linux内核kgdb实战:内核源码级调试工具
在 Linux 内核开发中,定位复杂的逻辑错误或内存问题往往需要深入代码细节,可能需要查看变量的值,单步执行代码等操作,而 kgdb 正是为此设计的源码级调试工具。它通过与 gdb 配合,允许在内核调试中使用断点,单步执行等操作,大幅降低了内核级问题的分析难度。本文将全面解析 kgdb 的原理、配置与使用方法。
2025-10-16 18:04:28
266
原创 Linux内核kprobes的原理与实践
本文介绍了Linux内核动态调试技术kprobes的原理与应用。kprobes通过动态插桩技术,无需重新编译内核即可监控函数执行状态,具有低侵入性和细粒度优势。文章详细讲解了kprobes的工作原理,包括指令替换和异常处理流程,并演示了静态和动态两种使用方式:通过内核模块编程实现静态监控,以及利用perf-tools、kprobe event等工具进行动态调试。特别展示了eBPF工具如opensnoop的实际应用,最后指出性能影响和使用注意事项。
2025-06-23 10:03:58
253
原创 Linux Kernel崩溃分析的法宝:Kdump+Crash(下)
本文介绍了使用Kdump+Crash工具分析Linux内核崩溃的方法。首先讲解了/var/crash目录生成的三种文件:dmesg日志、内存快照dump文件以及诊断数据文件。重点演示了如何配置kdump关闭内存页过滤以获取完整内核转储,并使用crash工具分析dump文件中的调用栈(bt)、进程状态(ps)和内核数据结构(struct)。文章还记录了排查过程中遇到的版本兼容性问题及解决方案,最终成功定位到由sysrq触发的手动崩溃。
2025-06-17 19:08:53
439
原创 Linux Kernel崩溃分析的法宝:Kdump+Crash(上)
文中以Ubuntu 24.04为例,展示了完整的配置流程和测试方法。成功配置后,系统崩溃时会在/var/crash目录生成crash dump文件,为后续分析提供关键数据。
2025-06-17 18:21:05
559
原创 Linux Kernel动态调试:运行时调试的利器
本文介绍了Linux内核中动态调试功能的实现与应用。动态调试允许在不重新编译内核或重启系统的情况下,通过debugfs文件系统动态控制pr_debug和dev_dbg等调试信息的输出。关键点包括:1) 需要配置CONFIG_DYNAMIC_DEBUG选项;2) 通过/sys/kernel/debug/dynamic_debug/control文件查看和配置调试行为;3) 使用echo命令修改flags(如p启用打印、f显示函数名等)来控制输出;4) 通过实际驱动模块演示了动态启用/禁用调试信息的过程。
2025-05-30 10:01:00
278
原创 Linux Kernel调试:强大的printk(三)
本文介绍了Linux内核调试中的dev_xxx系列函数和打印频率限制机制。主要内容包括:1. dev_xxx函数是printk的封装版本,增加了设备指针参数,能自动附加设备信息,便于问题定位,并支持动态调试功能;2. 通过示例代码演示了如何在驱动程序中调用dev_info、dev_dbg等函数;3. 介绍了printk_ratelimited机制,该机制通过时间间隔和最大打印次数限制来避免重复打印;4. 展示了pr_info_ratelimited的实际使用效果
2025-05-25 12:37:39
595
原创 Linux Kernel调试:强大的printk(二)
本文介绍了Linux内核调试中printk的进阶用法,重点讲解了pr_xxx系列宏的使用。pr_xxx宏(如pr_info、pr_debug等)是对printk的封装,能更便捷地指定日志级别。文章详细说明了pr_fmt宏的作用,它能为打印信息统一添加模块名、函数名和行号等格式化前缀。同时,文章分析了pr_debug与pr_devel的区别,指出pr_debug支持动态调试而pr_devel仅在DEBUG定义时有效。通过示例代码展示了如何通过定义DEBUG宏来启用pr_debug输出
2025-05-25 12:04:06
586
原创 Linux Kernel调试:强大的printk(一)
本文介绍了Linux内核中强大的调试工具printk的基本用法。printk作为内核开发中最常用的调试手段,具有日志级别控制、环形缓冲区存储、时间戳记录等特性,可以在中断上下文等多种场景下使用。文章详细讲解了printk的函数原型、调用方式、8种日志级别定义,以及输出到控制台、日志文件等不同位置的机制。通过一个内核模块示例,演示了不同级别日志的输出效果,并说明如何通过/proc/sys/kernel/printk文件控制控制台日志输出级别。
2025-05-25 11:56:27
536
原创 构建高效阅读Kernel源码的环境-VSCode篇
本文介绍了如何配置VSCode环境以高效阅读Kernel源码。借助插件和生成的compile_commands.json文件,可以实现精确调转。
2025-05-19 13:00:50
921
原创 构建高效阅读Kernel源码的环境-vim篇
本文详细介绍了如何构建一个高效的Linux内核源码阅读环境,主要使用vim编辑器结合ctags和cscope工具。
2025-05-19 12:48:23
297
原创 对RISC-V的Exceptions, Traps, and Interrupts概念的理解
对《risc-v unprivileged isa spec 1.6节》中的异常、陷阱和中断的理解
2025-05-17 21:35:05
557
原创 Linux Kernel调试方法分类总结
在Linux内核调试中,根据开发、测试、故障分析和产品等不同阶段,可以采用多种调试方法。开发阶段主要依赖源码级调试,如使用printk()进行日志输出、动态调试打印、dump_stack()函数、debugfs或ioctl,以及gdb、kgdb、kdb等工具。测试阶段则涉及静态和动态分析,使用工具如KASAN、UBSAN、kmemleak、lockdep,以及代码覆盖率测试和跟踪工具如Ftrace、LTTng、Perf等。故障分析阶段,可以通过分析Oops信息和利用kdump+crash工具来解析内核崩溃。
2025-05-14 07:51:56
337
原创 编译安装Debug内核
本文详细介绍了用于debug的内核的各种配置选项如何配置,并编译内核,最后安装内核,启动ubuntu 24.04.2进入到自己编译的debug内核,内容及其详细,对新手友好,可实践性非常强。
2025-05-12 08:00:00
661
原创 Linux Kernel Debug环境搭建-VMware篇
在经历了前一篇VirtualBox安装ubuntu 24.04.2 LTS之后,现在使用VMware安装,基本就简单多了,安装ubuntu的过程是一致的,只是虚拟机软件的操作不同。
2025-05-07 00:34:22
247
2
原创 Linux Kernel Debug环境搭建-VirtualBox篇
Linux Kernel Debug的第一步,就是环境搭建,详细介绍virtualbox安装ubuntu 24.04.2的步骤
2025-05-06 01:10:06
737
原创 Linux Kernel Debugging专栏概览
Linux Kernel Debugging专栏,正如其名,这是一个讲解Linux内核调试技术的专栏,从最基础的调试技术一直到高级调试技术,都会讲到,而且,我相信,这不仅对于学习内核知识有极大的帮助,对于调试其他软件也同样有借鉴意义;本人向来崇尚实践,因为实践才能出真知,实践才是王道,看再多不如动手一试,所以本专栏会涉及大量动手实践的内容,一步一步将调试环境搭建起来,还要在这个调试环境上进行一系列调试实验,分析调试结果等,如果你对这个方向感兴趣,那请做好准备,撸起袖子和我一起行动起来吧。
2025-05-05 22:48:07
187
原创 VSCode+qemu+gdb调试代码的改进
之前发布的使用VSCode+qemu+gdb调试代码的教程,每次都要在一个终端里先启动qemu,然后再启动VSCode的debug,太烦了,基于此,我就想改进一下,查看VSCode文档,发现launch.json里有一个配置可以在启动debug之前处理一些任务,而这些任务可以定义在tasks.json里,感觉可以解决我的问题,下面教程开始,以调试opensbi为例
2025-03-14 13:14:32
715
原创 RISC-V篇-VSCode+qemu+gdb可视化调试OpenSBI
现在有了qemu+gdb调试OpenSBI的环境,也有了VSCode远程开发环境,这两者如果能结合起来,那将会极大提升开发、调试的效率,特别是debug的时候,可以实时跟踪代码会很爽的~
2024-10-31 09:56:47
1171
原创 RISC-V篇-VSCode远程开发环境配置
大部分情况下,学习Linux相关的技术,都是在虚拟机下进行的,虚拟机安装vscode可能性能不是很好,所以借助vscode的远程开发插件,可以极大提升效率
2024-10-31 09:41:19
3317
原创 RISC-V篇-qemu+gdb调试Linux kernel源码
本篇文章讲解了如何借助qemu和gdb对risc-v的Linux kernel源码进行调试,以开启MMU为分界点,分别介绍了MMU开启前后的调试方法!
2024-10-29 09:11:50
1947
2
原创 RISC-V篇-qemu+gdb调试OpenSBI源码
本篇文章讲解了如何通过qemu和gdb对OpenSBI的源码进行调试,这对后续研究OpenSBI代码很有帮助!
2024-10-29 09:00:52
1667
2
原创 RISC-V篇-从编译qemu开始,运行opensbi+kernel+rootfs
RISC-V篇-从编译qemu开始,运行opensbi+kernel+rootfs
2024-10-27 11:44:47
1078
3
转载 Linux下arm开发环境搭建
搭建过程中会出现一系列问题,这里只列出部分问题,其余可自行解决:1. 安装串口工具 minicom1.1 sudo apt-get install minicom1.1 配置 2. 安装tftp服务器 tftpd xinetd2.1 sudo apt-get install tftp tftpd xinetd2.2 sudo vim /etc/xinetd/
2015-03-04 13:05:01
687
atmel-atsamd21e17通过串口更新代码的bootloader代码例程
2018-03-05
嵌入式软件开发实习生
2016-01-05
stm32f207移植ucos ii系统,并口中断配置问题
2016-03-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅