Ubus linux что это

Русские Блоги

Разработка OpenWRT: 22 — UBUS для модулей программного обеспечения

Во-первых, модуль UBUS введение

  • OpenWRT предоставляет системную шину UBUS, который аналогичен D-шину операционной системы Desktop Linux, а цель — предоставить системный уровень. Функция процесса связи (IPC) Отказ UBUS согласуется с D-Bus в идеях дизайна, обеспечивая функцию шины на уровне системы, по сравнению с D-Bus Уменьшить след памяти системы Это может быть адаптировано к особой среде низкой памяти и низкоугольной производительности CPU встроенных операционных систем Linux.
  • UBUS — инструмент RPC для OpenWRT, Архитектура автобусной шины OpenWRT Это в 2011 году, чтобы присоединиться к OpenWRT. Для того чтобы обеспечить механизмы связи между различными фоновыми процессами и приложениями, проект UBUS был разработан
  • Модуль UBUS состоит из 3 частей:
    • Процесс эльфа Ubusd
    • Интерфейсная библиотека UBUS (libubus.so)
    • Инструмент командной строки UBUS
  • Код UBUS выпускается на основе LGPL2.1, Адрес кода — http://git.openwrt.org/project/ubus.git Официально используется в OpenWRT 12.09

два,Процесс эльфа Ubusd

  • Ядро модуля UBUS представляет собой процесс Wizard UBUSD, который обеспечивает шинный слой, который работает, когда система запускается, отвечает за маршрутизацию и доставку сообщений между процессами. Другие процессы зарегистрированы в процессе UBUSD для отправки и получения. Этот интерфейс реализован с файлами Linux Socket и сообщениями TLV (Type-Value). Каждый процесс регистрирует свой собственный путь в указанном пространстве имен. Каждый путь может обеспечить множество процедур обработки функций с различными параметрами, а процедура обработки функций может вернуть сообщение после обработки завершения.
  • /etc/init.d/ubus: Процесс ELF UBUSD /etc/init.d/ubus начинается, Процесс эльфа Ubusd Начните сразу после запуска системного процесса. Он запускается перед сетевым процессом Netifd, который запускает интерфейс сокета файлов и другой коммуникации приложений.
  • Когда начинается процесс волшебника UBUSD: Другие приложения могут взаимодействовать с процессом UBUSD на основе интерфейса, предоставленного Libubus или использовать командную строку UBUS.
  • UBUS предназначен для отправки сообщений между процессами, не подходящими для передачи большого количества данных (большие объемы данных между процессами должны быть общими)

принцип

  • UBUS — это сервер сообщения типа шины, любое сообщение проходит через процесс UBUSD, поэтому несколько процессов отправляются и получены UBUS при общение друг с другом.

Особенности, предоставляемые UBUS, в основном имеют следующие четыре аспекта:

  • Предоставить регистрационные объекты и методы для других вызовов сущности
  • Вызовите интерфейс управления регистрационным объектом, предоставленным другими приложениями
  • Регистрация прослушивания событий на определенном объекте
  • Отправить сообщения событий на определенные объекты

Объект и метод

  • Ubus.Процесс сообщения Абстрактный объект (объект) и метод (метод) КонцепцияОтказ Объект содержит несколько методов. Объекты и методы имеют свое имя, отправляя запросность, чтобы указать объекты и имена методов, которые будут называться в сообщении.

Подписаться Концепция

  • Еще одна концепция UBUS является подписчиком. Клиент должен зарегистрировать метод обработки при получении конкретного сообщения на сервер. Это уведомляет клиента при изменении сервера на шину UBUS при изменении сервера.

Пассивный формат сообщения TLV

  • UBUS может быть использован для связи между двумя процессами, между процессамиПередать сообщения в формате TLVПользователи не должны заботиться о фактическом формате передачи сообщения
  • Ubus.Формат в jsonОбмен данными с пользователями

