Openwrt SDK是一個可再定位的,預編譯好的OpenWrt工具鏈,適用于在不從頭開始編譯整個系統(tǒng)的前提下,針對一個特定平臺交叉編譯單個用戶空間包。
使用SDK的原因:
為了保證二進制和特性兼容性,針對特定的發(fā)行版編譯自定義軟件
編譯更新版本的指定包文件
使用自定義的補丁或者不同特性來重新編譯已經(jīng)存在的包
#-----官方文檔如下
This is the OpenWrt SDK. It contains a stripped-down version of the buildroot. You can use it to test/develop packages without having to compile your own toolchain or any of the libraries included with OpenWrt.
To use it, just put your buildroot-compatible package directory in the subdir 'package/' and run 'make' from this directory.
#------ OPENWRT集成非官方包之Makefile規(guī)則
include $(TOPDIR)/rules.mk
PKG_NAME:=[軟件包名字 和文件夾名稱一樣]
PKG_VERSION:=[軟件包版本 自己寫個]
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
SECTION:=utils
CATEGORY:=[軟件包在menuconfig里的位置 比如Base system]
DEPENDS:=[依賴包 兩個之間通過空格分隔 前面加+為默認顯示 選中該軟件包自動選中依賴包 不加+為默認不顯示 選中依賴包才顯示]
TITLE:=[標題]
PKGARCH:=[平臺 比如ar71xx 全部寫all]
MAINTAINER:=[作者]
endef
define Package/$(PKG_NAME)/description
[軟件包簡介]
endef
#非本目錄下的源碼文件, 拷貝到此相應目錄下. # 如../../xucommon/xucommon.c, 則將 xucommon.c 拷貝到此目錄下的源碼的 ../../ define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/$(PKG_NAME)/conffiles
[升級時保留文件/備份時備份文件 一個文件一行]
endef
define Package/$(PKG_NAME)/install
$(CP) ./files/* $(1)/
endef
define Package/$(PKG_NAME)/preinst
[安裝前執(zhí)行的腳本 記得加上#!/bin/sh 沒有就空著]
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@aria2[-1]
add ucitrack aria2
set ucitrack.@aria2[-1].init=aria2
commit ucitrack
EOF
exit 0
endef
define Package/$(PKG_NAME)/postinst
[安裝后執(zhí)行的腳本 記得加上#!/bin/sh 沒有就空著]
#!/bin/sh
rm -f /tmp/luci-indexcache
exit 0
endef
Package/$(PKG_NAME)/prerm
[刪除前執(zhí)行的腳本 記得加上#!/bin/sh 沒有就空著]
endef
Package/$(PKG_NAME)/postrm
[刪除后執(zhí)行的腳本 記得加上#!/bin/sh 沒有就空著]
endef
$(eval $(call BuildPackage,$(PKG_NAME)))
---------------------------------------------------------------------
# --- 自己的例程: httpclient 目錄下的 Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=httpclient
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/httpclient
SECTION:=utils
CATEGORY:=Utilities
TITLE:=HTTP Client Demo
endef
define Package/httpclient/description
HTTP Client Demo
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/httpclient/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/httptest $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/test.lua $(1)/etc/config/test.lua
endef
$(eval $(call BuildPackage,$(PKG_NAME)))
#--- ser2net 之Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=ser2net
PKG_VERSION:=2.7
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/ser2net
PKG_MD5SUM:=22977477789868923a5de09a85e847dd
PKG_FIXUP:=libtool
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
define Package/ser2net
SECTION:=net
CATEGORY:=Network
TITLE:=Serial port TCP/IP redirector
URL:=http:///projects/ser2net/
endef
define Package/ser2net/description
This is ser2net, a program for allowing network connections to serial ports.
See the man page for information about using the program. Note that ser2net
supports RFC 2217 (remote control of serial port parameters), but you must
have a complient client.
endef
define Package/ser2net/conffiles
/etc/ser2net.conf
endef
# uses GNU configure
define Package/ser2net/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ser2net $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc
$(INSTALL_CONF) $(PKG_BUILD_DIR)/ser2net.conf $(1)/etc/
endef
$(eval $(call BuildPackage,ser2net))
#--- uhttpd 之 Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=uhttpd
PKG_RELEASE:=31
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_CONFIG_DEPENDS :=
CONFIG_PACKAGE_uhttpd-mod-lua
CONFIG_PACKAGE_uhttpd-mod-tls
CONFIG_PACKAGE_uhttpd-mod-tls_cyassl
CONFIG_PACKAGE_uhttpd-mod-tls_openssl
include $(INCLUDE_DIR)/package.mk
define Package/uhttpd/default
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=uHTTPd - tiny, single threaded HTTP server
MAINTAINER:=Jo-Philipp Wich <xm@subsignal.org>
endef
define Package/uhttpd
$(Package/uhttpd/default)
MENU:=1
endef
define Package/uhttpd/description
uHTTPd is a tiny single threaded HTTP server with TLS, CGI and Lua
support. It is intended as a drop-in replacement for the Busybox
HTTP daemon.
endef
define Package/uhttpd-mod-tls
$(Package/uhttpd/default)
TITLE+= (TLS plugin)
DEPENDS:=uhttpd +PACKAGE_uhttpd-mod-tls_cyassl:libcyassl +PACKAGE_uhttpd-mod-tls_openssl:libopenssl
endef
define Package/uhttpd-mod-tls/description
The TLS plugin adds HTTPS support to uHTTPd.
endef
define Package/uhttpd-mod-tls/config
choice
depends on PACKAGE_uhttpd-mod-tls
prompt "TLS Provider"
default PACKAGE_uhttpd-mod-tls_cyassl
config PACKAGE_uhttpd-mod-tls_cyassl
bool "CyaSSL"
config PACKAGE_uhttpd-mod-tls_openssl
bool "OpenSSL"
endchoice
endef
UHTTPD_TLS:=
TLS_CFLAGS:=
TLS_LDFLAGS:=
ifneq ($(CONFIG_PACKAGE_uhttpd-mod-tls_cyassl),)
UHTTPD_TLS:=cyassl
TLS_CFLAGS:=-I$(STAGING_DIR)/usr/include/cyassl -DTLS_IS_CYASSL
TLS_LDFLAGS:=-lcyassl -lm
endif
ifneq ($(CONFIG_PACKAGE_uhttpd-mod-tls_openssl),)
UHTTPD_TLS:=openssl
TLS_CFLAGS:=-DTLS_IS_OPENSSL
TLS_LDFLAGS:=-lssl
endif
define Package/uhttpd-mod-lua
$(Package/uhttpd/default)
TITLE+= (Lua plugin)
DEPENDS:=uhttpd +liblua
endef
define Package/uhttpd-mod-lua/description
The Lua plugin adds a CGI-like Lua runtime interface to uHTTPd.
endef
TARGET_CFLAGS += $(TLS_CFLAGS)
TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib
MAKE_VARS +=
FPIC="$(FPIC)"
LUA_SUPPORT="$(if $(CONFIG_PACKAGE_uhttpd-mod-lua),1)"
TLS_SUPPORT="$(if $(CONFIG_PACKAGE_uhttpd-mod-tls),1)"
UHTTPD_TLS="$(UHTTPD_TLS)"
TLS_CFLAGS="$(TLS_CFLAGS)"
TLS_LDFLAGS="$(TLS_LDFLAGS)"
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/uhttpd/conffiles
/etc/config/uhttpd
/etc/uhttpd.crt
/etc/uhttpd.key
endef
define Package/uhttpd/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/uhttpd.init $(1)/etc/init.d/uhttpd
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/uhttpd.config $(1)/etc/config/uhttpd
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd $(1)/usr/sbin/uhttpd
endef
define Package/uhttpd-mod-tls/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd_tls.so $(1)/usr/lib/
endef
define Package/uhttpd-mod-lua/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/uhttpd_lua.so $(1)/usr/lib/
endef
$(eval $(call BuildPackage,uhttpd))
$(eval $(call BuildPackage,uhttpd-mod-tls))
$(eval $(call BuildPackage,uhttpd-mod-lua))
具體操作如下:
利用 SDK 生成自己的ipk安裝包,
|
|