第17章添加新的软件包到Buildroot
2017-12-01 15:28
411 查看
如何查看一个软件的依赖包:1:打开该软件的configure 配置文件,搜索 Package requirement 关键字,可以查看该软件依赖包2:运行 ./configure ,会产生一个config.log日志文件,改文件会记录缺少的依赖包文件。假如我有一个软件包 libfoo1:创建一个软件包目录:在您的软件的目录下创建一个目录
Config.in文件的内容包含与我们的
1 将
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)Bselect C B被选择了,就会自动选择C(C的可见性与B无关)comment (目标和工具链选项的依赖关系)例如:comment "rrdtool needs a toolchain w/ wchar"depends on !BR2_USE_WCHARlibfoo.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,nonethe hash of the file:fornone, one or more non-space chars, usually just the stringxxxformd5, 32 hexadecimal charactersforsha1, 40 hexadecimal charactersforsha224, 56 hexadecimal charactersforsha256, 64 hexadecimal charactersforsha384, 96 hexadecimal charactersforsha512, 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 inFOO_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.gzwget用于正常的FTP/ HTTP下载tarballs。LIBFOO_SITE开始时使用默认值http://,https://或ftp://scp用scp通过SSH下载tarball。LIBFOO_SITE开始时默认使用scp://[/code]用于从Subversion存储库中检索源代码。svn
LIBFOO_SITE开始时默认使用svn://。在指定http://Subversion版本库URL时LIBFOO_SITE,必须指定LIBFOO_SITE_METHOD=svn[/code]cvs用于从CVS存储库中检索源代码。LIBFOO_SITE开始时默认使用cvs:// LIBFOO_SITE=cvs://libfoo.net:/cvsroot/libfoogit用于从Git存储库中检索源代码。LIBFOO_SITE开始时默认使用git://[/code]hg用于从Mercurial存储库中检索源代码。一个 必须指定LIBFOO_SITE_METHOD=hg[/code]用于从Bazaar存储库中检索源代码。bzr
LIBFOO_SITE开始时默认使用bzr://[/code]为当地的tarball(压缩包形式)。当
file
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
相关文章推荐
- sama5d3 xplained 编译文件系统(buildroot)添加nfs支持
- 使用info.plist(或工程名-info.plist)向程序中添加软件Build ID或者版本号信息
- Buildroot编译需要用到的软件包
- buildroot学习(八)——at91sam9g45软件平台更新
- buildroot添加APP
- buildroot添加Qt官方串口库QtSerialPort补丁文件
- buildroot 添加ssh,以及使用stftp 服务
- 参考rpi-buildroot通过软链接方式添加外部buildroot包
- buildroot 文件系统添加telnet, ssh, 以及制作注意事项
- opt/buildroot-gcc342/bin/mipsel-linux-gcc: Command not found解决办法
- 视频软件TurboDemo 教程:如何为视频添加旁白和音乐
- mariadb(MySql)匿名添加root权限账户或者重置root账户密码
- OpenWrt添加内核模块软件包(二)
- Builtroot 定制自己的嵌入式软件系统(一)--初次见面
- linux 添加root用户密码
- Linux下非root用户如何安装软件
- 星海工资软件 build 20040808 bt
- buildrootfilesystem免费裁剪系统
- linux 下添加root 权限的用户