Створення пакета з вашої програми

Це третій розділ серії “Hello, world!” для OpenWrt. На цьому етапі ви вже повинні були виконати такі дії:

  • Підготували середовище розробки
  • Налаштували та зібрали інструменти й крос-компілятор
  • Додали `PATH` для доступу до утиліт
  • Створили просту програму “Hello, world!” засобами нативної компіляції

Якщо ви пропустили щось із вищенаведеного, перегляньте попередні розділи.

Система збірки OpenWrt повністю орієнтована на пакети. Практично все в ній — це пакети: від інструментів та крос-компілятора до ядра Linux, модулів, утиліт та програм, що будуть інстальовані на цільовий пристрій.

Тож абсолютно логічно застосувати цей самий підхід і для програми “Hello, world!”.

Механізм доставки сторонніх пакетів — це джерело пакетів (package feed). Це просто каталог (локальний, спільний чи з репозиторію Git), у якому зберігаються пакети-кандидати для включення у прошивку. Цей підхід дозволяє зберігати логіку створення пакета окремо від основного коду.

У цьому прикладі ми створимо локальний репозиторій `mypackages`, у якому буде категорія `examples`, і лише один пакет — `helloworld`:

cd /home/buildbot
mkdir -p mypackages/examples/helloworld

Кожен пакет у OpenWrt описується Makefile-маніфестом. Цей файл містить опис пакета, місце знаходження вихідного коду, інструкції для збірки та встановлення, а також (за потреби) залежності та додаткові скрипти.

Щоб наш застосунок став пакетом — створимо для нього `Makefile`:

cd /home/buildbot/mypackages/examples/helloworld
touch Makefile

Вставте наступний вміст у файл `Makefile` за допомогою вашого текстового редактора:

⚠️ УВАГА: У цьому файлі важливо використовувати справжні табуляції для деяких рядків — `make` не працює зі звичайними пробілами. Деякі редактори (наприклад, VS Code або Notepad++) можуть автоматично замінювати табуляції на пробіли — вимкніть це в налаштуваннях!

Makefile
include $(TOPDIR)/rules.mk
 
# Назва, версія та реліз
PKG_NAME:=helloworld
PKG_VERSION:=1.0
PKG_RELEASE:=1
 
# Розташування вихідного коду
SOURCE_DIR:=/home/buildbot/helloworld
 
include $(INCLUDE_DIR)/package.mk
 
# Опис пакета — як він з’явиться в меню make menuconfig
define Package/helloworld
  SECTION:=examples
  CATEGORY:=Examples
  TITLE:=Hello, World!
endef
 
# Більш докладний опис пакета
define Package/helloworld/description
  A simple "Hello, world!" -application.
endef
 
# Підготовка до збірки — створення build-каталогу та копіювання коду
define Build/Prepare
		mkdir -p $(PKG_BUILD_DIR)
		cp $(SOURCE_DIR)/* $(PKG_BUILD_DIR)
		$(Build/Patch)
endef
 
# Компіляція — спочатку збираємо .o, потім лінкуємо у виконуваний файл
define Build/Compile
		$(TARGET_CC) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/helloworld.o -c $(PKG_BUILD_DIR)/helloworld.c
		$(TARGET_CC) $(TARGET_LDFLAGS) -o $(PKG_BUILD_DIR)/$1 $(PKG_BUILD_DIR)/helloworld.o
endef
 
# Встановлення — створюємо каталог usr/bin та копіюємо туди виконуваний файл
define Package/helloworld/install
		$(INSTALL_DIR) $(1)/usr/bin
		$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin
endef
 
# Завершення — побудова пакета на основі наведених вище правил
$(eval $(call BuildPackage,helloworld))

Докладний розбір цього Makefile виходить за межі цього розділу, але коментарі пояснюють основні частини.

Існує багато способів описати збірку пакета — це лише один із них. Ми навмисно використовуємо явні змінні та інструкції, щоб показати структуру. У реальних проектах іноді достатньо значно менше.

У цьому розділі ми:

  • Створили власне локальне джерело пакетів (`mypackages`)
  • Додали до нього простий пакет `helloworld`
  • Створили Makefile-маніфест із назвами, версією, описом та командами для збірки і встановлення

У наступному розділі ми додамо цей пакет у систему збірки OpenWrt та скомпілюємо його.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/25 17:19
  • by vazaz