Автономные приложения U-Boot


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 предлагают мощный способ взаимодействия со встроенным оборудованием и его тестирования на фундаментальном уровне, обеспечивая гибкость и контроль, выходящие за рамки того, что обычно позволяет полноценная операционная система.