- 论坛徽章:
- 0
|
用更多软件扩充buildroot
一。Package目录首先在package目录下,添加软件目录。如foo.
二。Config.in 文件然后,创建一个名为Config.in 的文件。它基本上包括:
config BR2_PACKAGE_FOO
bool "foo"
help
This is a comment that explains what foo is.
http://foosoftware.org/foo/
最后,你必须添加新foo/Config.in到package/Config.in 。
if !BR2_PACKAGE_BUSYBOX_HIDE_OTHERS
source "package/procps/Config.in"
endif
真正的Makefile文件最后,这是最难的部分。 创建一个名为foo.mk 。 这将包含在 Makefile规则,负责下载,配置,编译和安装软件。
首先,让我们看看如何写Makefile中的autotools的封装,带有一个例子:
1 #############################################################
2 #
3 # foo
4 #
5 #############################################################
6 FOO_VERSION:=1.0
7 FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz
8 FOO_SITE:=http://www.foosoftware.org/downloads
9 FOO_INSTALL_STAGING = YES
10 FOO_INSTALL_TARGET = YES
11 FOO_CONF_OPT = --enable-shared
12 FOO_DEPENDENCIES = libglib2 host-pkgconfig
13 $(eval $(call AUTOTARGETS,package,foo))
6号线
,我们宣布软件包的版本。
7号线
,
8号线
,我们宣布源程序和网络上的下载位置。
9号线
,我们会告诉Buildroot安装申请分期目录。 分期目录,位于build_ARCH/staging_dir/是目录下所有的包被安装,包括他们的文件,等等默认情况下,软件包安装在这个位置使用make install命令。
[/url]
[url=http://203.208.39.132/translate_c?hl=zh-CN&ie=UTF-8&sl=en&tl=zh-CN&u=http://buildroot.uclibc.org/buildroot.html&prev=_t&rurl=translate.google.cn&usg=ALkJrhgmKf4PmVKz_elFnL0Dw7vsdTjgQg#ex1line10]第10行
,我们会告诉Buildroot也将应用程式安装到目标目录。该目录包含了什么将成为根文件系统上运行的目标。 通常,我们尽量不要安装文件,并安装剥夺版本的二进制。 .默认情况下,软件包安装在这个位置使用make install-strip命令。
线11
,我们会告诉Buildroot通过自定义的配置选项,这将被传递到在./configure 脚本之前,配置和建立。
线12
,我们宣布,我们的依赖性,
13号线
,我们调用package/Makefile.autotools.in把事情做完。
第二个解决办法,适合于每一种类型的包装,看起来像这样:
1 #############################################################
2 #
3 # foo
4 #
5 #############################################################
6 FOO_VERSION:=1.0
7 FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz
8 FOO_SITE:=http://www.foosoftware.org/downloads
9 FOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION)
10 FOO_BINARY:=foo
11 FOO_TARGET_BINARY:=usr/bin/foo
12
13 $(DL_DIR)/$(FOO_SOURCE):
14 $(call DOWNLOAD,$(FOO_SITE),$(FOO_SOURCE))
15
16 $(FOO_DIR)/.source: $(DL_DIR)/$(FOO_SOURCE)
17 $(ZCAT) $(DL_DIR)/$(FOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
18 touch $@
19
20 $(FOO_DIR)/.configured: $(FOO_DIR)/.source
21 (cd $(FOO_DIR); rm -rf config.cache; \
22 $(TARGET_CONFIGURE_OPTS) \
23 $(TARGET_CONFIGURE_ARGS) \
24 ./configure \
25 --target=$(GNU_TARGET_NAME) \
26 --host=$(GNU_TARGET_NAME) \
27 --build=$(GNU_HOST_NAME) \
28 --prefix=/usr \
29 --sysconfdir=/etc \
30 )
31 touch $@
32
33 $(FOO_DIR)/$(FOO_BINARY): $(FOO_DIR)/.configured
34 $(MAKE) CC=$(TARGET_CC) -C $(FOO_DIR)
35
36 $(TARGET_DIR)/$(FOO_TARGET_BINARY): $(FOO_DIR)/$(FOO_BINARY)
37 $(MAKE) DESTDIR=$(TARGET_DIR) -C $(FOO_DIR) install-strip
38 rm -Rf $(TARGET_DIR)/usr/man
39
40 foo: uclibc ncurses $(TARGET_DIR)/$(FOO_TARGET_BINARY)
41
42 foo-source: $(DL_DIR)/$(FOO_SOURCE)
43
44 foo-clean:
45 $(MAKE) prefix=$(TARGET_DIR)/usr -C $(FOO_DIR) uninstall
46 -$(MAKE) -C $(FOO_DIR) clean
47
48 foo-dirclean:
49 rm -rf $(FOO_DIR)
50
51 #############################################################
52 #
53 # Toplevel Makefile options
54 #
55 #############################################################
56 ifeq ($(BR2_PACKAGE_FOO),y)
57 TARGETS+=foo
58 endif
首先,这个Makefile中示例适用于一个单一的二进制软件。对于其他软件,如多个库或更复杂的东西与多个二进制文件,它应加以调整。看看其他*.mk中的文件package目录。6~11行:定义一些有用的变量。
FOO_VERSION : foo 的版本号。
FOO_SOURCE : 源程序压缩包名称。
FOO_SITE : foo的档案下载地址。
FOO_DIR :软件将到该目录配置和编译。
FOO_BINARY :软件二进制名称。
FOO_TARGET_BINARY :二进制在目标文件系统内的完整路径。
13~14行,定义了一个目标,从远程站点下载的压缩档的放置目录( DL_DIR )。
16~18行,解压缩下载的压缩档。
20~31行,定义了目标和相关规则,配置该软件。为了对其进行配置,它基本上运行众所周知的在./configure的configure脚本。
33~34行,定义了目标和规则,编译软件。
36~38行,定义了目标和相关规则,安装该软件内的目标文件。安装之后,在/usr/man目录内的目标文件被删除,以节省空间。
40行,确定的主要目标的软件,一个最终将被顶层Makefile下载,编译,然后安装这个套件。 这一目标首先应取决于所有必要的dependecies的软件(在我们的例子中, uclibc和ncurses ) ,同时也取决于最后二进制。 这最后的依赖将呼吁所有先前相依以正确的顺序。
42行,定义了一个简单的目标,只有下载源代码。 这是不正常操作过程中使用的Buildroot ,但需要如果您打算下载所有必需的资源,为后来离线建设。请注意,如果您购买一个新的软件包提供了一个foo-source目标是强制性的,以支持用户如果愿意脱机-建立。 此外,它简化了检查,如果所有的包来源下载。
44~46行,定义一个简单的目标,以清除该软件在建立时调用的Makefiles中的适当的选项。在-clean的目标应该运行make clean
on $(BUILD_DIR)/package-version,必须卸载$(STAGING_DIR)和$(TARGET_DIR)中的所有文件。
48~49行,定义一个简单的目标,完全删除目录中的软件,压缩,配置和编译的所有。MUST completely rm $(BUILD_DIR)/
package-version.
51~58行,增加目标foo名单上的目标是由Buildroot的第一次检查,
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20932/showart_2012096.html |
|