Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 3(131)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3

Библиографическое описание:
Борисов Е.Г., Орлов И.А. АВТОМАТИЗАЦИЯ ПРОЦЕССА РЕДАКТИРОВАНИЯ ФАЙЛОВ ДЕРЕВА УСТРОЙСТВ // Студенческий: электрон. научн. журн. 2021. № 3(131). URL: https://sibac.info/journal/student/131/201600 (дата обращения: 26.11.2024).

АВТОМАТИЗАЦИЯ ПРОЦЕССА РЕДАКТИРОВАНИЯ ФАЙЛОВ ДЕРЕВА УСТРОЙСТВ

Борисов Евгений Геннадьевич

студент, институт микроприборов и систем управления, Национальный исследовательский университет «Московский институт электронной техники»,

РФ, г. Зеленоград

Орлов Илья Александрович

студент, институт микроприборов и систем управления, Национальный исследовательский университет «Московский институт электронной техники»,

РФ, г. Зеленоград

АННОТАЦИЯ

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

ABSTRACT

This article will consider the main purpose, structure and software implementation of the device tree in the Linux operating system. Also the program flowchart that automates the work with file extensions of the device tree is presented.

 

Ключевые слова: дерево устройств, источник данных дерева устройств, массив двоичных данных о дереве устройств.

Keywords: device tree, device tree source, device tree blob.

 

Дерево устройств (англ. Device tree) – это древовидная структура, предназначенная для описи физического оборудования в системе. В свою очередь, каждый узел такой структуры необходим для описания характеристик представляемого устройства. С помощью device tree ядро операционной системы может использовать и управлять такими устройствами, как процессор или память [1].

До появления деревьев устройств вся информация о каждом устройстве, используемом системой, хранилась в ядре Linux, например, расположение памяти и прерывания. Такой подход хорошо функционировал, когда системой использовалось несколько платформ. Но со временем количество микроконтроллерных плат с собственным набором оборудования выросло. Разработчикам стало сложно добавлять всё новые и новые устройства в ядро, поэтому была разработана концепция дерева устройств [2].

Представление простого дерева устройств с описанием типа платформы, процессора и памяти показано на рисунке 1. Узлы организованы в иерархию как набор свойств и значений. Подузлы определяют отношения устройств в иерархии [3].

На рисунке 1 видно определение системы на базе процессора P1010 семейства QorIQ. Имя системы в форме <производитель>, <модель> присваивается ключевому слову «compatible». Это слово используется для определения типа устройства в операционной системе. В данном примере видно, что узел CPUs определяет один центральный процессор с адресом модуля 0 (CPU@0). Также в дереве имеется узел ethernet с адресом модуля FE001000 [1].

 

Рисунок 1. Дерево устройств высокого уровня

 

Имя узла – это метка, используемая для идентификации узла. Адрес блока в узле определяет базовый адрес шины, на котором находится узел. Это основной адрес, используемый для доступа к устройству. Имя блока состоит из имени узла, символа «@» и адреса блока (например, CPU @ 0).

Узел может содержать несколько свойств, представляемых в формате: <имя> = <значение>. Имя состоит из строки, а значение может быть массивом байт, строк, чисел или дескриптором указателя, а также смесью типов. Например, значение может быть:

– device-type = «cpu»;

– reg = <0x0>;

– next-level-cache = <&L2>.

Дескриптор указателя - это 32-битное значение, которое позволяет ссылаться на узел из свойства другого узла.

Адреса кодируются с использованием следующих трех свойств:

– reg

– #address-cells

– #size-cells

Каждое устройство имеет свойство reg. В нём перечислены диапазоны адресов, используемые устройством. Значение свойства представлено одним или несколькими 32-битными числами, называемыми ячейками [1].

Свойства #address-cells и #size-cells задаются 32-битными числами и используются, если узел имеет дочерние элементы в иерархии дерева устройств. Свойство #address-cells необходимо для указания числа ячеек, задающих поле адреса свойства reg у дочернего узла. А #size-cells указывает число ячеек, задающих поле размера свойства reg [4].

Для программной реализации деревьев устройств разработаны несколько расширений файлов, рассмотрим некоторые их них.

Файлы .dts (англ. device tree source) содержат описание элементов устройства на уровне платы. По соглашению, являются конечными деревьями устройств, а также, как правило, в них включены файлы расширения dtsi.

