Существует концептуальная связь между пакетами поддержки платы и HAL (уровень аппаратной абстракции) в том смысле, что драйверы устройств/модули ядра выполняют аппаратную абстракцию, а пакет поддержки платы предоставляет интерфейс для драйверов устройств или сам является уровнем аппаратной абстракции. .
Таким образом, в основном BSP имеет функциональные возможности, аналогичные BIOS эпохи DOS:
Кроме того, BSP должен выполнять следующие операции.
- Инициализировать процессор
- Инициализировать шину
- Инициализировать контроллер прерываний
- Инициализировать часы
- Инициализировать настройки ОЗУ
- Настройте сегменты
- Загрузите и запустите загрузчик с флешки
из: https://en.wikipedia.org/wiki/Board_support_package
BIOS в современных ПК инициализирует и тестирует аппаратные компоненты системы и загружает загрузчик с запоминающего устройства, которое затем инициализирует операционную систему. В эпоху DOS BIOS обеспечивал уровень аппаратной абстракции для клавиатуры, дисплея и других устройств ввода/вывода (драйверов устройств), который стандартизировал интерфейс для прикладных программ и операционной системы.< /strong> Более поздние операционные системы не используют BIOS после загрузки, а напрямую обращаются к аппаратным компонентам.
источник: https://en.wikipedia.org/wiki/BIOS
Другим аспектом является использование деревьев устройств в BSP. Дерево устройств представляет собой унифицирующую или стандартизирующую концепцию для описания аппаратного обеспечения машины:
Загрузчик U-boot и подготовка к отправке
Дуг Эбботт, Linux для встроенных приложений и приложений реального времени (четвертое издание), 2018 г.
Дерево устройств
Одной из самых больших проблем при переносе операционной системы, такой как Linux, на новую платформу является описание аппаратного обеспечения. Это связано с тем, что описание оборудования разбросано по нескольким десяткам или около того драйверов устройств, ядра и загрузчика, и это лишь некоторые из них. Конечным результатом является то, что эти различные части программного обеспечения становятся уникальными. для каждой платформы количество вариантов конфигурации растет, и для каждой платы требуется уникальный образ ядра.
Было несколько подходов к решению этой проблемы. Понятие «пакет поддержки платы» или BSP пытается собрать весь аппаратно-зависимый код в нескольких файлах в одном месте. Можно утверждать, что все поддерево arch/
дерева исходных текстов ядра Linux представляет собой гигантский пакет поддержки платы.
Взгляните на поддерево arch/arm/
ядра. Там вы найдете большое количество каталогов в форме mach-*
и plat-*
, предположительно сокращенных от «машина» и «платформа» соответственно. Большинство файлов в этих каталогах предоставляют информацию о конфигурации для конкретной реализации архитектуры ARM. И, конечно же, каждая реализация описывает свою конфигурацию по-разному.
Не было бы неплохо иметь единый язык, который можно было бы использовать для однозначного описания аппаратного обеспечения компьютерной системы? Это предпосылка и обещание деревьев устройств.
Периферийные устройства в системе можно охарактеризовать по ряду параметров. Есть, например, символьные и блочные устройства. Существуют устройства с отображением памяти и те, которые подключаются через внешнюю шину, такую как I2C или USB. Затем есть платформенные устройства и обнаруживаемые устройства.
Обнаруживаемые устройства — это те, которые находятся на внешних шинах, таких как PCI и USB, которые могут сообщить системе, что они из себя представляют и как они настроены. То есть они могут быть «обнаружены» ядром. Идентифицировав устройство, довольно просто загрузить соответствующий драйвер, который затем опрашивает устройство, чтобы определить его точную конфигурацию.
Устройства платформы, с другой стороны, не имеют механизма для идентификации себя. Реализации системы на кристалле (SoC), такие как Sitara, изобилуют этими платформенными устройствами — системными часами, контроллерами прерываний, GPIO, последовательными портами, и это лишь некоторые из них. Механизм дерева устройств особенно полезен для управления устройствами платформы.
Концепция дерева устройств развилась в ветви ядра PowerPC, и именно там она, по-видимому, используется чаще всего. Фактически, теперь требуется, чтобы все платформы PowerPC передавали дерево устройств ядру во время загрузки. Текстовое представление дерева устройств представляет собой файл с расширением .dts. Эти файлы .dts обычно находятся в дереве исходного кода ядра по адресу arch/$ARCH/boot/dts
.
Дерево устройств — это иерархическая структура данных, описывающая набор устройств и соединительных шин компьютерной системы. Она организована в виде узлов, начинающихся с корня, представленного «/
», точно так же, как и корневая файловая система. Каждый узел имеет имя и состоит из «свойств», представляющих собой пары «имя-значение». Он также может содержать «дочерние» узлы.
В листинге 15.1 приведен образец дерева устройств, взятый с веб-сайта devicetree.org. Он ничего не делает, кроме иллюстрации структуры. Здесь у нас есть два узла с именами node1 и node2. node1 имеет два дочерних узла, а node2 имеет один дочерний узел. Свойства представлены именем=значением. Значения могут быть строками, списками строк, одним или несколькими числовыми значениями, заключенными в квадратные скобки, или одной или несколькими «ячейками», заключенными в угловые скобки. Значение также может быть пустым, если свойство передает логическое значение своим присутствием или отсутствием.
источник: https://www.sciencedirect.com/topics/computer-science/board-support-package
Через наложения дерева устройств модули ядра могут быть загружены во время загрузки, т. е. в RPi добавление dtoverlay=lirc-rpi
к /boot/config.txt
загружает lirc-pi
модуль ядра/драйвер устройства:
Будущий файл config.txt по умолчанию может содержать такой раздел:
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
Если у вас есть оверлей, который определяет некоторые параметры, их можно указать либо в следующих строках, например:
dtoverlay=lirc-rpi
dtparam=gpio_out_pin=16
dtparam=gpio_in_pin=17
dtparam=gpio_in_pull=down
источник: https://www.raspberrypi.org/documentation/configuration/device-tree.md
При сборке BSP с помощью Yocto собирается вся аппаратная информация, разбросанная по драйверам устройств, ядру, загрузчику и т. д. Вот руководство разработчика, как это можно сделать в Yocto https://www.yoctoproject.org/docs/2.5/bsp-guide/bsp-guide.html
[Документация Yocto]... утверждает, что BSP «… касается только аппаратных компонентов. В конечной точке распространения вы можете отправить BSP вместе с системой сборки и другими инструментами. Однако важно сохранять различие в том, что это отдельные компоненты, которые объединяются в определенные конечные продукты».
источник: https://www.microcontrollertips.com/board-support-package/
person
ralf htp
schedule
01.02.2020