Компіляція-портування своєї програми під 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>.