Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509381
  • 博文数量: 110
  • 博客积分: 3971
  • 博客等级: 中校
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-20 23:27
文章分类

全部博文(110)

文章存档

2015年(2)

2014年(1)

2013年(1)

2011年(9)

2010年(28)

2009年(12)

2008年(13)

2007年(23)

2006年(21)

我的朋友

分类: LINUX

2009-07-29 14:18:20

用更多软件扩充buildroot

一。Package目录

首先在package目录下,添加软件目录。如foo.

二。Config.in 文件

然后,创建一个名为Config.in 的文件。它基本上包括:
config BR2_PACKAGE_FOO
bool "foo"
help
This is a comment that explains what foo is.


最后,你必须添加新foo/Config.inpackage/Config.in
if !BR2_PACKAGE_BUSYBOX_HIDE_OTHERS
source "package/procps/Config.in"
endif

真正的Makefile文件

最后,这是最难的部分。 创建一个名为foo.mk 这将包含 Makefile规则,负责下载,配置,编译和安装软件。
首先,让我们看看如何写Makefile中的autotools的封装,带有一个例子:
  #############################################################
#
# foo
#
#############################################################
FOO_VERSION:=1.0
FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz
FOO_SITE:=
FOO_INSTALL_STAGING = YES
FOO_INSTALL_TARGET = YES
FOO_CONF_OPT = --enable-shared
FOO_DEPENDENCIES = libglib2 host-pkgconfig
$(eval $(call AUTOTARGETS,package,foo))
,我们宣布软件包的版本
我们宣布源程序和网络上的下载位置。
,我们会告诉Buildroot安装申请分期目录。 分期目录,位于build_ARCH/staging_dir/是目录下所有的包被安装,包括他们的文件,等等默认情况下,软件包安装在这个位置使用make install命令。
,我们会告诉Buildroot也将应用程式安装到目标目录。该目录包含了什么将成为根文件系统上运行的目标。 通常,我们尽量不要安装文件,并安装剥夺版本的二进制。 .默认情况下,软件包安装在这个位置使用make install-strip命令。
,我们会告诉Buildroot通过自定义的配置选项,这将被传递到在./configure 脚本之前,配置和建立。
,我们宣布,我们的依赖性,
,我们调用package/Makefile.autotools.in把事情做完。

第二个解决办法,适合于每一种类型的包装,看起来像这样:
#############################################################
#
# foo
#
#############################################################
FOO_VERSION:=1.0
FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz
FOO_SITE:=
FOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION)
FOO_BINARY:=foo
FOO_TARGET_BINARY:=usr/bin/foo

$(DL_DIR)/$(FOO_SOURCE):
$(call DOWNLOAD,$(FOO_SITE),$(FOO_SOURCE))

$(FOO_DIR)/.source: $(DL_DIR)/$(FOO_SOURCE)
$(ZCAT) $(DL_DIR)/$(FOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
touch $@

$(FOO_DIR)/.configured: $(FOO_DIR)/.source
(cd $(FOO_DIR); rm -rf config.cache; \
$(TARGET_CONFIGURE_OPTS) \
$(TARGET_CONFIGURE_ARGS) \
./configure \
--target=$(GNU_TARGET_NAME) \
--host=$(GNU_TARGET_NAME) \
--build=$(GNU_HOST_NAME) \
--prefix=/usr \
--sysconfdir=/etc \
)
touch $@

$(FOO_DIR)/$(FOO_BINARY): $(FOO_DIR)/.configured
$(MAKE) CC=$(TARGET_CC) -C $(FOO_DIR)

$(TARGET_DIR)/$(FOO_TARGET_BINARY): $(FOO_DIR)/$(FOO_BINARY)
$(MAKE) DESTDIR=$(TARGET_DIR) -C $(FOO_DIR) install-strip
rm -Rf $(TARGET_DIR)/usr/man

foo: uclibc ncurses $(TARGET_DIR)/$(FOO_TARGET_BINARY)

foo-source: $(DL_DIR)/$(FOO_SOURCE)

foo-clean:
$(MAKE) prefix=$(TARGET_DIR)/usr -C $(FOO_DIR) uninstall
-$(MAKE) -C $(FOO_DIR) clean

foo-dirclean:
rm -rf $(FOO_DIR)

#############################################################
#
# Toplevel Makefile options
#
#############################################################
ifeq ($(BR2_PACKAGE_FOO),y)
TARGETS+=foo
endif
首先,这个Makefile中示例适用于一个单一的二进制软件。对于其他软件,如多个库或更复杂的东西与多个二进制文件,它应加以调整。看看其他*.mk中的文件package目录。
6~11行:定义一些有用的变量。
FOO_VERSION : foo 的版本号。
FOO_SOURCE : 源程序压缩包名称。
FOO_SITEfoo的档案下载地址。
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的软件(在我们的例子中, uclibcncurses ) ,同时也取决于最后二进制。 这最后的依赖将呼吁所有先前相依以正确的顺序。
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的第一次检查,



阅读(1512) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~