第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.in
和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 text should be wrapped. http://foosoftware.org/libfoo/ (该软件的url)
帮助文本本身应该缩进一个制表符和两个空格,行宽应包含到72列,其中tab所占计数为8,
所以文本本身的62个字符。帮助文本必须在空行之后提及项目的上游URL。
作为特定于Buildroot的约定,属性的排序如下所示:
- 选项的类型:
bool
,string
...提示- 如果需要,
default
值(s)- 任何依赖的
depends on
形式- 任何依赖的
select
形式- 帮助关键字和帮助文本。
其他子选项可以添加到
if BR2_PACKAGE_LIBFOO…endif
语句中
最后,必须将你的
libfoo/Config.in文件地址添加到
package/Config.in文件中
格式如下:
source "package/libfoo/Config.in.host"
Config.in.host(主机包的配置文件,为目标包服务)
文件(可选创建:与主机系统建立联系的配置文件,表明这是为主机创建的软件包,在主机上运行,目的是提供目标机软件构建时的依赖性)
host-foo 添加
到目标包的BAR_DEPENDENCIES
变量中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 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 stringxxx
- 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
- for
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_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
宏用于包交叉编译的目标。:host-generic-package
宏用于为主机本地编译的主机包.mk
文件中调用它们:一次性创建生成目标包的规则和创建生成主机包的规则:$(eval $(generic-package))$(eval $(host-generic-package))调用
generic-package
和/或host-generic-package
宏必须在.mk
文件的末尾,在所有变量定义之后。generic-package
使用由.mk文件定义的变量,并以大写的包名为变量的前缀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
可以设置为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_INIT_SYSV
并LIBFOO_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.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的软件的Makefile
4为Python模块的Makefile
5Lua模块的Makefiles
- 第17章添加新的软件包到Buildroot
- 添加新软件到Buildroot
- Buildroot编译需要用到的软件包
- 第12章 添加OpenWrt软件包
- 向DataGridView中添加新的一行数据,可以添加到最后一行或作为第一行
- 向DataGridView中添加新的一行数据,可以添加到最后一行或作为第一行
- 添加一个新的驱动到内核
- 添加一个新的HMD到OSVR
- 本地新创建工程添加到新的远程仓库
- 16.2.6 把软件包添加到用户的PATH语句中
- 新得立软件包的管理使用
- GParted需要手动添加的软件包
- 关于添加openwrt软件包的概述
- buildroot编译的问题
- buildroot的使用简介
- Buildroot, yocto 的对比
- 添加新的exploit到metasploit中去
- 添加新的菜单到jira导航栏
- Maven项目部署后,域名访问配置
- 批处理内容制作阶段和重新目的化
- C#下给TextBlock动态添加下划线
- 深度学习---之hdf5,lmdb
- morph 原理实现
- 第17章添加新的软件包到Buildroot
- 火狐DOM查看器(查看内存中的DOM),安装,使用
- 403 问题的解决
- 微信开发服务器验证总是失败wordpress微信机器人插件验证失败的解决
- java中的两个对象的相比较
- 如何转载CSDN里的好博文?
- 访问权限
- Windows安装Mysql5.7(超简单)
- CC2640中GAPRole的大致状态变化图