openwrt增加软件包及内核模块总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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中)增加相应的