buildroot工作原理

转载地址:https://blog.csdn.net/qq_39101111/article/details/78684868

定制生成的目标文件系统

在目标文件系统上添加或覆盖文件(使用 BR2_ROOTFS_OVERLAY)
修改或删除目标文件系统上的文件(使用 BR2_ROOTFS_POST_BUILD_SCRIPT)
在生成文件系统映像之前运行任意命令(使用BR2_ROOTFS_POST_BUILD_SCRIPT)
设置文件权限和所有权(使用 BR2_ROOTFS_DEVICE_TABLE)
添加自定义设备节点(使用 BR2_ROOTFS_STATIC_DEVICE_TABLE)
添加自定义用户帐户(使用BR2_ROOTFS_USERS_TABLES)
生成文件系统映像(使用BR2_ROOTFS_POST_IMAGE_SCRIPT) 后运行任意命令
向某些软件包添加项目特定的修补程序(使用 BR2_GLOBAL_PATCH_DIR)

推荐的目录结构
 +-- board/
|   +-- <company>/
|       +-- <boardname>/
|           +-- linux.config
|           +-- busybox.config
|           +-- <other configuration files>
|           +-- post_build.sh
|           +-- post_image.sh
|           +-- rootfs_overlay/
|           |   +-- etc/
|           |   +-- <some file>
|           +-- patches/
|               +-- foo/
|               |   +-- <some patch>
|               +-- libbar/
|                   +-- <some other patches>
|
+-- configs/
|   +-- <boardname>_defconfig
|
+-- package/
|   +-- <company>/
|       +-- Config.in (if not using a br2-external tree)
|       +-- <company>.mk (if not using a br2-external tree)
|       +-- package1/
|       |    +-- Config.in
|       |    +-- package1.mk
|       +-- package2/
|           +-- Config.in
|           +-- package2.mk
|
+-- Config.in (if using a br2-external tree)
+-- external.mk (if using a br2-external tree)

Buildroot基本上是一组Makefiles的集合工具集。
每个软件包基本上都有一个Makefile,并用.mk扩展名命名。Makefiles被分成许多不同的部分。

该toolchain/目录包含Makefile文件和相关文件的有关交叉编译工具链的所有软件:binutils,gcc,gdb, kernel-headers和uClibc。
该arch/目录包含Buildroot支持的所有处理器体系结构的定义。
该package/目录包含Buildroot可编译和添加到目标根文件系统的所有用户空间工具和库的Makefile和相关文件。每个软件包有一个子目录。
该linux/目录包含Linux内核的Makefile和相关文件。
该boot/目录包含Buildroot支持的引导程序的Makefile和相关文件。
该system/目录包含对系统集成的支持,例如目标文件系统框架和init系统的选择。
该fs/目录包含与生成目标根文件系统映像相关的软件的Makefile和相关文件。
每个目录至少包含2个文件:

something.mk是下载,配置,编译和安装软件包的Makefile something。
Config.in是配置工具描述文件的一部分。它描述了与包相关的选项。
主Makefile执行以下步骤(配置完成后):
创建所有的输出目录:staging,target,build等在输出目录(output/默认情况下,可以通过使用指定的另一个值O=)
生成工具链目标。当使用内部工具链时,这意味着生成交叉编译工具链。当使用外部工具链时,这意味着检查外部工具链的功能并将其导入到Buildroot环境中。
生成TARGETS变量中列出的所有目标。这个变量被所有单个组件的Makefiles填充。生成这些目标将触发用户空间包(库,程序),内核,引导加载程序和根文件系统映像的生成(取决于配置)的编译。

Config.in文件(Config.in 文件几乎包含任何在Buildroot中可配置的条目)

一个节点有以下模式
 config BR2_PACKAGE_LIBFOO
        bool "libfoo"
        depends on BR2_PACKAGE_LIBBAZ
        select BR2_PACKAGE_LIBBAR
        help
          This is a comment that explains what libfoo is. The help text
          should be wrapped.

          http://foosoftware.org/libfoo/

bool,depends on,select和help行缩进one tab
帮助文本本身应该缩进一个制表符和两个空格
Config.in文件是Buildroot中使用的依赖关系工具的配置文件,它是常规的Kconfig文件。有关Kconfig语言的更多详细信息,请参阅 http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt。

something.mk 文件


1标题:文件以标题开始。它包含模块名称,最好是小写,不超过80字符的大小。标题后面必须有一个空行:
 ################################################################################
#
# libfoo
#
################################################################################

2内容:=前面和后面各有一个空格  列如:
 LIBFOO_VERSION = 1.0
LIBFOO_CONF_OPTS + =  - 无-python-support

3缩进:仅使用tab键
 define LIBFOO_REMOVE_DOC
        $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/doc \
                $(TARGET_DIR)/usr/share/man/man3/libfoo*
endef
define块内的命令应始终以 a tab开始,因此可以将它们识别为命令


4可选依赖项(选择安装的一些选项)
YES:(多行语法)

ifeq ($(BR2_PACKAGE_PYTHON),y)
LIBFOO_CONF_OPTS += --with-python-support
LIBFOO_DEPENDENCIES += python
else
LIBFOO_CONF_OPTS += --without-python-support
endif
NO:(单行语法)

LIBFOO_CONF_OPTS += --with$(if $(BR2_PACKAGE_PYTHON),,out)-python-support
LIBFOO_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,)


5Optional hooks:将钩子定义和赋值一起保存在一个块中(选择删除的一些选项配置)。
YES:

ifneq ($(BR2_LIBFOO_INSTALL_DATA),y)
define LIBFOO_REMOVE_DATA
        $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data
endef
LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA
endif
NO:

define LIBFOO_REMOVE_DATA
        $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data
endef

ifneq ($(BR2_LIBFOO_INSTALL_DATA),y)
LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA
endif

--------------------- 
作者:scw_zch 
来源:CSDN 
原文:https://blog.csdn.net/qq_39101111/article/details/78684868 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值