zdphpn
zdphpn

Reputation: 23

Openwrt:What can I do to package bin files into ipk packages?

I've compiled the openwrt source and run it on my device (HC5661).Then I wrote a helloword.cpp (an example, any other name) using Eclipse IDE,helloword.bin was successfully generated by compilation and debugged on the target device using sftp and gdb.Now I want to compile helloword into an ipk package. What can I do to package bin files into ipk packages?

Upvotes: 2

Views: 3283

Answers (2)

zdphpn
zdphpn

Reputation: 23

If you already have hello.bin,You can put it into hello/src and:

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) ./src/hello $(1)/usr/bin

endef

$(eval $(call BuildPackage,hello))

makefile(hello/src):

all:hello

If not,You should put hello.cpp into hello/src and:

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)

Upvotes: 0

You have to use the SDK. You can follow this steps:

1) Download the OpenWrt-SDK

2) In the OpenWrt-SDK folder run ./scripts/feeds/update -a && ./scripts/feeds/install -a

3) Create a folder called helloworld in the path OpenWrt-SDK/feeds/packages/utils/

4) Inside this folder create a file called Makefile and new folder called src.

5) Inside the src folder put your helloworld.cpp and the Makefile which allows to compile it.

6) Your Makefile in the folder OpenWrt-SDK/scripts/feeds/packages/utils/ should look like the following:

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) In the OpenWrt-SDK folder run ./scripts/feeds update -i && ./scripts/feeds install helloworld

8) In the same folder run make package/helloworld/compile

9) You can find your .ipk package in OpenWrt-SDK/bin/ar71xx/packages/packages/

PS: You may have to install ccache by typing (Ubuntu) sudo apt-get install ccache. You must not type your makefiles using spaces, you must use tabulator.

Upvotes: 2

Related Questions