openvela——动态管理日志输出通道及其实现原理

在《Vela rpmsg log 实现原理》中提到 vela 日志输出支持多通道日志输出,它们是在系统运行前期配置好的,所以无法将它们动态删除。但是可以控制使能、禁用某通道,达到相应通道输出、不输出日志的目的。接下来篇章将讲述”动态管理日志输出通道方法“和”动态管理日志输出通道原理“。

动态管理日志输出通道方法

  • 列出当前已配置的所有输出通道及它们各自的状态
    在 nuttx shell 中执行setlogmask list命令,输出 ”通道“:”状态“ 格式的信息。如下结果显示:“default 通道”(物理串口)已打开、”ramlog 通道“ 已打开。

ap> setlogmask list Channels: default: enable ramlog: enable
  • 禁用(启用)日志输出通道

ap> setlogmask disable default ap> setlogmask enable default

动态管理日志输出通道原理

从代码角度来看禁止某(些)通道输出日志的方式是在写日志时候跳过禁用通道,如下代码片段:

ssize_t syslog_write_foreach(FAR const char *buffer, size_t buflen, bool force) { //... for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++) { FAR syslog_channel_t *channel = g_syslog_channel[i]; if (channel == NULL) break; #ifdef CONFIG_SYSLOG_IOCTL /// 根据“禁用”状态,忽略写相应通道 if (channel->sc_state & SYSLOG_CHANNEL_DISABLE) continue; #endif /// ... /// 调用通道的写函数 } }

命令 setlogmask enable(disable) out_channel_name 的本质是:修改对应通道变量的 sc_state。为了实现此目的:

  1. Vela 注册了一个虚拟设备,生成一个设备节点——"/dev/log";

  2. setlogmask 命令会打开此设备并通过ioctl调用传递命令参数;

  3. sys log 驱动的 syslog_chardev_ioctl 接收到命令参数后,进行名字匹配找到对应通道变量并更新sc_state。

int main(int argc, FAR char *argv[]) { if (argc < 2) { show_usage(argv[0], EXIT_FAILURE); } #ifdef CONFIG_SYSLOG_IOCTL if (strcmp(argv[1], "list") == 0) { print_channels(); return EXIT_SUCCESS; } else if (argc == 3) { if (strcmp(argv[1], "enable") == 0) { return disable_channel(argv[2], false); } else if (strcmp(argv[1], "disable") == 0) { return disable_channel(argv[2], true); } else { show_usage(argv[0], EXIT_FAILURE); } } #endif
static int disable_channel(FAR const char *name, bool disable) { fd = open("/dev/log", O_WRONLY); info.sc_disable = disable; strlcpy(info.sc_name, name, sizeof(info.sc_name)); ret = ioctl(fd, SYSLOGIOC_SETFILTER, (unsigned long)&info); close(fd); return ret; }
#ifdef CONFIG_SYSLOG_IOCTL static int syslog_chardev_ioctl(FAR struct file *filep, int cmd, unsigned long arg) { if (cmd == SYSLOGIOC_GETCHANNELS) { // ... } else if (cmd == SYSLOGIOC_SETFILTER) { info = (FAR struct syslog_channel_info_s *)arg; for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++) { if (strncmp(g_syslog_channel[i]->sc_name, info->sc_name, sizeof(info->sc_name)) == 0) { channel = g_syslog_channel[i]; break; } } // ... // 修改日志输出状态 channel->sc_state = info->sc_disable ? channel->sc_state | SYSLOG_CHANNEL_DISABLE : channel->sc_state & ~SYSLOG_CHANNEL_DISABLE; } return OK; } #endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1004734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 引擎中的分支预测器(Branch Predictor)友好性:如何写出减少 CPU 误判的代码

各位开发者、架构师们&#xff0c;晚上好&#xff01;今天&#xff0c;我们将深入探讨一个在高性能计算领域至关重要&#xff0c;但在日常JavaScript开发中却常常被忽视的议题&#xff1a;JavaScript引擎中的分支预测器友好性。我们将学习如何编写代码&#xff0c;以减少CPU的误…

Draco 3D压缩终极指南:如何高效处理大型3D模型文件

Draco 3D压缩终极指南&#xff1a;如何高效处理大型3D模型文件 【免费下载链接】draco Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics. 项目地址: h…

可以把 Windows 从 C盘迁移到 SSD 吗?

可以把 Windows 从 C盘迁移到 SSD 吗&#xff1f;yes, you can move windows from the c: drive to an ssd, and doing so can make your computer faster. the process usually means copying the operating system, programs, and settings from an old hard drive to a new …

Overleaf插件定制实战指南:3分钟搞定编辑器功能优化

Overleaf插件定制实战指南&#xff1a;3分钟搞定编辑器功能优化 【免费下载链接】overleaf A web-based collaborative LaTeX editor 项目地址: https://gitcode.com/GitHub_Trending/ov/overleaf 你是不是也遇到过这样的困扰&#xff1a;用Overleaf写论文时&#xff0c…

Day 37 - 早停策略与模型权重的保存

在深度学习的训练过程中&#xff0c;我们经常面临两个核心问题&#xff1a;“训练到什么时候停止&#xff1f;” 和 “训练好的模型怎么存&#xff1f;”。如果训练时间太短&#xff0c;模型欠拟合&#xff1b;训练时间太长&#xff0c;模型过拟合。手动盯着Loss曲线决定何时停…

JavaScript 的数值计算精度:Kahan 求和算法在处理大量浮点数累加时的应用

各位同学&#xff0c;各位同仁&#xff0c;大家好&#xff01; 今天&#xff0c;我们将深入探讨一个在日常编程中常常被忽视&#xff0c;但在处理大量数值数据时又至关重要的话题&#xff1a;JavaScript 中的浮点数计算精度。特别是&#xff0c;我们将聚焦于一个巧妙的算法——…

15、Linux 系统下的邮件与即时通讯使用指南

Linux 系统下的邮件与即时通讯使用指南 1. Linux 系统中的邮件客户端 在人们提及互联网时,往往首先想到的是万维网,但实际上电子邮件可能是最常用且最受欢迎的互联网应用之一。对于 Linux 用户而言,有众多的电子邮件程序可供选择,不同的 Linux 发行版默认的邮件客户端也各…

微信遥控Mac:WeChatPlugin远程控制终极指南

微信遥控Mac&#xff1a;WeChatPlugin远程控制终极指南 【免费下载链接】WeChatPlugin-MacOS 微信小助手 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPlugin-MacOS 你是否曾经想过&#xff0c;躺在沙发上就能控制远在书房里的Mac电脑&#xff1f;或者在外出时突…

为什么 C盘空间会莫名其妙减少(即使没装新软件)?

为什么 C盘空间会莫名其妙减少&#xff08;即使没装新软件&#xff09;&#xff1f;你有没有注意到c盘空间在减少&#xff0c;即使你没有安装新程序, 这个常见问题可能让人担心, 但通常有明确原因, windows和其他软件会定期创建临时文件、系统备份和更新, 占用磁盘空间而不会每…

16、探索 Linux:网络应用与文件管理指南

探索 Linux:网络应用与文件管理指南 在当今数字化时代,Linux 系统凭借其强大的功能和高度的可定制性,受到了越来越多用户的青睐。本文将深入介绍 Linux 系统中的网络应用和文件管理操作,帮助你更好地利用 Linux 系统的优势,提升工作和学习效率。 网络应用:即时通讯、文…

【SOVD】软件定义汽车时代的诊断新范式

目录 一、为什么传统诊断体系正在“失效” 二、SOVD 是什么? 三、SOVD 的定位:不是替代 UDS,而是“包裹” UDS 四、SOVD 解决的核心问题 1️⃣ 诊断访问的“现代化” 2️⃣ 跨 ECU、跨域的统一视图 3️⃣ 云端与远程诊断的安全边界 五、SOVD 的核心概念:资源模型 常见资源类…

javet 的使用

第一版使用的是j2v8,但是已经不维护了,部署到liunx后报错 J2V8 native library not loaded ,之后切换到这个库了 https://github.com/caoccao/Javenode 引入依赖 <!-- Core (Must-have) --><dependency><groupId>com.caoccao.javet</groupId><art…

用户目录能不能放到其他盘?

用户目录能不能放到其他盘&#xff1f;是的, 你可以把用户文件夹移动到另一个磁盘, 但你应该小心操作. 许多人想要腾出系统盘空间或把个人文件放在单独的磁盘上. 移动用户文件夹可以缓解空间限制并简化备份, 但如果方法不当也可能引发问题. 本文解释了安全的选项, 需要遵循的步…

数据分析工具对比:SPSS vs Tableau vs DataEase

工具概览 SPSS 全称&#xff1a;Statistical Package for the Social Sciences 描述&#xff1a;是一款专业的统计分析软件&#xff0c;广泛应用于社会科学、医学、市场研究等领域。 Tableau 描述&#xff1a;一款强大的数据可视化工具&#xff0c;能够将复杂的数据转化为直观、…

【OTA】自动化测试方案

目录 基于 Python + PyQt5 的 OTA 自动化测试工具方案 1. 背景与问题定义 2. 工具整体架构设计 2.1 架构分层 2.2 核心设计思想 3. OTA 自动化流程拆解(状态机) 4. PyQt5 UI 设计(任务控制台) 4.1 UI 功能 4.2 主窗口代码示例(PyQt5) 5. OTA 状态机与调度实现 5.1 Worker…

哪些文件夹里的文件是可以安全删除的?比如Temp、Download这些?

哪些文件夹里的文件是可以安全删除的&#xff1f;比如Temp、Download这些&#xff1f;files accumulate on every computer and phone, some of those files are safe to remove, and deleting them can free space and make your device run smoother, this article explains,…

最全词典整合收录:打造专业英语学习利器

最全词典整合收录&#xff1a;打造专业英语学习利器 【免费下载链接】最全词典整合收录词典刺客 本仓库提供了一个名为“最全词典整合收录(词典刺客)”的资源文件下载。该资源文件包含了以下词典的整合收录&#xff1a;- 柯林斯双解&#xff08;mddmdx&#xff09;- 朗文双解&a…

SuperDesign:在IDE中唤醒你的设计创造力

SuperDesign&#xff1a;在IDE中唤醒你的设计创造力 【免费下载链接】superdesign 项目地址: https://gitcode.com/gh_mirrors/su/superdesign 你是否曾经在深夜对着空白的代码编辑器&#xff0c;脑海中浮现出完美的UI设计&#xff0c;却不知道如何快速实现&#xff1f…

C盘哪些文件可以删除?

C盘哪些文件可以删除&#xff1f;c盘通常存放操作系统和许多用户文件&#xff0c;随着时间推移&#xff0c;它会被占满并使电脑变慢&#xff0c;在删除任何东西之前&#xff0c;你应该检查是什么占用了空间&#xff0c;备份重要文件&#xff0c;并了解哪些文件可以安全删除&…

17、深入理解 Linux 文件系统机制与结构

深入理解 Linux 文件系统机制与结构 1. 理解长格式文件列表 在 Linux 中,使用 ls -la 命令可以查看详细的文件列表信息,示例输出如下: drwx------ 2 dee dee 4096 Jul 29 07:48 . drwxr-xr-x 5 root root 4096 Jul 27 11:57 .. -rw-r--r-- 1 dee dee 24 Jul 27 …