[ 编译篇 ] Buildroot Add Package的一些坑

主要说明添加package 遇到的问题以及解决方法

步骤如下:
1. buildroot/configs/xxx_defconfig 添加配置选项 BR2_PACKAGE_DEMO_NAME=y 

2. 目录中buildroot/package/demo_name

3. demo_name 添加demo_name.mk 和 Config.in 

4. package/COnfig.in添加source "package/demo_name/Config.in"

5. buildroot 根目录编译 make demo_name-rebuild

Config.in 内容如下

config BR2_PACKAGE_DEMO_NAME
    bool "demo name"
    help
		demo name 

demo_name.mk 内容如下

DEMO_NAME_VERSION = 20181126
DEMO_NAME_SITE = $(TOPDIR)/../xxx_path
DEMO_NAME_SITE_METHOD = local

define DEMO_NAME_BUILD_CMDS
    $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) all armhf=1
endef

define DEMAO_NAME_INSTALL_TARGET_CMDS
      $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install
endef

$(eval $(generic-package))

编译过程中报错如下:
umask 0022 && make -C xxxx demo_name
/usr/bin/cmake: /usr/local/lib/libcurl.so.4: no version information available (required by /usr/bin/cmake)
>>> demo_name 20181126 Downloading
xxxx/demo_name-20181126.tar.gz: Scheme missing.
--2018-11-26 21:22:13--  http://openlinux.xxx.com:xxx/download/GPL_code_release/ThirdParty/demo-name-20181126.tar.gz
Resolving openlinux.amlogic.com (openlinux.amlogic.com)... 120.25.202.108
Connecting to openlinux.amlogic.com (openlinux.amlogic.com)|120.25.202.108|:8000... connected.
HTTP request sent, awaiting response... 404 Not Found
2018-11-26 21:22:13 ERROR 404: Not Found.

奇怪的是配置文件中(DEMO_NAME_SITE_METHOD = local)已经说明这个包存在本地,编译的时候怎么还去网上下载,而且官方文档已经说明

local for a local source code directory. One should use this when
LIBFOO_SITE specifies a local directory path containing the package
source code. Buildroot copies the contents of the source directory
into the package’s build directory. Note that for local packages, no
patches are applied. If you need to still patch the source code, use
LIBFOO_POST_RSYNC_HOOKS, see Section 17.21.1, “Using the POST_RSYNC
hook”.

本地的包只需要调用rsync实现拷贝的过程,起初判断肯定是demo_name.mk配置文件写错了,和系统自带的demo对来对去,也没有发现问题,多亏同事提醒:是不是demo_name.mk格式有问题

仔细核对,果然发现DEMO_NAME_SITE_METHOD = local后有空格,去掉空格后,问题解决

应该是local 后有空格,buildroot没有识别DEMO_NAME_SITE_METHOD字段,导致本地的包去网上下载,就算网上下载下来,也会报错,因为没有实现rsync拷贝的过程,output/build/demo_name 目录就是空的,编译肯定会报错


参考
### 回答1: 在buildroot编译单独的软件包,可以通过以下步骤: 1. 确定需要编译的软件包名称及版本号; 2. 在buildroot目录下运行make menuconfig命令,进入配置菜单; 3. 选择Target packages -> Generic options -> Selected package,并输入需要编译的软件包名称; 4. 保存配置,并退出菜单; 5. 在buildroot目录下运行make命令,即可开始编译指定的软件包。 ### 回答2: 在使用buildroot进行嵌入式系统的构建时,我们有时会需要对个别软件包进行单独编译,这种情况下使用buildroot的make命令无法满足需要。此时可以使用buildroot中提供的br2-external工具和make命令来进行单独的软件包编译。 步骤如下: 1.创建一个新的目录作为单独编译的软件包的存放路径,路径的名称可以任意起名。 2.使用br2-external工具将目录添加到外部编译目录列表中,可以使用命令“make BR2_EXTERNAL=/path/to/your/devel tree menuconfig”打开配置菜单进行编辑,也可以在.buildroot文件中添加“BR2_EXTERNAL=/path/to/your/devel”进行配置。 3.在目录中创建一个自定义软件包的配置文件,配置文件的命名规则为"package-name.mk",其中包含了软件包相关的编译、安装、配置等信息。配置文件的内容遵循buildroot的Makefile语法规则,具体可以参考buildroot提供的例子。 4.运行make命令进行单独软件包的编译。执行命令“make package-name”即可编译指定软件包。如果需要重新编译,可以执行命令“make package-name-rebuild”。 5.编译完成后,在目录下的output目录中会生成软件包的二进制文件和相关的构建信息。 需要注意的是,在单独编译软件包时,使用的buildroot版本和已经编译完成的版本必须一致,否则会发生编译错误。 除了通过br2-external工具进行单独编译外,也可以将需要编译的软件包加入到buildrootpackage目录中,然后使用make menuconfig命令进行配置和编译。但是这样会增加buildroot整体的编译时间和复杂度,因此建议仅在必要时使用。 ### 回答3: Buildroot 是一个工具链,可以帮助我们在嵌入式系统上快速构建 Linux 操作系统。对于 Buildroot 编译过程中默认没有包含的软件包,我们可以通过添加第三方的软件包或自己编写软件包的方式来实现。下面我们来说一下如何在 Buildroot 中单独编译一个软件包。 1. 接入软件包 将需要编译的软件包添加到 Buildrootpackage 目录下,可以使用 git clone 的方式,如 git clone https://github.com/xxxxxx.git package/xxxxxx。 2. 配置软件包 配置需要编译的软件包的编译选项。在 Buildroot 中,每个软件包都有自己的配置文件,通常位于 package/xxxxxx/Config.in 中。我们可以通过修改 Config.in 文件中的选项来配置需要编译的软件包,如选择编译方式(静态库或动态库)、编译参数等。 3. 构建软件包 构建软件包有两种方式: (1)使用 Buildroot 管理工具(menuconfig 或 make menuconfig)进行编译。运行 make menuconfig,选择需要编译的软件包,将状态设置为 "y",然后保存退出。再运行 make 或 make xxxxx(xxxxx 代表需要编译的软件包名),就可以开始编译。 (2)直接运行 make xxxxx(xxxxx 代表需要编译的软件包名),直接编译指定软件包。这种方式适用于我们只需要快速编译一个特定的软件包,不需要重新编译整个系统。 4. 安装软件包 在软件包编译完成后,我们需要将编译好的二进制文件、库文件等安装在目标系统上。可以通过两种方式来安装软件包: (1)使用 Buildroot 管理工具进行安装。运行 make menuconfig,在 Target Packages 选项中选择需要安装的软件包,状态设置为 "y",然后保存退出。运行 make,系统会自动将编译好的软件包安装到目标系统中。 (2)手动将编译好的软件包安装到目标系统中。可以使用 scp 命令将编译好的软件包传输到目标系统上,然后在目标系统上使用 tar 命令解压安装。 总之,通过 Buildroot 单独编译软件包的过程包括接入软件包、配置软件包、构建软件包和安装软件包,根据需要选择对应的方式即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序手艺人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值