Компіляція-портування своєї програми під OpenWRT

Отримання вихідних кодів

Я збираю OpenWrt із вихідних кодів гілки trunk. Отримати її можна або за допомогою git:

git clone git://nbd.name/openwrt.git

Або за допомогою svn:

svn co svn://svn.openwrt.org/openwrt/trunk/ openwrt/

Як отримати інші гілки, зокрема з пакетами, написано тут.

Підготовка до додавання свого пакета

Переходимо до отриманого каталогу

і отримуємо так називані feeds (додаткові пакети). Отримані feeds можна відредагувати у файлі feeds.conf.default

./scripts/feeds update -a && ./scripts/feeds install -a

Потім виконуємо комадну

І ми дізнаємося яких пакетів не вистачає у нас в системі (в операційній системі)

Додавання свого пакета

Переходимо до каталогу package

Створюємо каталог під наш пакет (у мене він називається ecu)

Копіюємо вихідники нашої програми. Я збираю просту програму, яка збирається простим Makefile'ом

cp -r моя_програма/* ecu/ecu-src/

Вміст каталогу ecu-src/

$ ls -R ecu-src/ ecu-src/: Makefile src

ecu-src/src: crc.c crc.h main.c

Тепер потрібно інтегрувати вихідники з Makefile'ом в систему збоки OpenWRT. Для цього потрібно створити спеціальний Makefile у каталозі ecu/. Вміст мого файлу:

define Package/ecu SECTION:=utils CATEGORY:=Utilities TITLE:=Embedded clock updater endef

define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./ecu-src/* $(PKG_BUILD_DIR)/ endef

define Package/ecu/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/ecu $(1)/bin/ endef

$(eval $(call BuildPackage,ecu))

СкладанняOpenWRT з доданим пакетом пакетом

Переходимо до кореневого каталогу openwrt/ і відкриваємо menuconfig

програми

Вибираю, збирати окремим пакетом:

Все, тепер виходимо та запускаємо складання

або якщо у вас багатоядерний процесор

де n - кількість ядер + 1

А ось і наш пакетик

bin/ar71xx/packages/ecu_1_ar71xx.ipk

Можливі проблеми

Якщо під час збирання з'являється це

. make[3] -C package/ecu compile make -r world: build failed. Please re-run make with V=99 to see what's going on make: *** [world] Помилка 1

то перезапускаємо складання з рекомендованим ключем(дуже докладний висновок)

і чекаємо, у мене, наприклад, була така помилка

. src/main.c: У function 'main': src/main.c:113:2: error: 'for' loop ініціальні роздуми тільки в режимі C99 src/main.c | 6>.