Openwrt 软件模块之 libubox

编程入门 行业动态 更新时间:2024-10-17 09:40:26

Openwrt 软件<a href=https://www.elefans.com/category/jswz/34/1771428.html style=模块之 libubox"/>

Openwrt 软件模块之 libubox

目录:

libubox 模块简要

libubox 库源码

libubox 编译

实用工具 jshn

libubox 模块简要

该模块是 Openwrt 的一个核心库,提供了一系列基础API,我们后续要介绍的 Ubus也会用到这个库,可见这个库是多么重要

提供的功能:

AVL 树,加解密,json,链表,网络socket, 事件驱动,任务管理等等

├── avl.c
├── avl-cmp.c
├── avl-cmp.h
├── avl.h
├── base64.c
├── blob.c
├── blob.h
├── blobmsg.c
├── blobmsg.h
├── blobmsg_json.c
├── blobmsg_json.h
├── CMakeFiles
│   ├── CMakeDirectoryInformation.cmake
│   ├── jshn.dir
│   │   ├── build.make
│   │   ├── C.includecache
│   │   ├── cmake_clean.cmake
│   │   ├── DependInfo.cmake
│   │   ├── depend.internal
│   │   ├── depend.make
│   │   ├── flags.make
│   │   ├── link.txt
│   │   └── progress.make
│   ├── progress.marks
│   ├── ubox.dir
│   │   ├── build.make
│   │   ├── C.includecache
│   │   ├── cmake_clean.cmake
│   │   ├── DependInfo.cmake
│   │   ├── depend.internal
│   │   ├── depend.make
│   │   ├── flags.make
│   │   ├── link.txt
│   │   └── progress.make
│   └── ubox-static.dir
│       ├── build.make
│       ├── C.includecache
│       ├── cmake_clean.cmake
│       ├── cmake_clean_target.cmake
│       ├── DependInfo.cmake
│       ├── depend.internal
│       ├── depend.make
│       ├── flags.make
│       ├── link.txt
│       └── progress.make
├── cmake_install.cmake
├── CMakeLists.txt
├── format.c
├── format.h
├── jshn.c
├── json.c
├── json.h
├── jsonrpc.c
├── jsonrpc.h
├── json_script.c
├── json_script.h
├── kvlist.c
├── kvlist.h
├── list.h
├── lua
│   ├── CMakeFiles
│   │   ├── CMakeDirectoryInformation.cmake
│   │   └── progress.marks
│   ├── cmake_install.cmake
│   ├── CMakeLists.txt
│   ├── Makefile
│   └── uloop.c
├── Makefile
├── md5.c
├── md5.h
├── printbuf.c
├── printbuf.h
├── runqueue.c
├── runqueue.h
├── safe_list.c
├── safe_list.h
├── server.c
├── sh
│   └── jshn.sh
├── types.h
├── ulog.c
├── ulog.h
├── uloop.c
├── uloop.h
├── unformat.c
├── usock.c
├── usock.h
├── ustream.c
├── ustream-fd.c
├── ustream.h
├── utils.c
├── utils.h
├── vlist.c
└── vlist.h

libubox 库源码

git clone .git

libubox 编译

需安装 cmake,生成 Makefile

 无需编译 lua 及 example

cmake -D BUILD_LUA:BOOL=OFF -D BUILD_EXAMPLES:BOLL=OFF .

 编译及安装

实用工具 jshn

当完成安装后,jshn 工具已经安装到系统

 可是运行缺提示加载 libubox.so 库 错误

排除库错误

1. 使用 ldd 查看库链接情况,可见的确没找到

 2. 查看系统配置,搜索路径下已经有该文件

3. 既然路径都是正常的为什么没有链接上呢?

    可能原因就是我们新安装的这个库还未被缓存到文件 /etc/ld.so.cache中

    所以我们需要手动刷新这个 cache(记得用sudo)

 4. 再次查看,链接成功

执行示例 1

尽管我们可以用 jshn 工具来读取,设定 JSON 字符串,但是并不便利

我们需要用到一个叫  jshn.sh 的脚本,模块的使用更加便捷,正如其内容描述

# functions for parsing and generating json

该文件并没有在源码中存有,只是提供了一个同名文件的示例(libubox/examples/jshn.sh)

json_init
json_add_string "msg" "Hello, world!"
json_add_object "test"
json_add_int "testdata" "1"
json_close_object
MSG=`json_dump`
# MSG now contains: { "msg": "Hello, world!", "test": { "testdata": 1 } }# parsing json data
json_load "$MSG"
json_select test
json_get_var var1 testdata
json_select ..
json_get_var var2 msg
echo "msg: $var2 - testdata: $var1"

注意在使用 json_X 这些function时,需要 source 一下

 function 提供的功能也不用细说,观其名知其意

然后修改下这个示例,

再次运行:

执行示例 2

我们在实际运行的 Openwrt 环境来试试

小结:

正如文章开头所讲,作为一个核心库,我们在研习 openwrt 时会看见很多 API 的调用,其实用到的就是这里面的,如果想更清晰的把握,学有余力的情况可以看看这部分的代码

下一章我们会开始另一个重要部分的学习:Ubus

查看更多Openwrt笔记

更多推荐

Openwrt 软件模块之 libubox

本文发布于:2024-02-26 11:11:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1702273.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模块   软件   Openwrt   libubox

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!