您的位置:首页 > 产品设计 > UI/UE

第17章添加新的软件包到Buildroot

2017-12-01 15:28 411 查看
如何查看一个软件的依赖包:1:打开该软件的configure 配置文件,搜索 Package requirement 关键字,可以查看该软件依赖包2:运行 ./configure ,会产生一个config.log日志文件,改文件会记录缺少的依赖包文件。假如我有一个软件包 libfoo1:创建一个软件包目录:在您的软件的目录下创建一个目录
libfoo
2:创建包的配置文件Config文件(使包在配置工具中显示):有两种类型: 
Config.in
和[code]Config.in.host

 
Config.in
文件(目标包的配置文件)

Config.in文件的内容包含与我们的
libfoo
软件相关的选项描述,这些选项将在配置工具中使用和显示。它应该基本上包含以下内容:
config BR2_PACKAGE_LIBFOO (软件包包名)bool "libfoo"      (软件在menuconfig界面中显示的名字)help               (该软件的帮助信息)This is a comment that explains what libfoo is. The help textshould be wrapped. http://foosoftware.org/libfoo/ (该软件的url)
帮助文本本身应该缩进一个制表符和两个空格,行宽应包含到72列,其中tab所占计数为8,
所以文本本身的62个字符。帮助文本必须在空行之后提及项目的上游URL。
作为特定于Buildroot的约定,属性的排序如下所示:选项的类型:
bool
string
...提示如果需要,
default
值(s)任何依赖的
depends on
形式任何依赖的
select
形式帮助关键字和帮助文本。
其他子选项可以添加到ifBR2_PACKAGE_LIBFOO…endif
 语句中[/code]
最后,必须将你的libfoo/Config.in文件地址添加到
 
package/Config.in文件中
[/code]
格式如下:
[/code]
[/code]
source "package/libfoo/Config.in.host"
[/code]
[/code]

Config.in.host(主机包的配置文件,为目标包服务)
文件(可选创建:与主机系统建立联系的配置文件,表明这是为主机创建的软件包,在主机上运行,目的是提供目标机软件构建时的依赖性)

         1  将   
host-foo 添加
到目标包的
BAR_DEPENDENCIES
变量中         2没有 
Config.in.host
文件就创建改文件3 
Config.in.host
文件内容
config BR2_PACKAGE_HOST_FOObool "host foo"helpThis is a comment that explains what foo for the host is. http://foosoftware.org/foo/[/code] 4 将
libfoo/Config.in.host文件地址添加到
 
package/Config.in.host文件中
主机包将从
Hostutilities
菜单中显示。
source "package/foo/Config.in.host"
[/code]

depends on
select(软件包之间的依赖性关系)

A depends on B  只有A被选择了之后,B才可见(B是否可见取决于A)

B   
select   C     B被选择了,就会自动选择C(C的可见性与B无关)comment (目标和工具链选项的依赖关系)例如:
comment "rrdtool needs a toolchain w/ wchar"depends on !BR2_USE_WCHAR
libfoo.hash文件简介(在需要的情况下创建该文件,用来在下载源码包时检查和验证用的)The format of this file is one line for each file for which to check the hash, each line being space-separated, with these three fields:the type of hash, one of:
md5
sha1
sha224
sha256
sha384
sha512
none
the hash of the file:for 
none
, one or more non-space chars, usually just the string 
xxx
for 
md5
, 32 hexadecimal charactersfor 
sha1
, 40 hexadecimal charactersfor 
sha224
, 56 hexadecimal charactersfor 
sha256
, 64 hexadecimal charactersfor 
sha384
, 96 hexadecimal charactersfor 
sha512
, 128 hexadecimal charactersthe name of the file:for a source archive: the basename of the file, without any directory component,for a license file: the path as it appears in 
FOO_LICENSE_FILES
.内容格式如下
# Hashes from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.{sha1,sha256}: sha1   486fb55c3efa71148fe07895fd713ea3a5ae343a                         libfoo-1.2.3.tar.bz2sha256 efc8103cc3bcb06bda6a781532d12701eb081ad83e8f90004b39ab81b65d4369 libfoo-1.2.3.tar.bz2# md5 from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.md5, sha256 locally computed:md5    2d608f3c318c6b7557d551a5a09314f03452f1a1                         libfoo-data.binsha256 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b libfoo-data.bin# Locally computed:sha256 ff52101fb90bbfc3fe9475e425688c660f46216d7e751c4bbdb1dc85cdccacb9 libfoo-fix-blabla.patch# No hash for 1234:none   xxx                                                              libfoo-1234.tar.gz# Hash for license files:sha256 a45a845012742796534f7e91fe623262ccfb99460a2bd04015bd28d66fba95b8  COPYINGsha256 01b1f9f2c8ee648a7a596a1abe8aa4ed7899b1c9e5551bda06da6e422b04aa55  doc/COPYING.LGPL