Два сценария применения процесса ELF UBUSD

  • 1 Режим клиента / сервера: То есть процесс A предоставляет услуги для некоторой логической сложной памяти, и находится в памяти. Процесс B вызывает эти услуги в виде командной строки или функциональной API
  • 2 Подписаться Режим уведомлений: То есть режим наблюдателя в режиме дизайна. Однозначная зависимость между объектами определяется так, что все объекты, которые зависят от его объектов, уведомляются и автоматически обновляются при изменении состояния объекта. То есть процесс A используется в качестве сервера, и все подписчики уведомляются при изменении состояния объекта.
Читайте также:  Ошибка установки агента обновления windows

три,Интерфейсная библиотека UBUS (libubus.so)

  • Функции интерфейса, предоставленные Libubus, похожи на таблицу.
функция имея в виду
ubus_add_object В пространстве UBUS добавляется к объекту, то есть клиент может получить доступ к объекту
ubus_register_subscriber Добавьте уведомление подписки
ubus_connect Подключите указанный путь, создайте и верните контекст UBUS, представленный путь
ubus_send_reply Выполнить метод завершения для отправки ответа
ubus_notify Отправить уведомление для всех подписчиков объекта
ubus_lookup Найти объекты, путь параметров — это путь к объекту, если вы ищете все объекты. CB — это функция обратного вызова, а результаты результата результата поиска обрабатываются.
ubus_lookup_id Найдите идентификатор объекта и верните параметры идентификатора в указателе
ubus_invoke Способ для вызова объектов
ubus_register_event_handler Регистрационные события ручки ручки
ubus_send_event Отправить событие сообщение
  • Например: Модуль Netifd — зарегистрировать множество объектов и методов к шине UBUS через интерфейс API, предоставленный библиотекой Libubus Dynamic Link (модуль Netifd в следующей статье)

четыре,Инструмент командной строки UBUS

  • Инструмент командной строки UBUS также взаимодействует с UBUSD Server с использованием интерфейса API, предоставленный Libubus.Отказ Это очень полезно при отладке зарегистрированных объектов пространства имен и записи сценариев оболочек. Параметры вызова UBUS и возвраты используют очень дружелюбный формат JSON. UBUS предоставляет пять команд для передачи сообщений
  • Формат команды выглядит следующим образом:

Список команд

  • Команда списка выводит все объекты, которые зарегистрируются на сервере RPC UBUS.
  • Список команда передаетсяВызов интерфейса Ubus_lookupЧтобы перечислить все объекты сервера. Обратная информация обрабатывается третьим параметром request_list_result_list_result_list_result в функции ubus_lookup, которая представляет собой функцию обратного вызова, которая отвечает за вывод результата к экрану.
  • Если вы используете параметр -V: Все методы и параметры указанного объекта (путь пространства имен) будут выводиться на всех выходных экранах
  • Дело:Следующие выходы все объекты, которые регистрируются на сервере UBUS RPC

  • Дело:Ниже указано ниже всех способов и параметров объекта интерфейса локальной сети (но эта команда работает, только скриншоты приведены ниже)

Команда вызова

  • Команда вызоваУкажите указанный метод в указанном объекте и передайте параметры сообщения
  • Сначала звоните командуПозвоните в функцию ubus_ lookup_idНайти идентификатор указанного объекта, затемUBUS_INVOKE ФункцииВызов запросить сервер, возвращаемый результатИспользуйте reteact_call_result_data для обработки
  • Формат сообщения должен быть легитимным форматом строки JSON, в соответствии с подписью функции для передачи правильной строки JSON в качестве параметров метода
  • Дело:

listen

  • Слушать командуУстановите рукав слушателяДля получения сообщений, выданных сервером
  • Слушайте командуUBUS_REGister_event_Handler ФункцияЧтобы зарегистрировать функции обработки обратного вызова события

Дело:

