openwrt增加软件包及内核模块总结文档格式.docx

上传人:b****5 文档编号:8365693 上传时间:2023-05-11 格式:DOCX 页数:8 大小:262.66KB
下载 相关 举报
openwrt增加软件包及内核模块总结文档格式.docx_第1页
第1页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第2页
第2页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第3页
第3页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第4页
第4页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第5页
第5页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第6页
第6页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第7页
第7页 / 共8页
openwrt增加软件包及内核模块总结文档格式.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

openwrt增加软件包及内核模块总结文档格式.docx

《openwrt增加软件包及内核模块总结文档格式.docx》由会员分享,可在线阅读,更多相关《openwrt增加软件包及内核模块总结文档格式.docx(8页珍藏版)》请在冰点文库上搜索。

openwrt增加软件包及内核模块总结文档格式.docx

scripts:

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

dl:

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

build_dir:

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

staging_dir:

最终安装目录。

tools,toolchain被安装到这里,rootfs也会放在这里。

feeds:

bin:

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

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

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

若需增加一个应用层软件,则需要在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中)增加相应的脚本文件。

写法可参照/etc/init.d下的其它文件。

b)Package/$(PKG_NAME)/conffiles#(可选)

软件包需要复制的配置文件列表,一个文件占一行。

如果文件结尾使用/,则表示为目录。

用于备份配置文件说明,在sysupgrade命令执行时将会用到。

c)Package/$(PKG_NAME)/description

软件包的详细描述。

d)Build/Prepare

编译准备方法,对于网上下载的软件包不需要再描述。

对于自行开发的软件包必须说明编译准备方法。

按openwrt的习惯,一般把自己设计程序全部放在src目录下,故一般准备方法为:

defineBuild/Prepare

mkdir-p$(PKG_BUILD_DIR)

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

endef

e)Build/Configure

在Automake中需要进行./configure,所以本配置方法主要针对需要配置的软件包而设计,一般自行开发的软件包可以不在这里说明。

需要使用本定义的情况,可参考dropbear。

f)Build/Compile

编译方法,可参考下面的定义:

defineBuild/$(PKG_NAME)/compile

$(MAKE)-C"

$(PKG_BUILD_DIR)"

\

CROSS_COMPILE="

$(TARGET_CROSS)"

ARCH="

$(LINUX_KARCH)"

SUBDIRS="

EXTRA_CFLAGS="

$(BUILDFLAGS)"

g)Package/$(PKG_NAME)/install

软件包的安装方法,包括一系列拷贝编译发的文件到指定位置。

调用时会带一参数,就是嵌入系统的镜像文件系统目录,因此$

(1)表示嵌入系统的镜像目录。

一般采用下面的方法:

definePackage/$(PKG_NAME)/install

$(INSTALL_DIR)$

(1)/sbin

$(INSTALL_BIN)$(PKG_BUILD_DIR)/$(PKG_NAME)$

(1)/sbin/

$(INSTALL_DIR)$

(1)/etc/init.d

$(INSTALL_BIN)./files/$(PKG_NAME).init$

(1)/etc/init.d/$(PKG_NAME)

如果用户层软件在boot时要自动运行,则需要在安装方法说明中增加自动运行的脚本文件安装。

一般安装文件放在files目录下。

写法参见上蓝色部分。

INSTALL_DIR等在rules.mk文件中定义。

以下几个未使用过,具体用法不清楚。

Package/$(PKG_NAME)/preinst

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

#!

/bin/sh

调用時带入的参数为嵌入式系統的镜像目录。

Package/$(PKG_NAME)/postinst

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

Package/$(PKG_NAME)/prerm

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

Package/$(PKG_NAME)/postrm

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

4)使用定义

完成前面的定义后,必须使用eval函数实现各种定义。

格式为

用户层软件包:

$(eval$(callBuildPackage,$(PKG_NAME)))

内核层软件包:

$(eval$(callKernelPackage,$(PKG_NAME)))

三、增加内核模块软件包

内核模块的Makefile与用户层模块大致相同,以下只叙述其不同的地方。

1)内核模块使用KernelPackage定义;

a)KernelPackage/$(PKG_NAME)

SUBMENU表示子菜单位置,kernel.mk对内核模块定义了CATEGORY为kernelmodules,所以内核模块在menuconfig中的主菜单为kernelmodules,然后有下一级子菜单$(SUBMENU)。

在子菜单下可以看到以kmod-$(PKG_NAME)项目。

AUTOLOAD表示自动装入内核,一般表示方法为:

AUTOLOAD:

=$(callAutoLoad,$(PRIORITY),$(AUTOLOAD_MODS))

AutoLoad的第一个参数$(PRIORITY)为优先级,01为最优先,99为最后装载。

有关自动装载可以在/etc/modules.d目录下看到,第二个参数$(AUTOLOAD_MODS)模块名,每个模块名以空格符分隔。

即可同时装载多个内核模块。

4、编译

通过makemenuconfig可找到所增加的软件包。

makepackage/$(PKG_NAME)/compileV=99即可编译相应的模块。

编译后的文件存在于

用户层:

./build_dir/target_xxx/$(PKG_NAME)/中

内核层:

./build_dir/target_xxx/linux_xxx/$(PKG_NAME)/中

五、用户层与内核层实例

 

1、用户层软件包实例

a)目录结构

b)user_module中的Makefile

c)src中的Makefile,该Makefile写法跟普通makefile一样。

可随意。

源文件:

2、内核模块软件包实例

b)kernel_module中的Makefile

c)src中的Makefile

d)src中的Kconfig

源文件:

(声明:

以上资料大部分来源于网络。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2