码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux内核基础篇——动态输出调试


    Linux内核基础篇——动态输出调试

    2023-09-0820发布于天津

    版权

    简介: Linux内核基础篇——动态输出调试


    上篇说到printk调试,但printk是全局的,只能设置输出等级。而动态输出可以动态选择打开某个内核子系统的输出,可以有选择性地打开某些模块的输出。

    配置内核编译选项

    要使用动态输出,必须在配置内核时打开CONFIG_DYNAMIC_DEBUG宏。内核代码里使用大量pr_debug()/dev_dbg()函数来输出信息,这些就使用了动态输出。

    需要打开的内核配置选项:

    CONFIG_DEBUG_FS=y
    CONFIG_DYNAMIC_DEBUG=y

    CONFIG_DYNAMIC_DEBUG是配置动态输出,它依赖于CONFIG_DEBUG_FS,而CONFIG_DEBUG_FS是debugfs文件系统。

    打开内核配置后,我们还需要挂载debugfs文件系统。

    debugfs文件系统挂载

    动态输出在debugfs文件系统中有一个control文件节点,这个文件节点记录了系统中所有使用动态输出技术的文件名路径、输出所在的行号、模块名字和要输出的语句。

    debugfs默认会挂载到/sys/kernel/debug,如果没有挂载,可以执行以下命令挂载:

    # mount -t debugfs none /sys/kernel/debug/

    挂载debugfs文件系统后,可以查看control节点内容:

    # cat /sys/kernel/debug/dynamic_debug/control

    动态输出使用

    打开svcsock.c文件中所有的动态输出语句

    # echo 'file svcsock.c +p' > /sys/kernel/debug/dynamic_debug/control

    打开usbcore模块中所有的动态输出语句

    # echo 'module usbcore +p' > /sys/kernel/debug/dynamic_debug/control

    打开svc_process()函数中所有的动态输出语句

    # echo 'func svc_process() +p' > /sys/kernel/debug/dynamic_debug/control

    打开文件路径包含usb的文件里所有的动态输出语句

    # echo -n '*usb* +p' > /sys/kernel/debug/dynamic_debug/control

    打开系统所有的动态输出语句

    # echo -n '+p' > /sys/kernel/debug/dynamic_debug/control

    上面是打开动态输出语句的例子,除了能输出pr_debug()/dev_dbg()函数中定义的输出信息外,还能输出一些额外信息,如函数名、行号、模块名字以及线程ID等

    • p:打开动态输出语句
    • f:输出函数名
    • l:输出行号
  • 相关阅读:
    Druid未授权访问--->ip:端口号/druid/index.html
    利用HbuilderX制作简单网页: HTML5期末大作业——html5漫画风格个人主页
    【Camera基础(二)】摄像头驱动原理和开发&&V4L2子系统驱动架构
    小学生python游戏编程arcade----基本知识2
    阿里云双11优惠云服务器99元一年,4年396元
    最新适合小白前端 Javascript 高级常见知识点详细教程(每周更新中)
    electron 创建圆角窗口附带阴影效果
    【算法基础】(一)基础算法 --- 归并排序
    开发程序员的宝藏工具/网站
    陪诊系统|陪诊系统开发|陪诊小程序开发指南
  • 原文地址:https://blog.csdn.net/qq_20312079/article/details/133861706
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号