前面一文主要讲了buildroot
的使用及一些结构。 这里讲一下如何使用buildroot
来编译一个package
。
Config.in和.mk
首先,编译package需要使用到2个主要的文件, Config.in
和<package>.mk
。
Config.in文件
Config.in
文件包含了buildroot
里面可配置的所有项目。
范例:
1 | config BR2_PACKAGE_LIBFOO |
Config.in
文件是buildroot
配置工具的输入,使用的是Kconfig
格式。具体见·http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt.
可以通过make menuconfig
命令选择编译的包。
.mk文件
开始是一个文件头,包含模块名,一般都是小写的,前后被80个#包含。头部后面紧跟着空行:
1 | ################################################################################ |
然后是赋值语句,等号两边有空格
1 | LIBFOO_VERSION = 1.0 |
缩进使用tab符号
1 | define LIBFOO_REMOVE_DOC |
命令前面必须是tab
,才会被识别为命令。
紧跟着是依赖和配置选项。
1 | ifeq ($(BR2_PACKAGE_PYTHON),y) |
最后是 eval 语句
, 表示包是使用何种编译系统。
如何新增一个package
到buildroot
新增package
目录
首先在package
目录下创建对应的目录, 比如:package/nginx
.
然后再在该目录创建Config.in
文件或者Config.in.host
文件。
Config.in
文件
用于编译运行在目标平台的包使用的Config.in
文件。这个文件包含一些package
相关的选项,并用于在配置工具中显示。
1 | config BR2_PACKAGE_LIBFOO |
这些属性有相对固定的顺序:
- bool、string属性
- default值
- target 依赖
- toolchain依赖
- packages依赖
- select依赖
- help text
然后再在外层的Config.in中添加引用。
1 | source "package/libfoo/Config.in" |
Config.in.host文件
用于编译运行在host的package, 使用的Config.in.host。
略过
Config.in
文件需要保证依赖的包.
主要有2种选项, depends on
和select
。
A depends on B ,只有A被选择了之后,B才可见(B是否可见取决于A)
B select C ,B被选择了,就会自动选择C(C的可见性与B无关)
.mk文件
.mk文件用于描述package
是怎么下载, 配置、编译和安装的。根据package
的类型, .mk文件使用不同的格式编写。
.hash文件
包含下载文件的hash值, 用于校验下载包。
格式如下:
1 | # Hashes from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.{sha1,sha256}: |
如果下载后比较了不匹配,那么下载包将被删除,并且放弃编译。
buildroot
官网提供了一个完整的压缩包,里面包含了很多需要交叉编译的常用的包。可以下载来了看一下别人是怎么写的,这里贴一个最新的链接。
https://buildroot.org/downloads/buildroot-2021.02.3.tar.gz
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。