news 2026/6/10 2:22:42

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/6/10 15:51:11

2025 洗衣液行业投资逻辑:政策驱动绿色转型,细分赛道暗藏机遇

2025 洗衣液行业投资逻辑&#xff1a;政策驱动绿色转型&#xff0c;细分赛道暗藏机遇 中国洗涤用品工业协会 2025 年数据显示&#xff0c;国内洗衣液市场规模已突破 580 亿元&#xff0c;年复合增长率维持在 6.2% 左右&#xff0c;预计 2030 年将进一步突破 760 亿元。作为刚需…

作者头像 李华
网站建设 2026/6/10 15:42:40

3、开源软件项目剖析与Linux安装准备

开源软件项目剖析与Linux安装准备 开源软件项目的魅力与Linux的诞生 在很多人眼中,Linux就像是一个奇异的突变体,难以想象一个如此复杂且依赖严谨规范的计算机操作系统,竟由全球各地松散的计算机极客志愿者们共同开发。但实际上,开源方式能创造出卓越的软件,往往源于人类…

作者头像 李华
网站建设 2026/6/10 3:06:37

TG买卖60W公民信息,有期徒刑三年无缓刑!

案情回溯罗某某&#xff0c;男&#xff0c;汉族&#xff0c;大学专科文化&#xff0c;户籍所在地江西省吉安市。从2024年3月份开始&#xff0c;罗某某通过翻墙到外网软件telegram上购买、翻墙到外网软件telegram上或在微信群聊里非法下载留存、利用爬虫脚本爬取职称网站上的职称…

作者头像 李华
网站建设 2026/6/10 16:52:47

一个人腰痛的原因是?

以下内容均为真实。 有一位 121212 岁半同学&#xff0c;我们给这位同学取一个化名&#xff0c;就叫小红吧。 小红说&#xff0c;她半年前臀部就特别痛&#xff0c;因为这一点&#xff0c;附近的腰部也很疼&#xff0c;为了写文章&#xff0c;我采访了小红&#xff0c;这是我 3…

作者头像 李华
网站建设 2026/6/9 22:41:46

SG-TCP232-110(单通道串口服务器)特点与功能介绍

一、核心定位与工作模式SG-TCP232-110 是工业级串口转网口协议转换设备&#xff0c;核心功能是实现串口数据与以太网数据的双向透明传输&#xff0c;解决普通串口设备的联网问题。设备集成 RS232 与 RS485 双串口&#xff08;内部连通&#xff0c;仅可单口工作&#xff09;和百…

作者头像 李华
网站建设 2026/6/10 5:18:16

终极合同模板解决方案:快速生成专业商业合同

终极合同模板解决方案&#xff1a;快速生成专业商业合同 【免费下载链接】Contract-Templates 项目地址: https://gitcode.com/gh_mirrors/co/Contract-Templates 还在为每次签订商业合同而头疼吗&#xff1f;Contract-Templates 开源项目为您提供了一套完整的合同模板…

作者头像 李华