Openwrt: что я могу сделать, чтобы упаковать файлы bin в пакеты ipk? - PullRequest
0 голосов
/ 07 декабря 2018

Я скомпилировал исходный код openwrt и запустил его на своем устройстве (HC5661). Затем я написал helloword.cpp (пример, любое другое имя) с использованием Eclipse IDE, helloword.bin был успешно сгенерирован компиляцией и отлажен нацелевое устройство с использованием sftp и gdb. Теперь я хочу скомпилировать helloword в пакет ipk.Что я могу сделать, чтобы упаковать файлы bin в пакеты ipk?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Если у вас уже есть hello.bin, вы можете поместить его в hello / src и:

make-файл (hello /):

include $(TOPDIR)/rules.mk

PKG_NAME:=hello
PKG_VERSION:=1.0

include $(INCLUDE_DIR)/package.mk

define Package/hello
  CATEGORY:=Examples
  TITLE:=hello
  DEPENDS:=+libstdcpp
endef

define Package/hello/description
  hello world
endef

define Package/hello/install
    $(INSTALL_DIR) $(1)/usr/bin
    $(INSTALL_BIN) ./src/hello $(1)/usr/bin

endef

$(eval $(call BuildPackage,hello))

make-файл (hello / src):

all:hello

Если нет, вы должны поместить hello.cpp в hello / src и:

makefile (hello /):

include $(TOPDIR)/rules.mk

PKG_NAME:=hello
PKG_VERSION:=1.0

include $(INCLUDE_DIR)/package.mk

define Package/hello
  CATEGORY:=Examples
  TITLE:=hello
  DEPENDS:=+libstdcpp
endef

define Package/hello/description
  hello world
endef

define Package/hello/install
    $(INSTALL_DIR) $(1)/usr/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/usr/bin

endef

$(eval $(call BuildPackage,hello))

makefile (hello / src):

target=hello
all:$(target)

objects=hello.o
hello:$(objects)
    $(CXX) -o $(target) $(objects)

clean:
    @rm -rf $(objects)
0 голосов
/ 11 декабря 2018

Вы должны использовать SDK.Вы можете выполнить следующие действия:

1) Загрузить OpenWrt-SDK

2) В папке OpenWrt-SDK запустить ./scripts/feeds/update -a && ./scripts/feeds/install -a

3) Создать папку с именем helloworld в пути OpenWrt-SDK/feeds/packages/utils/

4) Внутри этой папки создайте файл с именем Makefile и новую папку с именем src.

5) Внутри папки src поместитеhelloworld.cpp и Makefile, который позволяет скомпилировать его.

6) Ваш Makefile в папке OpenWrt-SDK/scripts/feeds/packages/utils/ должен выглядеть следующим образом:

include $(TOPDIR)/rules.mk

# Name and release number of this package
PKG_NAME:=helloworld
PKG_VERSION:=1.0
PKG_RELEASE:=0

# This specifies the directory where we're going to build the program.
# The root build directory, $(BUILD_DIR), is by default the build_mipsel
# directory in your OpenWrt SDK directory
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/uclibc++.mk
include $(INCLUDE_DIR)/package.mk


# Specify package information for this program.
# The variables defined here should be self explanatory.

define Package/helloworld
SECTION:=utils
CATEGORY:=Utilities
TITLE:=helloworld exampke
endef

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


TARGET_CFLAGS += \
    -I$(STAGING_DIR)/usr/include \
    -D_GNU_SOURCE \
    -ggdb3

MAKE_FLAGS += \
    CFLAGS="$(TARGET_CFLAGS)" \
    LDFLAGS="$(TARGET_LDFLAGS)"

define Build/Compile
    $(call Build/Compile/Default, \
        CCOPTS="$(TARGET_CFLAGS)" \
        INCLUDE="$(EXTRA_CFLAGS)" \
        LDFLAGS="$(EXTRA_LDFLAGS)" \
    )
endef


define Package/helloworld/install
    $(INSTALL_DIR) $(1)/bin
    $(CP) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/bin/
endef


# This line executes the necessary commands to compile our program.
# The above define directives specify all the information needed, but this
# line calls BuildPackage which in turn actually uses this information to
# build a package.
$(eval $(call BuildPackage,helloworld))

7) Впапка OpenWrt-SDK запускается ./scripts/feeds update -i && ./scripts/feeds install helloworld

8) В этой же папке запускается make package/helloworld/compile

9) Вы можете найти ваш пакет .ipk в OpenWrt-SDK/bin/ar71xx/packages/packages/

PS: Возможно, вам придется установить ccache, набрав (Ubuntu) sudo apt-get install ccache.Вы не должны вводить свои make-файлы, используя пробелы, вы должны использовать табулятор.

...