• 12 ubus


    1 ubus

    ubus 由三部分组成:精灵进程、接口库和实用工具

    • 精灵进程它提供一个总线层,在设备启动时负责进程的消息路由和传递。其他进程注册到ubus进程进行消息的发送和接收。这个消息是由linux文件的socket收发实现的。
    • 接口库名称为libubus.so
    • 实用工具ubus是提供命令行的接口调试工具

    2 ubusd

    2.1 ubusd

    ubusd是在netifd之前启动的。该进程监听一个文件套接字接口和其他应用程序通信。其他程序可基于libubus提供的接口或者实用ubus命令行程序来和ubusd进行通信

    • 提供注册对象和方法供其他实体调用
    • 提供其他应用程序注册对象的控制接口、
    • 在特定对象上注册监听事件
    • 向特定对象发送事件消息

    2.2 ubus

    ubus将消息处理抽象为对象和方法。
    一个对象中包含多个方法。发送请求者需要在消息中指定要调用的对象和方法。
    客户端需要向服务器注册收到特定消息时的处理方法。
    ubus是一个总线型消息服务器,任何消息均可通过ubus进程传递


    netifd模块就是通过libubus动态链接库提供API接口向ubus总线注册了多个对象和方法

    2.3 libubus常用接口

    ubus_add_object     : 将对象加入ubus空间,即客户端可以访问的对象
    ubus_connect        : 链接指定的路径,创建并返回路径所代表的ubus上下文
    ubus_send_reply     : 发送响应
    ubus_notify         : 给对象所有的订阅者发送通知
    ubus_lookup         :查找对象。path为路径,如果为空则查找所有对象。cb为回调函数,对查找结果进行处理
    ubus_lookup_id      : 查找对象的id
    ubus_invoke         : 调用对象的方法
    ubus_send_event     : 发送事件消息
    ubus_register_event_handler : 注册事件处理句柄
    ubus_register_subscriber    : 增加订阅通知
    

    3 ubus命令行工具

    3.1 list

    输出所有注册到ubus RPC服务器的对象。list命令是通过调用ubus_lookup接口函数来列出所有的服务器的对象。返回信息由传入ubus_lookup函数的第三个参数receive_list_result处理。这个参数是一个回调函数,结果将输出到屏幕上。
    -v参数指定对象

    ubus list -v iwinfo
    

    3.2 call

    命令在指定对象里调用指定的方法并传递消息参数。
    首先调用ubus_lookup_id,找到指定对象的ID,然后通过ubus_invoke来请求服务器。返回结果使用receive_call_result_data来处理。
    ubus call iwinfo extralna '{"device":"ath0"}'


    3.3 listen

    设置一个监听套接字来接收服务器发出的消息。listen命令是通过ubus_register_event_handler函数来注册时间回调处理函数的
    使用方法:
    在一个终端中去启动监听ubus listen
    在另一个终端中去执行downup。然后第一窗口便可观察到对象状态的变化

    ubus call network.interface.wan down
    ubus call network.interface.wan up
    

    3.4 send

    发送一个通知事件。此事件可使用listen进行监听。send是通过调用ubus_send_event来实现。程序中调用blobmsg_add_json_from_string
    第一个参数:指定对象
    第二个参数:消息内容

    ubus listen hello
    
    ubus send hello '{ "book":"openwrt" }'
    
  • 相关阅读:
    【转】ios输入框被键盘挡住的解决办法
    【转】操作系统Unix、Windows、Mac OS、Linux的故事
    mac 下删除非空文件夹
    解决Win7 64bit + VS2013 使用opencv时出现提“应用程序无法正常启动(0xc000007b)”错误
    图的邻接表表示
    图的邻接矩阵表示
    并查集
    05-树9 Huffman Codes及基本操作
    05-树7 堆中的路径
    堆的操作集
  • 原文地址:https://www.cnblogs.com/burnk/p/15818781.html
Copyright © 2020-2023  润新知