|
U-Boot поддерживает «автономные» приложения ( U-Boot Standalone Applications), которые загружаются динамически.
Эти приложения могут иметь доступ к функциям ввода-вывода консоли U-Boot,
распределению памяти и службам прерывания.
Несколько простых примеров включены в исходный код U-Boot:
Демо "Hello World"
Файл examples/hello_world.c содержит небольшое демонстрационное приложение «Hello World»,
которое автоматически компилируется при сборке U-Boot и настроено для работы по адресу 0x00040000.
Обратите внимание, что точка входа в программу - 0x40000 для архитектуры PowerPC.
Для других архитектур он может быть другим.
=> loads
## Ready for S-Record download ... ( Готов к загрузке S-Record ... )
~>examples/hello_world.srec
1 2 3 4 5 6 7 8 9 10 11 ...
[file transfer complete]
[connected]
## Start Addr = 0x00040000
=> go 40000 Hello World! This is a test.
## Starting application at 0x00040000 ... ( Запуск приложения с адреса 0x00040000 ...)
Hello World
argc = 7
argv[0] = "40000"
argv[1] = "Hello"
argv[2] = "World!"
argv[3] = "This"
argv[4] = "is"
argv[5] = "a"
argv[6] = "test."
argv[7] = ""
Hit any key to exit ...
## Application terminated, rc = 0x0
В качестве альтернативы можно использовать TFTP для загрузки изображения по сети.
В этом случае используется двоичное изображение (hello_world.bin).
=> tftp 40000 /tftpboot/hello_world.bin
...
=> go 40000 This is another test.
## Starting application at 0x00040000 ...
Hello World
argc = 5
argv[0] = "40000"
argv[1] = "This"
argv[2] = "is"
argv[3] = "another"
argv[4] = "test."
argv[5] = ""
Hit any key to exit ...
## Application terminated, rc = 0x0
Автономные приложения U-Boot — это автономные исполняемые программы, предназначенные для запуска непосредственно
в целевой системе, загружаемые и выполняемые загрузчиком U-Boot, не требуя полной операционной системы, такой как Linux.
Эти приложения отличаются от ядра Linux, поскольку они отвечают за настройку своей собственной среды и не зависят
от служб ядра.
Основные характеристики и применение:
Прямое выполнение: Автономные приложения загружаются в память с помощью U-Boot и выполняются напрямую,
часто до загрузки полной ОС.
Автономность: Они отвечают за настройку собственной среды выполнения, включая управление памятью
и инициализацию периферийных устройств, в отличие от ядра Linux, которое ожидает,
что U-Boot предоставит определенную среду.
Доступ к службам U-Boot: Эти приложения обычно могут взаимодействовать с функциями ввода-вывода
консоли U-Boot и, возможно, с другими службами, предоставляемыми загрузчиком.
Отладка и тестирование: Автономные приложения обычно используются для низкоуровневого тестирования оборудования,
отладки и первоначального запуска встраиваемых систем. Они могут быть неоценимы для проверки функциональности
перед внедрением сложной операционной системы.
Специфические задачи: они могут быть разработаны для специализированных задач, не требующих накладных
расходов на полноценную ОС, таких как прошивка, выполнение тестов памяти или выполнение диагностических процедур.
Рекомендации по разработке:
Программирование на аппаратном уровне: Автономные приложения часто включают программирование на аппаратном уровне,
где разработчики напрямую взаимодействуют с аппаратными регистрами и памятью.
Набор инструментов: Для создания этих приложений требуется набор инструментов для кросс-компиляции,
ориентированный на конкретную архитектуру встроенной системы.
Сценарии компоновщика: Осторожное использование скриптов компоновщика необходимо для обеспечения того,
чтобы код и данные приложения размещались по правильным адресам памяти для выполнения с помощью U-Boot.
Совместимость с окружающей средой: При использовании услуг U-Boot важно понимать среду и ожидания,
которые U-Boot предоставляет для обеспечения совместимости.
По сути, автономные приложения U-Boot предлагают мощный способ взаимодействия со встроенным оборудованием
и его тестирования на фундаментальном уровне, обеспечивая гибкость и контроль, выходящие за рамки того,
что обычно позволяет полноценная операционная система.
|
 |