openwrt 添加私有软件包

添加自行开发的软件包

1.在package目录下创建一个目录

eg:

mkdir hello

 

2.在hello文件夹下建立src文件夹

 

3.在src中添加源文件

eg:

vim hello.c

 

#include <stdio.h>

int main(void){

printf("\n\nhello world !\n\n");

return 0;

}

 

4.在src目录下添加Makefile文件

 

all:
        $(CC) $(CFLAGS) hello.c -o hello


clean:
        rm *.o hello

 

 

5.在hello目录下添加Makefile

#
# Makefile for the Linux Wireless network device drivers.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=hello
PKG_VERSION:=1
PKG_RELEASE:=1.0

PKG_SOURCE:=
PKG_SOURCE_URL:=
PKG_MD5SUM:=

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/$(PKG_NAME)
  SECTION:=utils
  CATEGORY:=hello
  TITLE:=$(PKG_NAME)
  MAINTAINER:=aaa
endef

define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)
        $(CP)  ./src/* $(PKG_BUILD_DIR)
endef

define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR) \
                $(TARGET_CONFIGURE_OPTS) \
                CFLAGS="$(TARGET_CFLAGS)" \
                CPPFLAGS="$(TARGET_CPPFLAGS)" \
                LDFLAGS="$(TARGET_LDFLAGS)"
endef

define Package/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/lib/ko
        $(CP) $(PKG_BUILD_DIR)/$(PKG_NAME)  $(1)/lib/ko/
endef

$(eval $(call BuildPackage,$(PKG_NAME)))

 

6.引入文件

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

 

rules.mk一般在文件的开头,定义各种OpenWrt全局变量,让所有的makefile包含和使用,eg:INSTALL_BIN、INSTALL_DIR。

kernel.mk软件包为内核模块时不可缺少

package.mk一般在软件包的基本信息PKG_NAME PKG_SOURCE等完成再引入,用于编译一般的软件包

 

所谓的模版主要是体现在编译包的定义,用户程序的编译包以Package/开头,然后接着软件名,在Package定义中的软件名可以与软件包不一样,还可以多个定义。

7.编写软件包的基本信息

PKG_NAME 表示软件包名称,将在menuconfig和ipkg可以看到。
PKG_VERSION 表示软件版本号。
PKG_RELEASE 表示Makefile的版本号
PKG_SOURCE 表示源代码的文件名。
PKG_SOURCE_URL 表示源代码的下载网站位置。@SF表示在sourceforge网站,@GNU表示在GNU网站,还有@GNOME、@KERNEL。获取方式可以为:git、svn、cvs、hg、bzr等。有关下载方法可参考$(INCLUDE_DIR)/download.mk和$(SCRIPT_DIR)/download.pl。

PKG_MD5SUM 表示源代码文件的效验码。用于核对软件包是否正确下载。
PKG_CAT 表示源代码文件的解压方法。包括zcat, bzcat, unzip等。
PKG_BUILD_DIR 表示软件包编译目录。它的父目录为$(BUILD_DIR)。如果不指定,默认为$(BUILD_DIR)/$( PKG_NAME)$( PKG_VERSION)。

还有一些关于源代码的定义:
PKG_SOURCE_SUBDIR
PKG_SOURCE_PROTO
PKG_SOURCE_MIRROR
PKG_MIRROR_MD5SUM
PKG_SOURCE_VERSION

这些都可以在include/package.mk中找到定义

8.编译包定义

用户软件包用Package,内核模块软件包使用KernelPackage。

 

8.1 Package/$(PKG_NAME) 将会在menuconfig菜单中显示软件包的基本信息

define Package/$(PKG_NAME)
  SECTION:=utils
  CATEGORY:=hello
  TITLE:=$(PKG_NAME)
  MAINTAINER:=aaa
endef

 

SECTION--表示包的类型,预留

CATEGORY--表示分类,在menuconfig的菜单中可以找到

TITLE--用于软件包的简短描述

DESCRIPTION--用于软件包的详细描述

URL--表示软件包的下载位置

MAINTAINER--表示维护者,选项

DEPENDS--表示与其他软件的依赖.如果存在多个依赖,则每个依赖需用空格分开,依赖前使用+号表示默认显示(即依赖对象没有选中时也会显示这个软件包),依赖前使用@,则默认为不显示(即当依赖对象选中后才显示当前这个软件包)

8.2 Build/Prepare

define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)

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

 

按OpenWrt的习惯,

patches放置补丁文件

files放置一些配置文件等

src放置源程序文件

 

8.3Build/Compile

没有特别的说明可以不定义,然后使用默认的编译方法:Build/Compile/Default

 

define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR) \
                $(TARGET_CONFIGURE_OPTS) \
                CFLAGS="$(TARGET_CFLAGS)" \
                CPPFLAGS="$(TARGET_CPPFLAGS)" \
                LDFLAGS="$(TARGET_LDFLAGS)"
endef

 

8.4Package/$(PKG_NAME)/install

软件包的安装方法,包括一系列拷贝编译好的文件到指定位置,调用时会带一些参数,$(1)表示嵌入式系统的镜像目录,一般可以采用下面的方法:


define Package/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/lib/ko
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME)  $(1)/lib/ko/
endef

 

INSTALL_DIR:=install -d -m0755   --意思是创建所属用户可读写可执行,其他用户可执行的目录

INSTALL_BIN:=install -m0755--意思是将编译好的文件拷贝到镜像文件目录,并具有可执行属性

8.5Package/$(PKG_NAME)/conffiles

本包安装配置文件,一行一个,如果文件结尾使用/,则表示为目录。用于备份配置文件说明,在sysupgrade命令执行时将会用到。

 

8.6Package/$(PKG_NAME)/description

软件包的详细描述,会取代Package/$(PKG_NAME) 下的DESCRIPTION。

8.7Package/$(PKG_NAME)/preinst

软件包安装前处理方法,使用脚本语言,因此定义第一行需要下面的格式:

#!/bin/sh

 

8.8Package/$(PKG_NAME)/postinst

软件包安装后处理方法,使用脚本语言

8.9Package/$(PKG_NAME)/prerm

软件包删除前处理方法,使用脚本语言

8.10 Package/$(PKG_NAME)/postrm

软件包删除后处理方法,使用脚本语言

 

 

 

个人分类: openwrt相关

相关热词: openwrt桥 openwrt翻 openwrt汉 学openwrt openwrt源

▼查看关于本篇文章更多信息

上一篇openwrt编译/升级过程

 

下一篇OpenWrt 增加 package软件包--0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值