Показанное код — это начать прослушивание в окне терминала, выполнить вызов вниз и в режиме ожидания в другом окне, а затем наблюдается, что состояние объекта изменяется на первом окне.

  • первый шаг:Установите рукав слушателя, затем окно заблокировано

  • Шаг 2:Мы открываем другое окно, чтобы установить свойство объекта «Network.interface.lan», чтобы он вниз с UBUS, после завершения установки, поэтому наша служба SSH также отключается.

  • Но все же можно получить оперативную информацию в другом окне.

  • Третий шаг:Поскольку служба SSH отключается, мы приходим к хосту источника для создания объектов объекта «Network.interface.lan»

  • На данный момент вы можете увидеть его в прослушивании и получите сообщение.

Отправить команду

  • Команда отправки используется для выдачи события уведомления. Это событие можно слушать с использованием команды прослушивания.
  • Команда отправки реализована путем вызова функции ubus_send_event.
  • Формат отправки данных командной строки должен быть форматом JSON, в программе для преобразования функции BLOBALMSG_ADD_JSON_FROM_STRING в формат TLV UBUS
  • Если есть несколько клиентов прослушивания, несколько клиентов прослушивания получат события одновременно.
  • Отправить События уведомлений, как правило, требуют двух параметров, первый параметр является указанным объектом, второй параметр — это содержимое сообщения события
Читайте также:  Windows server 2012 r2 iis servers

Дело:

Далее вы сначала запустите сообщение о событии, прослушивающее объект Hello в первом терминале, а затем отправляйте уведомление об объекте Hello, используя команду отправки во втором терминале.

  • первый шаг:Одно окно прослушивание

  • Шаг 2:Другое окно отправляет уведомление о сообщениях

  • Третий шаг:Вы можете видеть, что окно прослушивания получает сообщение.

Wait_for command.

  • Команда wait_for используется для ожидания нескольких объектов для регистрации в UBUS, когда объект ожидания зарегистрирован,

Интеллектуальная рекомендация

Пошаговая загрузка файла Spring MVC-09 (на основе файла загрузки клиента Servlet3.0 + Html5)

пример тестовое задание Исходный код Несмотря на загрузку файлов в Servlet3.0 +, мы можем очень легко программировать на стороне сервера, но пользовательский интерфейс не очень дружелюбен. Одна HTML-ф.

Создайте многоканальное окно в приложениях Win32

Создайте многоканальное окно в приложениях Win32, создайте несколько оконных объектов одного и того же класса Windows, а окна объектов разных классов окон. .

Путь к рефакторингу IOS-APP (3) Введение в модульное тестирование

IOS-APP реконструкция дороги (1) структура сетевых запросов IOS-APP реконструкция дороги (два) Модельный дизайн При рефакторинге нам нужна форма, позволяющая вносить смелые изменения, обеспечивая при .

Tree——No.617 Merge Two Binary Trees

Problem: Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new bin.

Источник

Ubus linux что это

Ubus is an inter-process communication mechanism in OpenWrt, similar to dbus of the desktop version of linux and binder of Android. Ubus is equivalent to a simplified version of dbus. Ubus is implemented based on unix socket, and the socket is bound to a local file, which has high efficiency;

Unix socket is a C/S model. To establish a socket connection, the server side and client side need to do the following steps:
1. Establish a socket server, bind to a local socket file, and monitor client connections;
2. Establish one or more socket client ends and connect to the server end;
3. The client and server send messages to each other;
4. After the client or server receives the message from the other party, it will process the specific message accordingly.

As shown below:

Ubus is also based on this set of processes, in which ubusd implements server, and other processes implement client, such as ubus(cli), netifd, procd;
The communication between the two clients needs to be forwarded through the server.

ubusd

As the server side of ubus, ubusd has been implemented by OpenWrt, and no modification is required. Let’s analyze the workflow of ubusd;
1. Use usock to create a server-side socket, and bind the socket to the file «/var/run/ubus.sock», open listen, and wait until the client is connected;
2. Add socket to poll in uloop, the trigger condition is read, which means that the server socket is readable, then poll callback server_cb is triggered, and the callback function of server_fd is server_cb;

  1. Server_cb accepts the client connection through accept. After the socket function accept is executed and exits, a new socket will be created. The fd of the new socket is the accept function value, and the old socket remains unchanged, that is, after accept, the server side exists There are two sockets, the old socket is still used for listen, and the new socket establishes a pair with the client for communication with the client;
  2. Construct a ubus_client object according to the fd (int client_fd) of the new socket. The uloop callback function of ubus_client is client_cb. Insert ubus_client into the avl tree (struct avl_tree clients). Each client registered with ubusd corresponds to the avl tree. One of ubus_client;
  3. ubusd_send_hello, send a string «hello» to the socket on the client side;
  4. Add the socket fd in ubus_client to uloop to poll and monitor, the trigger condition is read, the callback function is client_cb, that is, when the client sends a message to the server, the callback client_cb is triggered;
