linux源码编译ipk,openwrt SDK, 利用SDK生成自己的ipk安装包
Openwrt SDK是一个可再定位的,预编译好的OpenWrt工具链,适用于在不从头开始编译整个系统的前提下,针对一个特定平台交叉编译单个用户空间包。
使用SDK的原因:
为了保证二进制和特性兼容性,针对特定的发行版编译自定义软件
编译更新版本的指定包文件
使用自定义的补丁或者不同特性来重新编译已经存在的包
#-----官方文档如下
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规则
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)
$(CP) ./src/* $(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
[安装前执行的脚本 记得加上#!/bin/sh 没有就空着]
#!/bin/sh
uci -q batch
delete ucitrack.@aria2[-1]
add ucitrack aria2
set ucitrack.@aria2[-1].init=aria2
commit ucitrack
EOF
exit 0
endef
define Package/$(PKG_NAME)/postinst
[安装后执行的脚本 记得加上#!/bin/sh 没有就空着]
#!/bin/sh
rm -f /tmp/luci-indexcache
exit 0
endef
Package/$(PKG_NAME)/prerm
[删除前执行的脚本 记得加上#!/bin/sh 没有就空着]
endef
Package/$(PKG_NAME)/postrm
[删除后执行的脚本 记得加上#!/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:=
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
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安装包,
下载
1. 解压
tar jxvf OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
2. 进入目录
cd OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2
3. 将自己的代码目录拷贝到本目录的 package目录下
注意 Makefile 必须遵守openwrt的规则, 可参考
http://blog.chinaunix.net/uid-27194309-id-3432651.html
4. 编译, 成功后在bin/ar71xx/packages目录下可以看到相关的ipk文件, 可用winscp 拷贝出来
#编译所有组件
make V=99
#单独编译某个组件
make package/hid/compile
5. 安装到路由器上实验, 这个你们都懂的
#注: SDK的目录不要改动, 否则出现如下错误
xxg@xxg-desktop:~/SDK-ar71xx-gcc-4.6-linaro_uClibc-0.9.33.2$ make
/bin/sh: /home/xxg/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/host/bin/find: not found
/bin/sh: /home/xxg/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/host/bin/find: not found
linux源码编译ipk,openwrt SDK, 利用SDK生成自己的ipk安装包相关推荐
- Linux源码编译(一):从头文件说起
Linux源码编译(一):从头文件说起 2013-04-10 14:37:24 分类: LINUX 在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结 ...
- linux源码编译安装apache( httpd-2.4.53)处理服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473)
linux源码编译安装apache 首先我们需要下载相关的依赖包 apr.apr-util.pcre 下载地址 http://archive.apache.org/dist/apr/apr-1.7.0 ...
- Linux源码编译-编译哪些设备树
Linux源码编译-编译哪些设备树 Fang XS. 1452512966@qq.com 如果有错误,希望被指出 编译内核过程中编译了那些设备树文件 编译源码前都会make xxxdefconfig ...
- linux源码编译-安装postgresql数据库(中标麒麟+龙芯CPU)
linux源码编译-安装postgresql数据库(中标麒麟+龙芯CPU) 一.查看yum源中pgsql版本 二.安装readline-devel 三.下载pgsql库的源码 四.解压下载的源码.co ...
- Linux 源码编译安装过程-以安装XZ解压为例
一.描述 Linux安装软件一般有两种安装方式:安装包安装和源码安装. 1.安装包安装.安装包安装比较简单,例如采用apt-get install +软件名 命令,安装 deb 包的 Linux 操 ...
- linux 源码编译 ./configure 的配置和用法
阅读目录 1. linux从源码编译到安装软件的3个步骤 2. ./configure 的配置和用法 基本配置 配置安装目录 微调安装目录 配置程序名称 配置系统类型 配置可选特性 配置包选项 配置编 ...
- linux源码编译emqttd,emqtt编译及简单测试记录
emqtt:在Erlang中实现的MQTT客户端库和命令行工具,支持MQTT v5.0 / 3.1.1 / 3.1. 下载源码 编译 cd emqtt & make 运行 ./rebar3 s ...
- Linux源码编译安装步骤及命令
源码编译安装过程 RPM包:rpm -ivh yum install 源码包----开发工具---->可以执行的程序----->运行安装 • 主要优点 – 获得软件的最新版,及时修复bug ...
- linux源码编译安装nginx
1.从nginx的官方网站下载nginx的安装源码包,要下载.gz格式的包才是linux安装包 网址http://nginx.org/download/ wget http://nginx.org/d ...
- linux 源码编译upx 压缩软件
UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe.dos/com.dos/sys.djgpp2/coff. wat ...
最新文章
- python 亮度一致_Python玩转各种多媒体,视频、音频到图片
- shell编程-实现线性筛
- 计算机组成原理 第一章 计算机系统概述
- CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)
- python源码中的学习笔记_第2章_对象的布尔值与选择结构
- python--简易员工信息系统编写
- vc6.0处理wps文字
- 【MATLAB】图像分割
- 计算机酒店管理论文,计算机专业酒店管理系统毕业论文.doc
- Python3 猴子第一天摘下若干个桃子,当即吃了一半..
- Chapter 12 IP Weighting and Marginal Structural Model
- 苏宁API:item_get - 获得suning商品详情
- Java总结之基础篇
- Testin融资后首个举措:推出O2O一站式测试服务
- 您所说的话:您如何与Bacn打交道
- C# Bitmap GetPixel 效率太低,太慢的替代方法
- matlab gevfit,基于MATLAB和Scipy-GEV-fi的不同参数估计
- 《敦泰IC之FT6336的TP代码跟读笔记》
- php中单引号双引号那点事---顺便说说把php变量的值传给js
- LVI-SAM坐标系外参分析与代码修改,以适配各种数据集