随笔分类 -  调试经验

摘要:vmcore-dmesg.txt截图如下,崩溃栈里面有我们产品的驱动,现在要分析出是不是我们导致的。系统崩溃是因为触发了hung task检测条件,系统panic了。所谓hung task,就是进程的状态为D状态,即TASK_UNINTERRUPTIBLE状态,短时间的D状态是正常的,长时间就会有问 阅读全文
posted @ 2024-10-07 21:37 学习,积累,成长 阅读(248) 评论(0) 推荐(0) 编辑
摘要:调试是每个程序员都逃不过的宿命! 程序调试是一件非常考验耐心的事情,因为调试过程中经常会需要反复的修改源码,重新编译、重新部署、重新运行,这个过程通常是非常枯燥和繁琐的。尤其对于大型项目,光是编译可能需要几十分钟,甚至几个小时,部署过程则可能更为复杂漫长! 那么,有没有一种更高效的调试手段,可以避免 阅读全文
posted @ 2024-06-10 12:57 学习,积累,成长 阅读(221) 评论(0) 推荐(0) 编辑
摘要:环境: 处理器架构:arm64 内核源码:linux-6.6.29 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 本文主要介绍内核开发中常用的模块传参手段,通过模块参数传递可以通过用户态来获取内核的一些信息,也可以通过用户态写入一些值来控制内核相关行为。一般内核开 阅读全文
posted @ 2024-06-10 12:56 学习,积累,成长 阅读(181) 评论(0) 推荐(0) 编辑
摘要:什么是pstore pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志。不过在当前内核版本中,其已经支持了更多的功能,如保存console日志、ftrace消息和用户空间日志。同时,它还支持将这些消息保存在不同的存储设备中,如内存、块设备或mtd设备。 为 阅读全文
posted @ 2024-02-07 17:51 学习,积累,成长 阅读(2037) 评论(0) 推荐(1) 编辑
摘要:crash简介 crash是redhat的工程师开发的,主要用来离线分析linux内核转存文件,它整合了gdb工具,功能非常强大。可以查看堆栈,dmesg日志,内核数据结构,反汇编等等。 crash支持多种工具生成的转存文件格式,如kdump,LKCD,netdump和diskdump,而且还可以分 阅读全文
posted @ 2023-04-30 10:35 学习,积累,成长 阅读(2605) 评论(0) 推荐(0) 编辑
摘要:kdump机制 简介 Kdump是在系统崩溃、死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的时候产生的crash dump。 Kdump 使用两个内核:生产内核和捕获内核。生产内核是一个普通内核,它使用特殊的 阅读全文
posted @ 2023-04-07 22:46 学习,积累,成长 阅读(742) 评论(0) 推荐(0) 编辑
摘要:前言 上一节介绍了kprobe的基本概念,下面我们将使用几个具体的例子,看下kprobe在实际使用中有那些应用场景。 kprobe 内核的samples/kprobe目录下有kprobe相关的例子,我们以这些例子为基础,简单修改下。 查看函数的入参 我们所有的例子都是探测do_sys_open() 阅读全文
posted @ 2023-04-07 22:41 学习,积累,成长 阅读(887) 评论(0) 推荐(0) 编辑
摘要:简介 开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用、何时被调用、执行是否正确以及函数的入参和返回值是什么等等。 比较简单的做法是在内核代码对应的函数中添加日志打印信息,但这种方式往往需要重新编译内核或模块,重新启动设备之类的,操作较为复杂甚至可能会破坏原有的代码执行过 阅读全文
posted @ 2023-04-07 22:33 学习,积累,成长 阅读(315) 评论(0) 推荐(0) 编辑
摘要:简介 perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。 perf可以统计或采样的event有很多,如果我们要分析cpu,那么我 阅读全文
posted @ 2023-04-07 22:29 学习,积累,成长 阅读(922) 评论(0) 推荐(0) 编辑
摘要:之前使用ftrace的时候需要一系列的配置,使用起来有点繁琐,这里推荐一个ftrace的一个前端工具,它就是trace-cmd trace-cmd安装教程 安装trace-cmd及其依赖库 git clone https://git.kernel.org/pub/scm/libs/libtrace/ 阅读全文
posted @ 2023-04-07 22:27 学习,积累,成长 阅读(1430) 评论(0) 推荐(0) 编辑
摘要:内核的各个子系统已经有大量的跟踪点,如果这些跟踪点无法满足工作中的需求,可以自己手动添加跟踪点。 添加跟踪点有两种方式,一种是仿照events/目录下的跟踪点,使用TRACE_EVENT() 宏添加。另一种是参考内核目录samples/trace_events添加。本文对这两种方式分别进行介绍。 使 阅读全文
posted @ 2023-03-03 22:36 学习,积累,成长 阅读(324) 评论(0) 推荐(0) 编辑
摘要:简介 Ftrace是Linux Kernel的官方tracing系统,支持Function trace、静态tracepoint、动态Tracepoint的跟踪,还提供各种Tracer,用于统计最大irq延迟、最大函数调用栈大小、调度事件等。 Ftrace还提供了强大的过滤、快照snapshot、实 阅读全文
posted @ 2023-03-03 22:35 学习,积累,成长 阅读(1802) 评论(0) 推荐(0) 编辑
摘要:开发环境 客户端 开发板:FireFly-RK3399 Linux 4.4 IP:192.168.137.110 服务端 VMware Workstation Pro16,ubuntu 18.04 IP:192.168.137.100 MAC:00:0c:29:c1:9c:ed netconsole 阅读全文
posted @ 2023-02-23 22:41 学习,积累,成长 阅读(322) 评论(0) 推荐(0) 编辑
摘要:SysRq键简介 SysRq键是一个魔术案件,只要在内核没有完全卡死的情况下,内核都会相应SysRq 键的输入,使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。 配置 内核配置选项中要使能CONFIG_MAGIC_SYSRQ选项,这样系统启动之后,会生成/pro 阅读全文
posted @ 2023-02-23 22:21 学习,积累,成长 阅读(487) 评论(0) 推荐(0) 编辑
摘要:启动 在shell下敲gdb命令即可启动gdb,启动后会显示下述信息,出现gdb提示符。 ➜ example gdb GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1 Copyright (C) 2018 Free Software Foundation, Inc. Lic 阅读全文
posted @ 2023-02-19 22:24 学习,积累,成长 阅读(173) 评论(0) 推荐(0) 编辑
摘要:简介 printk()是很多嵌入式开发者喜欢用的调试手段之一,但是,使用printk()每次都要重新编译内核,很不方便。使用动态输出在不需要重新编译内核的情况下,方便的打印出内核的debug信息。 要开启动态输出,内核需要添加CONFIG_DYNAMIC_DEBUG。开启宏之后,pr_debug() 阅读全文
posted @ 2023-01-15 22:36 学习,积累,成长 阅读(479) 评论(0) 推荐(0) 编辑
摘要:简介 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做 Core Dump(中文有的翻译成“核心转储”)。 我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄 阅读全文
posted @ 2023-01-15 22:16 学习,积累,成长 阅读(340) 评论(0) 推荐(0) 编辑
摘要:OOPS信息解读 root@firefly:~/mnt/module# insmod oops_module.ko [ 867.140514] Unable to handle kernel NULL pointer dereference at virtual address 00000000 [ 阅读全文
posted @ 2022-10-31 22:21 学习,积累,成长 阅读(1304) 评论(0) 推荐(0) 编辑
摘要:前言 作为一名合格的程序员,不写bug是不可能的。如何花费最少的时间来修复bug呢? 在编码阶段借助一些静态分析工具往往可以事半功倍,减少代码中的bug。 静态分析工具能够在代码未运行的情况下分析源代码,发现代码中的bug。在C/C++程序中,静态分析工具可以发现程序错误,如空指针取消引用、内存泄漏 阅读全文
posted @ 2022-04-25 22:30 学习,积累,成长 阅读(181) 评论(0) 推荐(0) 编辑
摘要:前言 对用户态进程,利用gdb调试代码是很方便的手段。而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试。 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qemu就是一种。 qemu是一款完全软件模拟(Binary translation)的虚拟化软件,在虚 阅读全文
posted @ 2022-04-25 22:16 学习,积累,成长 阅读(1641) 评论(0) 推荐(1) 编辑

  1. 1 少年 梦然
  2. 2 尘埃 林小柯
  3. 3 飞鸟和禅 任然
  4. 4 Dancing With Your Ghost Sasha Sloan
  5. 5 烟火人间 添儿呗
  6. 6 摘仙 伊格赛听、叶里
少年 - 梦然
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示