Читайте также:  Linux вывести список только каталогов

Client_cb sends messages to the client through write or sendmsg, and receives messages from the client through read or recvmsg. ubusd_proto_receive_message processes different message types according to the received message, as shown below:

Message type Processing function
UBUS_MSG_PING ubusd_send_pong
UBUS_MSG_ADD_OBJECT ubusd_handle_add_object
UBUS_MSG_REMOVE_OBJECT ubusd_handle_remove_object
UBUS_MSG_LOOKUP ubusd_handle_lookup
UBUS_MSG_INVOKE ubusd_handle_invoke
UBUS_MSG_STATUS ubusd_handle_response
UBUS_MSG_DATA ubusd_handle_response
UBUS_MSG_SUBSCRIBE ubusd_handle_add_watch
UBUS_MSG_UNSUBSCRIBE ubusd_handle_remove_watch
UBUS_MSG_NOTIFY ubusd_handle_notify

ubus cli

OpenWrt implements a cli executable program for ubus. The name of this executable program is «ubus». In most cases of shell script, ubus commands are used for cross-process communication. In this application scenario, ubus is used as the client to send The message goes to ubusd on the server side, and ubusd is forwarded to another client side.

The commands supported by ubus are list, call, listen, send, wait_for and monitor;

  • list
    The format of the command is:

The command is used to list the ubus object and method registered by the system;
For example:

  • call
    The format of the command is:

The command is used to execute a certain method of a certain object registered by a certain ubus client;
For example:

  • listen
    The format of the command is:

Set up a listening socket and observe incoming events;
For example:

  • send
    The format of the command is:

Send a message;
For example:

  • wait_for
    The format of the command is:

Waiting for an event;
For example, after starting netifd, /etc/init.d/network will wait_for network_interface for the add event of this object;

  • monitor
    monitoring, generally not used

The following takes the «ubus call» command as an example to illustrate the workflow of ubus client.
1. ubus_connect has done three parts of work, a) construct the structure ubus_context, ubux_context represents the ubus context of the client, including the object avl tree, client sock, msgbuf registered by the client; b) create the client unix socket; c) connect to server socket.
2. ubus_lookup_id sends a message UBUS_MSG_LOOKUP to ubusd, and finds the object id corresponding to path; the processing function corresponding to ubusd is ubusd_handle_lookup, ubusd maintains the path avl tree of all registered objects, and traverses The path avl tree matches the string to find the corresponding object, and then sends the object’s UBUS_ATTR_OBJPATH, UBUS_ATTR_OBJID, UBUS_ATTR_OBJTYPE and other information back to ubus cli through ubusd_send_obj. The message type is UBUS_MSG_DATA.
3. The callback function of ubus_lookup_id on the ubus cli terminal is ubus_look_id_cb. After all ubus cli receives the message, it will parse out an id number in ubus_lookup_id_cb.
4. ubus_invoke sends a message UBUS_MSG_INVOKE to ubusd, which carries the information UBUS_ATTR_OBJID and UBUS_ATTR_METHOD. The processing function of ubusd corresponding to UBUS_ATTR_METHOD is ubusd_handle_invoke, and VOusd sends the registered message to OB_JINUKE_MS according to the GJID. The client process, after the client process executes the corresponding method, sends the execution result back to ubusd.
5. ubusd sends the execution result of the method to ubus cli, and ubus cli prints the execution result in the callback function receipt_call_result_data.

The overall process is shown in the figure below:

Источник

Оцените статью