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安装包相关推荐

  1. Linux源码编译(一):从头文件说起

    Linux源码编译(一):从头文件说起 2013-04-10 14:37:24 分类: LINUX 在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结 ...

  2. 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 ...

  3. Linux源码编译-编译哪些设备树

    Linux源码编译-编译哪些设备树 Fang XS. 1452512966@qq.com 如果有错误,希望被指出 编译内核过程中编译了那些设备树文件 编译源码前都会make xxxdefconfig ...

  4. linux源码编译-安装postgresql数据库(中标麒麟+龙芯CPU)

    linux源码编译-安装postgresql数据库(中标麒麟+龙芯CPU) 一.查看yum源中pgsql版本 二.安装readline-devel 三.下载pgsql库的源码 四.解压下载的源码.co ...

  5. Linux 源码编译安装过程-以安装XZ解压为例

    一.描述 Linux安装软件一般有两种安装方式:安装包安装和源码安装. 1.安装包安装.安装包安装比较简单,例如采用apt-get  install +软件名 命令,安装 deb 包的 Linux 操 ...

  6. linux 源码编译 ./configure 的配置和用法

    阅读目录 1. linux从源码编译到安装软件的3个步骤 2. ./configure 的配置和用法 基本配置 配置安装目录 微调安装目录 配置程序名称 配置系统类型 配置可选特性 配置包选项 配置编 ...

  7. linux源码编译emqttd,emqtt编译及简单测试记录

    emqtt:在Erlang中实现的MQTT客户端库和命令行工具,支持MQTT v5.0 / 3.1.1 / 3.1. 下载源码 编译 cd emqtt & make 运行 ./rebar3 s ...

  8. Linux源码编译安装步骤及命令

    源码编译安装过程 RPM包:rpm -ivh yum install 源码包----开发工具---->可以执行的程序----->运行安装 • 主要优点 – 获得软件的最新版,及时修复bug ...

  9. linux源码编译安装nginx

    1.从nginx的官方网站下载nginx的安装源码包,要下载.gz格式的包才是linux安装包 网址http://nginx.org/download/ wget http://nginx.org/d ...

  10. linux 源码编译upx 压缩软件

    UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe.dos/com.dos/sys.djgpp2/coff. wat ...

最新文章

  1. python 亮度一致_Python玩转各种多媒体,视频、音频到图片
  2. shell编程-实现线性筛
  3. 计算机组成原理 第一章 计算机系统概述
  4. CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)
  5. python源码中的学习笔记_第2章_对象的布尔值与选择结构
  6. python--简易员工信息系统编写
  7. vc6.0处理wps文字
  8. 【MATLAB】图像分割
  9. 计算机酒店管理论文,计算机专业酒店管理系统毕业论文.doc
  10. Python3 猴子第一天摘下若干个桃子,当即吃了一半..
  11. Chapter 12 IP Weighting and Marginal Structural Model
  12. 苏宁API:item_get - 获得suning商品详情
  13. Java总结之基础篇
  14. Testin融资后首个举措:推出O2O一站式测试服务
  15. 您所说的话:您如何与Bacn打交道
  16. C# Bitmap GetPixel 效率太低,太慢的替代方法
  17. matlab gevfit,基于MATLAB和Scipy-GEV-fi的不同参数估计
  18. 《敦泰IC之FT6336的TP代码跟读笔记》
  19. php中单引号双引号那点事---顺便说说把php变量的值传给js
  20. LVI-SAM坐标系外参分析与代码修改,以适配各种数据集

热门文章

  1. swagger注释API :@ApiModel
  2. 硬盘“AHCI”模式和“IDE”模式的区别
  3. 不同计算机的操作码完全相同,单片机课后习题答案
  4. c51单片机时钟程序汇编语言,单片机电子时钟课设汇编语言代码和proteus仿真
  5. 从苹果供应商看2018年全球电子产业链的中国势力变化
  6. 安装和维护ImageJ
  7. 四元数与欧拉角的相互转换
  8. 卡巴斯基2009注册机[纯绿色版本]
  9. Android对话框集合
  10. 电子元件-双向触发二极管与可控硅