码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day8


    ​
    ​

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
    想系统/深入学习某技术知识点…
    一个人摸索学习很难坚持,想组团高效学习…
    想写博客但无从下手,急需写作干货注入能量…
    热爱写作,愿意让自己成为更好的人…

    文章目录

    • 常见的内核调试手段
      • 1.printk
        • 1.1 查看printk等级
        • 1.2 调整printk等级至最低
      • 2.动态打印
      • 3.dump_stack

    常见的内核调试手段

    1.printk

    在这里插入图片描述

    名称解释
    Log Buffer该Buffer里的内容可以存储在/proc/kmsg
    ConsoleConsole的实现有很多,目前主要用到的是用来调试的串口 UART Console
    RAM Console允许将调试日志信息写入一个被成为RAM Console的设备

    printk的调试是全局的,调试等级从0到7,一共8个等级,优先级由0-7依次变低。
    可通过操作/proc/sys/kernel/printk来查看调整该等级的设定,如下:

    1.1 查看printk等级

    cat /proc/sys/kernel/printk
    
    • 1

    在这里插入图片描述

    1.2 调整printk等级至最低

    打开所有内核调试打印信息

    echo 8 > /proc/sys/kernel/prink
    
    • 1

    在这里插入图片描述

    2.动态打印

    相对于printk的使用,printk都是预先编码编译后运行,对于我们需要在系统运行时候想去动态的打开关闭某些调试信息是无法做到的,这时候我们可以使用动态打印,动态打印的基础开关使用依赖于宏CONFIG_DYNAMIC_DEBUG

    如何使用?

    需求实现
    使能一个文件中所有动态打印语句echo -n “file gadget.c +p” >
    使能一个模块中所有动态打印语句echo “module dwc3 +p” >
    使能一个函数中所有的动态打印语句echo “func svc_process +p” >
    使能文件路径中包含 usb的 文件所有的动态打印语句echo -n "*usb* " +p >

    ps:关于上面部分的动态打印语句的需求例子,除了能打印pr_debug()/dev_dbg()函数中定义的输出外,还能打印一些额外的如动态打印语句 (p)、函数名 (f)、行号 (l)、模块名字 (m)和线程ID (t)等。

    Q:如何将dynamic动态打印转为printk正常的静态打印?
    A:

    #undef dev_dgb
    #define dev_dbg dev_info
    #undef pr_debug
    #define pr_debug pr_info
    
    • 1
    • 2
    • 3
    • 4

    3.dump_stack

    dump_stack是kernel调试中的瑞士军刀,很方便的一个函数接口,在我看来它最方便的地方就是能从一个函数中找到它从哪里来–追寻函数调用关系。如下:
    在这里插入图片描述

  • 相关阅读:
    1600*A. Linova and Kingdom(DFS&优先队列&贪心)
    HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript
    uview indexList 按字母跳转不了
    uboot 添加命令
    2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
    如何把电脑上的游戏串流助手设置为开机自启动?
    1-前端基本知识-CSS
    vue3将自定义组件插入指定dom
    【Redis在Windows中与Linux中的下载安装,启动服务和设置密码远程连接】
    原来,C语言操作Mysql这么简单
  • 原文地址:https://blog.csdn.net/qq_23327993/article/details/126330727
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号