openwrt增加软件包及内核模块总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

openwrt增加软件包及内核模块总结

------ by flb 2016.8.17 一、openwrt的目录结构

上图为openwrt的目录结构,其中第一行为原始目录,第二行是编译过程中生成的目录。各目录的作用如下:

tools:编译时需要一些工具, tools里包含了获取和编译这些工具的命令。里面是一些Makefile,有的可能还有patch。每个Makefile里都有一句$(eval $(call HostBuild)),表示编译这个工具是为了在主机上使用的。

toolchain:包含一些命令去获取kernel headers, C library, bin-utils, compiler, debugger。

target:各平台在这个目录里定义了firmware和kernel的编译过程。package:包含针对各个软件包的Makefile。openwrt定义了一套Makefile模板,各软件参照这个模板定义了自己的信息,如软件包的版本、下载地址、编译方式、安装地址等,用户可在该目录下增加自己的软件包。

include:openwrt的Makefile,mk都存放在这里。

scripts:一些per脚本,用于软件包管理。

dl:软件包下载后都放到这个目录里。

build_dir:软件包都解压到build_dir中,然后在此编译。

staging_dir:最终安装目录。tools,toolchain被安装到这里,rootfs也会放在这里。

feeds:

bin:编译完成后,firmware和各ipk会放到此目录下。

二、增加应用层软件模块软件包

加入的软件包可以是网上下载的开源软件或自行开发的软件。若需增加一个

应用层软件,则需要在package目录下创建一个目录,以包含软件包的各种信息

和与openwrt建立联系文件。openwrt有其Makefile模版,使之能方便的增加

软件包;建立一个软件包不需要太多工作,大部分工作都隐藏在其它的makefile

中,编写工作被抽象成对几个变量的赋值。编写的规则如下。

1、引入文件

openwrt使用三个makefile的子文件,分别为:

include $(TOPDIR)/rules.mk

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

由这些makefile子文件确立软件包加入openwrt的方式和方法及一些变量

的定义。rules.mk一般在 Makefile的开头,kernel.mk对于软件包为内核时不

可缺少,package.mk一般在软件包的基本信息完成后再引入。

2、编写软件包的基本信息

软件包的信息均以PKG_开头,意思和作用如下:

PKG_NAME:表示软件包名称,将在menuconfig和ipkg可以看到。

PKG_VERSION:表示软件版本号。

PKG_RELEASE:表示Makefile的版本号

PKG_SOURCE:表示源代码的文件名。

PKG_SOURCE_URL:表示源代码的下载网站位置。@SF表示在sourceforge网

站,@GNU表示GNU网站。获取方式可以为:git、svn等。有关下载方法

可参考$(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

3、用户程序编译包定义

用户程序软件包使用Package定义,内核模块使用KernelPackage定义。用户程序的编译包以Package/开头,在Package定义中的软件名可以与软件包名不一样。下文中的$(PKG_NAME)为一变量标识,并非直使用$(PKG_NAME)。

a) Package/$(PKG_NAME)

SECTION - 软件包类型 (尚未使用)

CATEGORY - menuconfig中软件包所属的一级目录,如Network

SUBMENU - menuconfig中软件包所属的二级目录,如dial-in

TITLE - 软件包标题

DESCRIPTION - 软件包的详细说明(已放弃使用,使用会出错)

URL - 软件的原始位置,一般是软件作者的主页

MAINTAINER - (optional) 软件包维护人员

DEPENDS - (optional) 依赖项,运行本软件依赖的其他包,如果存在多个依赖,则每个依赖需用空格分开。依赖前若使用+号表示默认显示,即依赖对像没有选中也会显示,使用@则默认不显示,即当依赖对象选中后才显示。

在用户态的软件包没有内核模块的AUTOLOAD参数。如果软件需要在boot时自动运行,则需要在/etc/init.d(package/base-files/files中)增加相应的

相关文档
最新文档