特定构建系统的包的基础结构

libfoo.mk文件(根据生成的Makefile的不同方式,其内容写入方式不同)

1:通用包(不使用autotools或CMake)的 Makefiles:内容格式如下:
01: ################################################################################02: #03: # libfoo04: #05: ################################################################################06:07: LIBFOO_VERSION = 1.0            软件包的版本08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz  软件压缩包的名称09: LIBFOO_SITE = http://www.foosoftware.org/download 软件包的URL10: LIBFOO_LICENSE = GPL-3.0+  许可证11: LIBFOO_LICENSE_FILES = COPYING   带有许可证文本的文件12: LIBFOO_INSTALL_STAGING = YES     是否允许将软件包安装在临时安装空间,在临时空间中安装头文件和其他开发文件。这将确保[code]LIBFOO_INSTALL_STAGING_CMDS
变量中列出的命令 将被执行。13: LIBFOO_CONFIG_SCRIPTS = libfoo-config14: LIBFOO_DEPENDENCIES = host-libaaa libbbb 该软件得主机依赖包和目标依赖包15:16: define LIBFOO_BUILD_CMDS 编译时的命令(编译的步骤)17: $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all18: endef19:20: define LIBFOO_INSTALL_STAGING_CMDS 安装过程中的临时空间的步骤21: $(INSTALL) -D -m 0755 $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a22: $(INSTALL) -D -m 0644 $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h23: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib24: endef
$(@D)
变量,该变量包含已解压的源代码的目录 [/code]
25:
26: define LIBFOO_INSTALL_TARGET_CMDS  应该执行哪些步骤来将软件包安装到目标空间中
27: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib28: $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d29: endef30:我们定义了这个包所使用的用户(例如,以非root的身份运行一个守护进程)(
LIBFOO_USERS
)31: define LIBFOO_USERS 32: foo -1 libfoo -1 * - - - LibFoo daemon33: endef34:35: define LIBFOO_DEVICES 创建设备节点文件36: /dev/foo c 666 0 0 42 0 - - -37: endef38:39: define LIBFOO_PERMISSIONS 设置该软件权限40: /bin/foo f 4755 foo libfoo - - - - -41: endef42:43: $(eval $(generic-package)) 调用这个
generic-package
函数,根据前面定义的变量生成所有Makefile代码,以使你的包工作所有变量必须以相同的前缀开始。此前缀始终是软件包名称的大写版本(请参阅下面的内容以了解软件包名称的定义)。

 
generic-package 函数
参考

通用目标包有两种变体。
1:generic-package
宏用于包交叉编译的目标。:2:
host-generic-package
宏用于为主机本地编译的主机包可以在一个
.mk
 文件中调用它们:一次性创建生成目标包的规则和创建生成主机包的规则:
$(eval $(generic-package))$(eval $(host-generic-package))
调用
generic-package
和/或
host-generic-package
宏必须在
.mk
文件的末尾,在所有变量定义之后。对于目标包,
generic-package
使用由.mk文件定义的变量,并以大写的包名为变量的前缀所以:目标包变量名 LIBFOO_变量名     主机软件名 HOST_LIBFOO_变量名     若是变量名没有前缀,则默认前缀是LIBFOOLIBFOO_SITE的赋值表示:LIBFOO_SITE=http://svn.xiph.org/trunk/TremorLIBFOO_SITE=/opt/software/libfoo.tar.gz
wget
用于正常的FTP/ HTTP下载tarballs。
LIBFOO_SITE
开始时使用默认值
http://
https://
或 
ftp://
scp
用scp通过SSH下载tarball。
LIBFOO_SITE
开始时默认使用
scp://
[/code]
svn
用于从Subversion存储库中检索源代码。
LIBFOO_SITE
开始时默认使用
svn://
。在指定 
http://
Subversion版本库URL时 
LIBFOO_SITE
,必须指定
LIBFOO_SITE_METHOD=svn
[/code]
  
cvs
用于从CVS存储库中检索源代码。
LIBFOO_SITE
开始时默认使用
cvs:// LIBFOO_SITE=cvs://libfoo.net:/cvsroot/libfoo
git
用于从Git存储库中检索源代码。
LIBFOO_SITE
开始时默认使用
git://
[/code]
hg
用于从Mercurial存储库中检索源代码。一个 必须指定
LIBFOO_SITE_METHOD=hg
[/code]
bzr
用于从Bazaar存储库中检索源代码。
LIBFOO_SITE
开始时默认使用
bzr://
[/code]
file
为当地的tarball(压缩包形式)。当
LIBFOO_SITE
指定一个包压缩包作为本地文件名时,应该使用这个 [/code]
local
为本地源代码目录(已经解压过)。当
LIBFOO_SITE
指定包含包源代码的本地目录路径时,应该使用这个[/code]
[/code]
[/code]
LIBFOO_INSTALL_STAGING
可以设置为
YES
NO
(默认)。如果设置为
YES
LIBFOO_INSTALL_STAGING_CMDS
 则会执行变量中的命令以将程序包安装到登台目录中。
LIBFOO_INSTALL_TARGET
可以设置为
YES
(默认)或
NO
。如果设置为
YES
LIBFOO_INSTALL_TARGET_CMDS
 则会执行变量中的命令以将软件包安装到目标目录中。
LIBFOO_INSTALL_IMAGES
可以设置为
YES
NO
(默认)。如果设置为
YES
LIBFOO_INSTALL_IMAGES_CMDS
 则会执行变量中的命令以将程序包安装到images目录中。
LIBFOO_INSTALL_TARGET_CMDS
列出当程序包是目标程序包时要执行的将程序包安装到目标目录的操作。该包必须将其文件安装到由给定的目录
$(TARGET_DIR)
。只需要安装执行软件包所需的文件 。目标文件系统完成后,头文件,静态库和文档将被重新删除。构建过程的不同步骤的变量
LIBFOO_EXTRACT_CMDS
列出了解压缩包的操作这通常不需要,因为tarroot自动由Buildroot处理。但是,如果软件包使用非标准存档格式(例如ZIP或RAR文件),或者使用非标准组织的tarball,则此变量允许覆盖程序包基础结构的默认行为。
LIBFOO_CONFIGURE_CMDS
 列出了在编译之前配置程序包所要执行的操作
LIBFOO_BUILD_CMDS
 列出了编译软件包所要执行的操作。
LIBFOO_INSTALL_TARGET_CMDS
列出当程序包是目标程序包时要执行的将程序包安装到目标目录的操作。该包必须将其文件安装到由给定的目录
$(TARGET_DIR)
。只需要安装执行软件包所需的文件 。目标文件系统完成后,头文件,静态库和文档将被重新删除。
LIBFOO_INSTALL_STAGING_CMDS
列出了当程序包是目标程序包时要执行的将程序包安装到登台目录中的操作。该包必须将其文件安装到由给定的目录
$(STAGING_DIR)
。所有的开发文件都应该安装,因为可能需要编译其他软件包。LIBFOO_INSTALL_IMAGES_CMDS  制作镜像包
LIBFOO_INSTALL_INIT_SYSV
LIBFOO_INSTALL_INIT_SYSTEMD
列出为SystemV-likeinit系统(busybox,sysvinit等)或systemd单元安装init脚本的操作。这些命令只有在安装了相关的init系统时才会运行(例如,如果在配置中选择systemd作为init系统,则只会
LIBFOO_INSTALL_INIT_SYSTEMD
运行)定义这些变量的首选方法是
define LIBFOO_CONFIGURE_CMDSaction 1action 2action 3endef
以下是系统内置的变量
$(LIBFOO_PKGDIR)
包含
libfoo.mk
Config.in
文件的目录的路径 
$(@D)
,其中包含解压缩源代码的目录。
$(DL_DIR)
 包含所有Buildroot下载的目录的路径。
$(TARGET_CC)
$(TARGET_LD)
等等来获得目标交叉编译工具
$(TARGET_CROSS)
 获取交叉编译工具链前缀
$(HOST_DIR)
$(STAGING_DIR)
$(TARGET_DIR)
 安装这些软件的地址变量。2基于autotools的软件(autoconf,automake等)的 Makefiles见下一页3基于cmake的软件的Makefile4为Python模块的Makefile5Lua模块的Makefiles
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: