IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> sysctl与devlink总结 -> 正文阅读

[系统运维]sysctl与devlink总结

整体概述

由于自己水平和精力有限,本篇博文只涉及如何使用的问题,不涉及讲解原理,如果有朋友对如何创建命令的原理感兴趣,可以自己进行探讨。

sysctl概述

在FreeBSD系统上,设备通信和控制主要通过sysctl和ioctl接口,也就是在用户层(shell)配置的方式,进行对底层驱动参数的一个设置。
具体使用方式例如:
sysctl -A : 通过此命令查看系统当中都有那些可以配置的参数。
比如输入sysctl -A命令后有以下输出,
a.b.c : 1
a.b.c是一种二进制的表示方式,1代表某个参数的值,当然也可以是字符类型或者结构体等。具体的后面遇到代码再讲解。
随后,如果我们输入sysctl a.b.c命令是查看该参数的值,
而sysctl a.b.c=2是将此参数的值进行修改,如果你看到有
0 -> 2的输出就代表值从0修改为了2,已经成功修改了。

sysctl例程感性认识

我们通过一个例程对怎么创建sysctl配置命令的有一个感官上的认识。如下

#include<sys/param.h>
#include<sys/module.h>
#include<sys/kernel.h>
#include<sys/systm.h>
#include<sys/sysctl.h>

static struct sysctl_ctx_list clist;
static struct sysctl_oid *poid;

static int i = 10;
static long j = 20;
static const char *c = "hello init";

static int
sysctl_procedure(SYSCTL_HANDLER_ARGS)
{
    const char *buf = "sysctl_procedure call";
    return sysctl_handle_string(oidp, buf, strlen(buf), req);
}


static int
sysctl_modevent(module_t mod_unused, int event, void *arg __unused)
{
    int error = 0;
    switch (event) {
    case MOD_LOAD:
        sysctl_ctx_init(&clist);

        /*SYSCTL_STATIC_CHILDREN里面的参数为空,那么top为顶层节点*/
        poid = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(/*top name*/), OID_AUTO,
        "top", CTLFLAG_RW, 0, "tree top");
        if (poid == NULL) {
            printf("SYSCTL_ADD_NODE failed\n");
            return EINVAL;
        }

        /*这里注意第二个参数,poid是上一个函数(SYSCTL_ADD_NODE)的返回值,所以有top.long -> 20*/
        SYSCTL_ADD_LONG(&clist, SYSCTL_CHILDREN(poid), OID_AUTO,
        "long", CTLFLAG_RW, &j, 0, "creat long leaf");

        /*top.int -> 10*/
        SYSCTL_ADD_INT(&clist, SYSCTL_CHILDREN(poid), OID_AUTO,
        "int", CTLFLAG_RW, &i, 0, "creat int leaf");

        /*这里也创建了一个节点,使用的是top为父节点,所以有top.node*/
        poid = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(poid), OID_AUTO,
        "node", CTLFLAG_RW, 0, "tree node");
        if (poid == NULL) {
            printf("SYSCTL_ADD_NODE failed\n");
            return EINVAL;
        }

        /*top.node.proc -> sysctl_procedure call*/
        SYSCTL_ADD_PROC(&clist, SYSCTL_CHILDREN(poid), OID_AUTO,
        "proc", CTLFLAG_RD, 0, 0, sysctl_procedure, "A", "creat proc leaf");

       /*这里创建了一个新的节点,所以有_debug.top, 这里没有显示指定poid, 可以设定连接到哪一个父节点上去*/
        poid = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(_debug), OID_AUTO,
        "top", CTLFLAG_RW, 0, "tree node");
        if(poid == NULL) {
            printf("SYSCTL_ADD_NODE failed\n");
            return EINVAL;
        }

        /*_debug.top.string -> c*/
        SYSCTL_ADD_STRING(&clist, SYSCTL_CHILDREN(poid), OID_AUTO,
        "string", CTLFLAG_RD, c, 0, "new string leaf");

        printf("module loaded\n");
        break;
    case MOD_UNLOAD:
        if (sysctl_ctx_free(&clist)) {
            printf("sysctl_ctx_free failed.\n");
            return -1;
        }
        printf("module unloaded\n");
        break;
    default:
        error = -1;
        break;
     }
    return error;
}

static moduledata_t sysctl_mod = {
    "sysctl_modevent",
    sysctl_modevent,
    NULL
};
DECLARE_MODULE(sysctl_modevent, sysctl_mod, SI_SUB_EXEC, SI_ORDER_ANY);

makefile:


动态创建sysctl宏总结

SYSCTL_STATIC_CHILDREN 宏

SYSCTL_CHILDREN宏

sysctl接口的简单使用


devlink概述

后面在补齐。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:45:38  更:2022-05-11 16:47:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:25:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码