Файлы .dtsi (англ. device tree source include)  содержат описание устройств на уровне системы на кристалле (system on a chip). Система на кристалле (SoC) представляет собой интегральную электронную схему, выполняющую функции целого устройства.

Файлы .dtb (англ. device tree blob) являются двоичным представлением дерева устройств. Они используются для обмена данными о дереве устройств между программами. Например, при загрузке операционной системы микропрограмма передает dtb ядру операционной системы.

Формат dtb кодирует данные дерева устройств в линейную структуру данных без указателей. Он состоит из небольшого заголовка (fdt_header), за которым следуют три раздела переменного размера: блок резервирования памяти (memory reservation block), структурный блок (structure block) и блок строк (strings block). Они должны присутствовать в сплющенном дереве устройств именно в таком порядке. Таким образом, структура дерева устройств при загрузке в память по адресу будет напоминать диаграмму на рисунке 2.

 

Рисунок 2. Структура дерева устройств при загрузке в память

 

Разделы со свободным пространством (free space) могут отсутствовать, хотя в некоторых случаях они могут потребоваться для удовлетворения ограничений выравнивания отдельных блоков [1].

Очень часто необходимо оперативно изменять параметры в файлах dtsi и собирать новое дерево устройств. Например, требуется запускать графический модуль с различными матрицами. Сама концепция дерева устройств при этом не изменяется. Можно всё делать вручную, то есть каждый раз открывать нужный dtsi файл, находить в нем параметры и изменять их, а затем компилировать дерево. Такой способ замены занимает много времени, требует дополнительной квалификации оператора и навыков программирования. Для упрощения и автоматизации этого процесса разработаем программу с графическим интерфейсом пользователя.

Программа должна выполнять следующие функции:

– открывать файлы дерева устройств и считывать из него значения свойств графического модуля в текстовые поля;

– сохранять измененные значения свойств в открытом файле;

– переводить dts файл (источник данных о дереве устройств) в dtb файл (массив двоичных данных о дереве устройств) и обратно.

Одна из возможных реализаций пользовательского интерфейса представлена на рисунке 3.

 

Рисунок 3. Пользовательский интерфейс

 

В программе содержатся три кнопки, каждая из которых отвечает за выполнение своей функции. Так, например, кнопка «Open» отвечает за открытие файла дерева устройств, кнопка «Save» - за сохранение измененных значений свойств, а кнопка «Convert» - за перевод из dts формата файла в dtb формат и обратно.

При открытии файла все необходимые значения параметров из него будут взяты и записаны в соответствующие им поля в программе. При изменении значений и нажатии на кнопку «Save», они автоматически запишутся в исходный открытый файл.

Значение в полях «whole line» и «whole frame» изменить нельзя, так как не являются параметрами. Эти поля нужны только для отображения суммы значений параметров, находящихся вместе с ними в одной группе.

На рисунке 4 приведем алгоритм программы в виде блок-схемы [5].

 

Рисунок 4. блок-схема программы

 

Таким образом, разработанная программа позволяет операторам с легкостью изменять значения параметров в файлах дерева устройств и экономить собственное время, не тратив его на ручной поиск этих параметров.

 

Список литературы:

  1. Introduction to Device Trees [Электронный ресурс] URL: https://www.nxp.com/docs/en/application-note/AN5125.pdf (дата обращения: 24.01.2021)
  2. About the Device Tree [Электронный ресурс] URL: http://www.ofitselfso.com/BeagleNotes/AboutTheDeviceTree.pdf (дата обращения: 24.01.2021)
  3. Thomas Petazzoni. Device Tree for Dummies [Электронный ресурс] URL: https://elinux.org/images/f/f9/Petazzoni-device-tree-dummies_0.pdf (дата обращения: 24.01.2021)
  4. Devicetree Specification [Электронный ресурс] URL: https://buildmedia.readthedocs.org/media/pdf/devicetree-specification/latest/devicetree-specification.pdf (дата обращения: 24.01.2021)
  5. ГОСТ 19.701-90 (ИСО 5807-85) Единая система программной документации (ЕСПД). Схемы алгоритмов, программ, данных и систем. Обозначения условные и правила выполнения [Электронный ресурс] URL: http://docs.cntd.ru/document/9041994 (дата обращения: 24.01.2021)

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.