您的位置:首页 > 运维架构

Openwrt 编译生成ipk包

2016-03-14 11:12 302 查看
一、编译时要配置内核,make menuconfig

配置选择Build the OpenWrt SDK

返回保存,输入make等待编译

1.在编译好的文件中会有/bin/ramips/OpenWrt-SDK-ramips-for-linux-x86_64~~*.tar.bz2文件

2.然后解压这个文件

tar xvf OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.6-~~*.tar.bz2
--------Tab补齐

二、编译文档

1、进入这个sdk,会看见一个package,在下新建mkdir -p helloworld/src 两个目录

2、切换到src目录,建立helloworld.c Makefile 两个文件

3、编辑:

helloworld.c:

#include<sdtio.h>

int main(void)

{

printf("hello world!\n");

return 0;

}

Makefile:

helloworld : helloworld.o

(CC) $(LDFLAGS) helloworld.o -o helloworld

helloworld.o : helloworld.c

$(CC) $(CFLAGS) -c helloworld.c

clean :

rm *.o helloworld

4、保存退出,切换到上级目录(helloworld)

5、新建Makefile,内容参考官网

##############################################

# OpenWrt Makefile for helloworld program

#

#

# Most of the variables used here are defined in

# the include directives below. We just need to

# specify a basic description of the package,

# where to build our program, where to find

# the source files, and where to install the

# compiled program on the router.

#

# Be very careful of spacing in this file.

# Indents should be tabs, not spaces, and

# there should be no trailing whitespace in

# lines that are not commented.

#

##############################################

include $(TOPDIR)/rules.mk

# Name and release number of this package

PKG_NAME:=helloworld

PKG_RELEASE:=1

# 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)/package.mk

# Specify package information for this program.

# The variables defined here should be self explanatory.

# If you are running Kamikaze, delete the DESCRIPTION

# variable below and uncomment the Kamikaze define

# directive for the description below

define Package/helloworld

SECTION:=utils

CATEGORY:=Utilities

TITLE:=Helloworld -- prints a snarky message

endef

# Uncomment portion below for Kamikaze and delete DESCRIPTION variable above

define Package/helloworld/description

If you can't figure out what this program does, you're probably

brain-dead and need immediate medical attention.

endef

# Specify what needs to be done to prepare for building the package.

# In our case, we need to copy the source files to the build directory.

# This is NOT the default. The default uses the PKG_SOURCE_URL and the

# PKG_SOURCE which is not defined here to download the source from the web.

# In order to just build a simple program that we have just written, it is

# much easier to do it this way.

define Build/Prepare

mkdir -p $(PKG_BUILD_DIR)

$(CP) ./src/* $(PKG_BUILD_DIR)/

endef

# We do not need to define Build/Configure or Build/Compile directives

# The defaults are appropriate for compiling a simple program such as this one

# Specify where and how to install the program. Since we only have one file,

# the helloworld executable, install it by copying it to the /bin directory on

# the router. The $(1) variable represents the root directory on the router running

# OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install

# directory if it does not already exist. Likewise $(INSTALL_BIN) contains the

# command to copy the binary file from its current location (in our case the build

# directory) to the install directory.

define Package/helloworld/install

$(INSTALL_DIR) $(1)/bin

$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(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))

注意缩进,如果是复制的话若4空格用Tab

保存退出

三、配置文档

1、切换到根目录,即(package上目录) cd ..

2、配置helloworld : 输入vim .config

查找helloworld,-------输入/helloworld 回车

# CONFIG_PACKAGE_helloworld is not set 改成 CONFIG_PACKAGE_helloworld=y 保存退出

3,、编译: make package/helloworld/compile V=s(或者V=99)

4、编译成功,查找该ipk包位置 find -name helloworld*.ipk

OK ! 完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: