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

来源:互联网 发布:mysql 5.1.55.tar.gz 编辑:程序博客网 时间:2024/06/11 19:52

如何查看一个软件的依赖包:

1:打开该软件的configure 配置文件,搜索 Package requirement 关键字,可以查看该软件依赖包

2:运行 ./configure ,会产生一个config.log日志文件,改文件会记录缺少的依赖包文件。


假如我有一个软件包 libfoo


1:创建一个软件包目录:在您的软件的目录下创建一个目录libfoo

2:创建包的配置文件Config文件使包在配置工具中显示):有两种类型: Config.inConfig.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 text          should be wrapped.          http://foosoftware.org/libfoo/ (该软件的url)
帮助文本本身应该缩进一个制表符和两个空格,行宽应包含到72列,其中tab所占计数为8,
所以文本本身的62个字符。帮助文本必须在空行之后提及项目的上游URL。

作为特定于Buildroot的约定,属性的排序如下所示:

  1. 选项的类型:boolstring...提示
  2. 如果需要,default值(s)
  3. 任何依赖的depends on形式
  4. 任何依赖的select形式
  5. 帮助关键字和帮助文本。

其他子选项可以添加到if BR2_PACKAGE_LIBFOO…endif 语句中

最后,必须将你的libfoo/Config.in文件地址添加到 package/Config.in文件中

格式如下:

source "package/libfoo/Config.in.host"


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

         1  将   host-foo  添加到目标包的BAR_DEPENDENCIES变量中
          2没有 Config.in.host文件就创建改文件

Config.in.host文件内容
config BR2_PACKAGE_HOST_FOO        bool "host foo"        help          This is a comment that explains what foo for the host is.          http://foosoftware.org/foo/
4 libfoo/Config.in.host文件地址添加到 package/Config.in.host文件中
主机包将从Host utilities菜单中显示。
source "package/foo/Config.in.host"


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

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:

    • md5sha1sha224sha256sha384sha512none
  • the hash of the file:

    • for none, one or more non-space chars, usually just the string xxx
    • for md5, 32 hexadecimal characters
    • for sha1, 40 hexadecimal characters
    • for sha224, 56 hexadecimal characters
    • for sha256, 64 hexadecimal characters
    • for sha384, 96 hexadecimal characters
    • for sha512, 128 hexadecimal characters
  • the 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     是否允许将软件包安装在临时安装空间,在临时空间中安装头文件和其他开发文件。这将确保LIBFOO_INSTALL_STAGING_CMDS变量中列出的命令 将被执行。13: LIBFOO_CONFIG_SCRIPTS = libfoo-config  14: 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)变量,该变量包含已解压的源代码的目录     
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_USERS31: 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_变量名
     若是变量名没有前缀,则默认前缀是LIBFOO

LIBFOO_SITE的赋值表示:

LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor

LIBFOO_SITE=/opt/software/libfoo.tar.gz

wget用于正常的FTP / HTTP下载tarballs。LIBFOO_SITE开始时使用默认值http://https://或 ftp://

scp用scp通过SSH下载tarball。LIBFOO_SITE开始时默认使用scp://

svn用于从Subversion存储库中检索源代码。LIBFOO_SITE开始时默认使用svn://在指定 http://Subversion版本库URL时 LIBFOO_SITE必须指定LIBFOO_SITE_METHOD=svn

  cvs用于从CVS存储库中检索源代码。LIBFOO_SITE开始时默认使用cvs://  LIBFOO_SITE=cvs://libfoo.net:/cvsroot/libfoo

git用于从Git存储库中检索源代码。LIBFOO_SITE开始时默认使用git://

hg用于从Mercurial存储库中检索源代码。一个 必须指定LIBFOO_SITE_METHOD=hg

bzr用于从Bazaar存储库中检索源代码。LIBFOO_SITE开始时默认使用bzr://

file为当地的tarball(压缩包形式)。LIBFOO_SITE指定一个包压缩包作为本地文件名时,应该使用这个 

local为本地源代码目录(已经解压过)。LIBFOO_SITE指定包含包源代码的本地目录路径时,应该使用这个

  • LIBFOO_INSTALL_STAGING可以设置为YESNO(默认)。如果设置为YESLIBFOO_INSTALL_STAGING_CMDS 则会执行变量中的命令以将程序包安装到登台目录中。
  • LIBFOO_INSTALL_TARGET可以设置为YES(默认)或NO如果设置为YESLIBFOO_INSTALL_TARGET_CMDS 则会执行变量中的命令以将软件包安装到目标目录中。
  • LIBFOO_INSTALL_IMAGES可以设置为YESNO(默认)。如果设置为YESLIBFOO_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_SYSVLIBFOO_INSTALL_INIT_SYSTEMD列出为SystemV-like init系统(busybox,sysvinit等)或systemd单元安装init脚本的操作。这些命令只有在安装了相关的init系统时才会运行(例如,如果在配置中选择systemd作为init系统,则只会LIBFOO_INSTALL_INIT_SYSTEMD运行)


定义这些变量的首选方法是

define LIBFOO_CONFIGURE_CMDS        action 1        action 2        action 3endef

以下是系统内置的变量

$(LIBFOO_PKGDIR)包含libfoo.mkConfig.in文件的目录的路径 

$(@D),其中包含解压缩源代码的目录。

$(DL_DIR) 包含所有Buildroot下载的目录的路径。

$(TARGET_CC)$(TARGET_LD)等等来获得目标交叉编译工具

$(TARGET_CROSS) 获取交叉编译工具链前缀

$(HOST_DIR)$(STAGING_DIR)$(TARGET_DIR) 安装这些软件的地址变量。




2基于autotools的软件(autoconf,automake等)的 Makefiles

见下一页

3基于cmake的软件的Makefile

4为Python模块的Makefile

5Lua模块的Makefiles

原创粉丝点击