Kernel 内核 BUG_ON()和WARN_ON()

news/2024/9/18 13:45:32/ 标签: linux

WARN_ON()

  • DEBUG_ON() 不是一个标准的 Linux 内核宏,它可能是特定内核版本或者特定内核配置中的一个宏,或者在某些内核代码中自定义的宏。
  • 一般来说,如果存在 DEBUG_ON(),它可能被用作一个调试开关,用于在调试版本中启用某些调试代码或打印调试信息。
  • DEBUG_ON() 通常不会像 BUG_ON() 那样触发内核崩溃,而是用于控制调试信息的输出。

在Kernel中追加 BUG_ON() 可以查看内核栈调用信息

例如 代码中追加如下:

 输出串口log如下:

GPT 解析结果:

这个日志包含了几个关键的信息,可以帮助分析问题:

  1. 服务启动失败

    • [ T1710] servicemanager: Tried to start aidl service SurfaceFlingerAIDL as a lazy service, but was unable to.
    • 这表明尝试作为延迟服务启动 SurfaceFlingerAIDL 时失败了。这通常发生在服务未安装或者服务配置错误的情况下。
  2. 内核警告

    • [ T1711] WARNING: CPU: 2 PID: 1711 at drivers/net/virtio_net.c:1738 virtnet_open+0x2c/0x280 [virtio_net]
    • 这是一个来自 CPU 核心2的警告,进程ID为1711,位于 drivers/net/virtio_net.c 文件的1738行。这表明在尝试打开一个网络设备时遇到了问题。
  3. 模块列表

    • 日志中列出了许多已加载的模块,例如 qca6490cnss2qrtr_mhi 等,这些模块可能与当前的警告或错误有关。
  4. 系统信息

    • [ T1711] CPU: 2 PID: 1711 Comm: ifconfig Tainted: G O ...
    • 这显示了触发警告的进程是 ifconfig,PID为1711,运行在CPU核心2上。Tainted: G O 表示内核被标记为“污染”,这通常意味着内核或模块是第三方修改过的,或者某些关键组件(如安全启动)没有按预期工作。
  5. 硬件和内核信息

    • [ T1711] Hardware name: Qualcomm Technologies, Inc. Lemans Single LA Guest Virtual Machine (DT)
    • 这表明日志来自一个名为“Lemans”的高通硬件设备,可能是一个虚拟机。
  6. 调用栈

    • 日志的最后部分显示了调用栈,这有助于确定问题发生时正在执行的代码路径。从调用栈可以看出,问题发生在 virtnet_open 函数中,随后是一系列网络相关的函数调用。
  7. 寄存器信息

    • 日志还包含了处理器寄存器的状态,这对于深入分析问题可能非常有用。

综上所述,这个日志指向了可能的网络驱动问题,特别是与 virtio_net 驱动相关的。可能需要检查网络配置、驱动兼容性或是否存在已知的驱动bug。如果是在虚拟化环境中,还需要考虑虚拟机的网络设置是否正确。此外,由于系统被标记为“污染”,可能还需要验证系统和内核的完整性。

 

在 Linux 系统中,要查看特定 PID 的进程信息,可以使用多种方法。以下是一些常用的命令:

1. **ps 命令**:
   使用 `ps` 命令可以直接查看特定 PID 的进程信息。例如:
   ```sh
   ps -p 1711 -o comm=
   ```
   这个命令会显示 PID 为 1711 的进程名称。`-o comm=` 是一个输出格式选项,用于仅显示命令名称。

2. **pstree 命令**:
   `pstree` 可以以树状图的形式显示进程,包括父子关系。你可以通过管道使用 `grep` 来过滤特定 PID:
   ```sh
   pstree -p | grep 1711
   ```
   这将显示包含 PID 1711 的进程及其在进程树中的位置。

3. **top 或 htop 命令**:
   这些工具可以实时显示系统中的进程信息。你可以通过它们的过滤功能来查找特定的 PID。在 `top` 中,你可以按 `Shift+F` 来过滤进程,然后输入 PID。在 `htop` 中,你可以直接在菜单中选择过滤进程。

