news 2026/5/1 7:30:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 11:06:44

SolidWorks 2024终极安装指南:5步搞定专业三维CAD软件

SolidWorks 2024终极安装指南&#xff1a;5步搞定专业三维CAD软件 【免费下载链接】SolidWorks2024安装教程指南 本仓库提供SolidWorks 2024的安装教程指南及安装包资源。SolidWorks是一款广泛应用于机械设计领域的三维CAD软件&#xff0c;具有强大的功能和易学易用的特点。本教…

作者头像 李华
网站建设 2026/5/1 7:28:13

21、Linux系统软件添加与安全防护指南

Linux系统软件添加与安全防护指南 一、软件添加与更新 1.1 软件下载与安装流程 在进行软件下载和安装时,一般可按以下步骤操作: 1. 在对话框中点击“OK”,开始下载并安装程序。此过程中可能会要求输入root(管理员)密码,之后软件会被下载并添加到你的机器中。更新完成…

作者头像 李华
网站建设 2026/4/23 16:03:51

26、OpenOffice.org 办公套件全功能指南

OpenOffice.org 办公套件全功能指南 在日常办公和学习中,拥有一套功能强大且易用的办公软件至关重要。OpenOffice.org 就是这样一套优秀的办公套件,它包含了多种实用的工具,如用于演示的 Impress、绘图的 Draw、数据库管理的 Base 以及公式排版的 Math 等。下面将详细介绍这…

作者头像 李华
网站建设 2026/4/24 7:12:44

强化学习如何在大模型中应用?(2)RLHF-PPO

强化学习如何在大模型中应用&#xff1f;&#xff08;2&#xff09;RLHF-PPO 文章目录强化学习如何在大模型中应用&#xff1f;&#xff08;2&#xff09;RLHF-PPO1. RLHF-PPO的四个模型1.1 策略模型 / Actor Model1.1.1 Actor Model的作用1.1.2 Actor Model 的Loss计算1.1.3 N…

作者头像 李华
网站建设 2026/4/28 19:04:41

如何在5分钟内快速上手Bananas屏幕共享工具

如何在5分钟内快速上手Bananas屏幕共享工具 【免费下载链接】bananas Bananas&#x1f34c;, Cross-Platform screen &#x1f5a5;️ sharing &#x1f4e1; made simple ⚡. 项目地址: https://gitcode.com/gh_mirrors/ba/bananas Bananas&#x1f34c;是一款跨平台屏…

作者头像 李华
网站建设 2026/4/23 14:47:38

VoxCPM-0.5B:零样本语音克隆与上下文感知语音合成的终极指南

在人工智能语音技术飞速发展的今天&#xff0c;OpenBMB团队推出的VoxCPM-0.5B开源语音生成模型&#xff0c;以其突破性的零样本语音克隆能力和上下文感知语音合成技术&#xff0c;正在重新定义人机语音交互的标准。这款轻量级模型不仅支持中英文高质量语音生成&#xff0c;更能…

作者头像 李华