OpenWrt开发必备软件模块——ubox(内核模块、日志管理、UCI配置文件数据类型的验证)

一、ubox简介

  • ubox在2013年加入OpenWrt的代码库中。它是 OpenWrt 中的一个核心扩展功能,是OpenWrt的帮助工具箱。

有以下3部分独立功能

  • 内核模块管理,例如加载内核模块,查看已经加载内核模块等。
  • 日志管理。
  • UCI配置文件数据类型的验证。

二、内核模块管理

  • 内核模块管理使用kmodloader来管理,并软链接为以下5个不同的Linux命令:
  • rmmod:从Linux内核中移除一个模块。
  • insmod:向Linux内核插入一个模块。
  • lsmod:显示已加载到Linux内核中的模块状态。

  • modinfo:显示一个Linux内核模块的信息,包含模块路径、许可协议和所依赖模块。

  • modprobe:加载一个内核模块。

三、日志管理

  • 日志管理提供了ubus日志服务,可以通过ubus总线来获取和写入日志。
  • logread读取日志,logd来对日志进行管理。

四、配置文件数据类型的验证(validate_data工具)

  • 对于其他软件模块来说,主要使用 ubox 提供的配置文件验证功能,这样带来了一些好处,可以在软件启动之前使用脚本来对UCI配置进行验证,这样可以很好的同其他软件模块进行分工合作
  • 提供的配置验证工具为validate_data,它有3种用法,在下面介绍。

配置验证选项有很多类型和关键字,下标列出常用的验证关键字含义:

关键字含 义
bool布尔值,合法的取值有"0"、"off"、"false"、"no"、"disabled"、"1"、"on"、"true"、"yes" 和"enabled"
cidr无类别路由选择的缩写,包含 cidr4 和 cidr6,是指 IP 地址和其掩码长度,IPv4 类型通常 为 255.255.255.255/32 格式
cidr4IPv4 类型的 IP 地址和其子网掩码,格式为 255.255.255.255/32
file文件路径,例如为/etc/config/network
host主机名称、域名或 IP 地址
ip4addrIPv4 地址,可以是任何 IP 地址,不验证 IP 地址合法性
list是指一个类型的几个数据列表,中间用空格分开,例如 list(port)表示是一个端口列表
netmask4IPv4 地址的网络掩码,例如 255.255.255.0
or表示可以为几种类型的一个,例如 or(port, portrange)表示为端口或者端口范围
portrange端口范围,形式为 n-m,中间为短横线,不能为冒号,数字小于 65535,并且 n≤m
port端口号数字,合法数字范围为 0~65535
range表示数字所处的范围,例如 range(0, 31)表示大于等于 0,小于等于 31
string字符串,可以限定字符串长度,例如 string(1, 10)限定字符串长度在 1 到 10 之间
uinteger无符号整形数字

validate_data工具用法①

  • 第一种用法是对单个数据类型进行验证,它通常用于在软件启动前直接验证,如果数据类型不正确,将输出错误并退出启动流程。
  • 它需要两个参数,第一个参数为数据类型,第二个参数为需要验证的配置值。
  • 例如:下面是cron软件包对配置参数进行验证,是否为整型数字,如果不是数字,则输出验证失败并退出。
loglevel=$(uci_get "system.@system[0].cronloglevel")

[ -z "${loglevel}" ] || {
    /sbin/validate_data uinteger "${loglevel}" 2>/dev/null
[ "$?" -eq 0 ] || {
    echo "validation failed"
    return 1
    }
}

validate_data工具用法②

  • 第二种用法是对配置文件的多个数据类型进行验证。
  • 它至少需要4个参数,第一个参数为 UCI 配置文件名,第二个参数为配置节类型,第三个参数配置节的名称,第四个参数 为验证的 UCI 选项、类型和默认值。
  • 如果有多个配置选项需要验证,则以空格分开紧跟在 第四个参数在后面。
  • 例如:下面对网络时间服务器的配置进行验证,该用法必须指定配置节的名称,不能对匿名配置节的内容进行检查。前两行是命令输入,后面是该工具对配置文 件检查的结果。可以使用 echo $?来获取其返回值,0 表示成功,根据返回值是否成功再 执行下一步的处理流程。
/sbin/validate_data system timeserver ntp \
    'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0'

system.ntp.server[0]=0.openwrt.pool.ntp.org validates as list(host) with true
system.ntp.server[1]=1.openwrt.pool.ntp.org validates as list(host) with true
system.ntp.server[2]=2.openwrt.pool.ntp.org validates as list(host) with true
system.ntp.server[3]=3.openwrt.pool.ntp.org validates as list(host) with true

system.npt.enabled=1 validates as bool with true
system.ntp.enable_server=1 validates as bool with true

server='0.openwrt.pool.ntp.org'\ '1.openwrt.pool.ntp.org'\
    '2.openwrt.pool.ntp.org ' \ '3.openwrt.pool.ntp.org '; enabled=1; enable_server=1;

validate_data工具用法③

  • 第3种用法的参数和第2种用法参数含义和顺序完全相同,但第 3 个参数为””,表示空字符串,在这种情况下,将生成导入验证服务的命令字符串。
  • 例如:下面案例前两行是命令调用, 其后是该命令生成的字符串。
/sbin/validate_data system timeserver " " ntp \
    'timeserver:list(host)' 'enabled:bool:1' 'enable_server:bool:0' json_add_object; json_add_string "package" "system"; 
json_add_string "type" "timeserver";
json_add_object "data"; 
json_add_string "server" "list(host) "; 
json_add_string "enabled" "bool"; 
json_add_string "enable_server" "bool"; 
json_close_object; json_close_object;

  • 我是小董,V公众点击"笔记白嫖"解锁更多OpenWrt资料内容。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenWrt内核模块是指在OpenWrt操作系统中用于扩展功能的模块。它可以通过ubox工具箱进行管理内核模块管理使用kmodloader来管理,包括加载内核模块、移除内核模块以及查看已加载的内核模块状态。\[1\]在编译OpenWrt源码时,可以使用命令"make package/kernel/hello-kernel/compile V=s"来编译驱动模块,并在编译完成后的目录中找到生成的内核模块文件。\[2\]在软件包定义中,可以设置内核模块的一些变量,如SUBMENU、TITLE、FILES、AUTOLOAD和DEPENDS等,以便在make menuconfig中进行配置和管理。\[3\] #### 引用[.reference_title] - *1* [OpenWrt开发必备软件模块——ubox(内核模块日志管理UCI配置文件数据类型验证)](https://blog.csdn.net/qq_41453285/article/details/102621904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [超详细!手把手演示编译OpenWrt内核驱动模块](https://blog.csdn.net/qq_41453285/article/details/102760270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥的黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值