4. **/proc 文件系统**:
   你可以直接查看 `/proc` 文件系统中对应 PID 的目录。例如:
   ```sh
   cat /proc/1711/status
   ```
   这个文件包含了进程的状态信息,包括进程名称、状态、父进程 ID 等。

5. **pgrep 命令**:
   如果你不确定进程名称,但知道其 PID,可以使用 `pgrep` 来查找:
   ```sh
   pgrep 1711
   ```
   这将列出所有 PID 为 1711 的进程。

请注意,你需要具有相应的权限才能查看其他用户的进程信息。如果你没有足够的权限,可能需要使用 `sudo` 来执行上述命令。此外,如果进程已经不存在,这些命令将不会返回任何信息。
 

 

BUG_ON()

  • BUG_ON() 是一个断言宏,它用于捕捉代码中的编程错误。
  • 当传递给 BUG_ON() 的条件为真时,内核会触发一个 BUG,并打印出错误信息,通常包括文件名、行号和函数名。
  • BUG_ON() 通常用于捕捉那些不应该发生的情况,比如代码中的逻辑错误或不一致的状态,它表明代码中存在严重问题。
  • 在某些架构上,BUG_ON() 可能会导致内核触发一个断断点异常(breakpoint trap),从而进入调试器或导致系统崩溃。

其中 BUG() 宏会导致内核打印出错误信息并触发崩溃。

 

参考文档:

Linux内核之BUG_ON()和WARN_ON()_linux bug()-CSDN博客


http://www.ppmy.cn/news/1526152.html

相关文章

判断链表的全部n个字符是否中心对称。

设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型。试设计算法判断链表的全部n个字符是否中心对称。例如XYX,XYYX是中心对称。 思想:先求链表长度,然后将前n/2个元素入栈,将栈顶…

鸿蒙NEXT生态应用核心技术理念:一次开发,多端部署

在万物互联时代,应用开发者也面临设备底座从手机单设备到全场景多设备的转变,通过全场景多设备作为全新的底座,为消费者带来万物互联时代更为高效、便捷的体验。 在万物智联时代重要机遇期,鸿蒙结合移动生态发展的趋势&#xff0…

数据结构——(java版)Map与Set

文章目录 二叉搜索树(1) 二叉搜索树的概念:(2)二叉搜索树的意义:(3)二叉搜索树的实现:实现的方法与属性实现二叉搜索树的查询:实现二叉搜索树的插入&#xff…

`character_set_server` 和 `collation_server`

目录标题 1. character_set_server 的取值范围和相关性取值范围相关性 2. collation_server 的取值范围和相关性取值范围相关性 3. 默认值4. 配置方法5. 注意事项MySQL中character_set_server和collation_server参数修改对现有数据库和表的具体影响是什么?如何在不中…

ansible企业实战

ansible最佳实践 优化ansible速度 开启SSH长连接 修改 /etc/ansible/ansible.cfg里面的参数 ssh_args -C -o ControlMasterauto -o ControlPersist5d ControlPersist5d这个参数是设置整个长连接保持时间设置为5天,如果开启,通过SSH连接过的设备都会…

Docker基本管理--Dockerfile镜像制作(Docker技术集群与应用)

容器端口映射; 容器间通信; 容器数据卷; DockerFile; 容器端口映射: 实验环境:紧接着之前的快照,将该文件夹拉取进去; 然后执行导入的脚本,会将该目录下所有打包好的镜像文件导入进入。 然后进…

每日学习一个数据结构-倒排表

文章目录 示意图倒排表的基本概念倒排表的数据结构示例 倒排表的优点应用场景 倒排表(Inverted Index),也称为反向索引或倒排文件,在信息检索系统中是一种重要的数据结构。它主要用于快速搜索文档中的关键词,并找到包含…

Spring Cloud 八股文

目录 Nacos(服务注册、配置中心) Spring Cloud Alibaba中Nacos的核心功能是什么? Nacos 是如何进行服务注册和发现的? 讲述 Nacos 配置中心的工作原理 描述如何通过 Nacos 实现动态配置更新 Spring Cloud Alibaba 中的 Nacos…

