转载地址: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
版权声明:本文为博主原创文章,转载请附上博文链接!