Linux学习笔记8 理解Ubuntu网络管理,做自己网络的主人

本文讲解了Ubuntu下网络由什么管理,介绍了临时ip和路由的设置方法,介绍了静态持久化网络配置的方法以及各网络管理软件之间的关系。 来看看Ubuntu网络管理。 序言 原本学习ubuntu网络管理就是为了检查nginx安装过程中使用wget获取压缩包为什么解析不出…

Linux 基础命令-文件与目录操作

在 Linux 操作系统中,文件和目录是组织和管理数据的核心单元。作为一个命令行驱动的操作系统,Linux 提供了一系列强大且灵活的命令来操作文件和目录。掌握这些命令不仅是管理 Linux 系统的基础,也是高效使用 Linux 环境的关键。 一、文件与目…

安全政策与安全意识(上)

目录 1、信息安全保障 信息安全保障的三大支柱 2、网络犯罪 2.1 网络犯罪的概念 网络犯罪与计算机犯罪区别 2.2 网络犯罪的特点 2.3 犯罪形式 2.4 网络犯罪的原因(主观) 2.5 网络犯罪的原因(客观) 2.5预防网络犯罪的对策 2.6 计算机信息网络国际联网安全保护管理办法…

【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载

基于STM32设计的SD卡数据读取与上位机显示系统 演示视频: 基于STM32设计的SD卡数据读取与上位机显示系统 简介:本研究的主要目的是基于STM32F103微控制器,设计一个能够读取SD卡数据并显示到上位机的系统。SD卡的数据扇区读取不仅是为了验证存…

etcd二次封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、etcd封装二、封装的思想1.封装服务注册客户端类2.封装服务发现客户端类 三.简单使用1.服务注册客户端2.服务发现客户端 一、etcd封装 1.服务注册客户端:向服务…

标题:使用 HTML 和 JavaScript 实现简单的待办事项列表

目录 一、HTML 结构设计 二、JavaScript 逻辑处理 一、HTML 结构设计 整体布局: 在 HTML 部分,整体布局通过一个类名为container的div元素来实现,该元素在页面中水平居中(margin: 150px auto;)。其中包含了一个用于…

《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>

本篇博客讲记录: 1.回顾MySQL的JDBC操作 2..Mybatis简介、Mybatis操作数据库的步骤 3.Mybatis 相关日志的配置(日志的配置、驼峰自动转换的配置) 前言 之前学习应用分层时我们知道Web应用程序一般分为三层,Controller、Service、D…

html加载页面

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>算数模一体化</title> </head><b…

用Facebook广告提升本地业务的影响力

你是否正在为扩大业务影响力和吸引更多本地顾客而苦恼&#xff1f;你是否在寻找能够让小型企业在网上广告中占据优势的精准营销策略&#xff1f;那么&#xff0c;Facebook本地广告和光年AI就是你的不二之选&#xff01; 你可能会问&#xff0c;为什么要选择Facebook广告和光年…

OpenCV高阶操作

在图像处理与计算机视觉领域&#xff0c;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下&#xff0c;采样 下采样&#xff08;Downsampling&#xff09; 下采样通常用于减小图像的…

prompt实用技巧-AI+Mermaid【酷炫钉钉文档】

AI 新技能&#xff0c;最近 chatGPTo1 发布后模型能力出现了新的跨越&#xff0c;之前模型的一本正经的胡说八道幻想模式&#xff0c;让AI 对待理科推理明显弱于文案的 AGI 的生成。 prompt engineer 工程师程序员的福音 prompt 内容如下&#xff0c; 按照以上格式生成创建公…

RK3568平台(音频篇)Tinyalsa open调用流程

一.TinyALSA 简介 TinyALSA 是一个轻量级的 ALSA(Advanced Linux Sound Architecture,高级 Linux 音频架构)实现,用于与 Linux 内核中的 ALSA(高级 Linux 声音架构)进行交互,旨在为嵌入式系统和资源受限的设备提供音频支持。 ALSA是位于Linux Kernel层面的音频系统。T…