You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用Buildroot制作Linux镜像时添加自定义服务

操作步骤

前提配置

首先确认Buildroot已启用systemd作为init系统:

  • 执行make menuconfig进入配置界面
  • 定位到 System configuration -> Init system,选择systemd
  • 保存配置后退出

方案1:RootFS Overlay 快速集成

适合应用无复杂依赖、需要快速验证的场景,无需编写Buildroot包配置:

  1. 自定义overlay路径:在System configuration -> Root filesystem overlay directories填写你要使用的overlay目录路径,例如board/<你的板卡型号>/overlay
  2. 放置编译好的C++二进制:将用Buildroot交叉编译器编译好的二进制文件放入overlay的usr/bin/目录下,赋予执行权限:
    mkdir -p board/<你的板卡型号>/overlay/usr/bin
    cp your_app board/<你的板卡型号>/overlay/usr/bin/
    chmod +x board/<你的板卡型号>/overlay/usr/bin/your_app
    
  3. 编写systemd服务文件,命名为your_app.service,参考内容:
    [Unit]
    Description=Custom C++ application service
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/your_app
    Restart=always
    User=root
    
    [Install]
    WantedBy=multi-user.target
    
  4. 放置服务文件到overlay对应目录:
    mkdir -p board/<你的板卡型号>/overlay/usr/lib/systemd/system
    cp your_app.service board/<你的板卡型号>/overlay/usr/lib/systemd/system/
    
  5. 配置开机自启:创建自启软链接到overlay目录
    mkdir -p board/<你的板卡型号>/overlay/etc/systemd/system/multi-user.target.wants
    ln -s /usr/lib/systemd/system/your_app.service board/<你的板卡型号>/overlay/etc/systemd/system/multi-user.target.wants/your_app.service
    
  6. 正常执行make编译镜像即可,烧录后服务会随系统自动启动。

方案2:自定义Buildroot包(推荐长期维护)

适合应用有依赖、需要和Buildroot统一编译流程的场景:

  1. 在Buildroot源码的package/目录下新建应用包目录:mkdir package/your_app
  2. 新建package/your_app/Config.in文件,内容参考:
    config BR2_PACKAGE_YOUR_APP
        bool "your_app"
        depends on BR2_INSTALL_LIBSTDCPP
        help
          Custom C++ service application.
    
  3. 新建package/your_app/your_app.mk文件,内容参考:
    YOUR_APP_VERSION = 1.0
    # 本地源码路径,若使用git托管可替换为git地址,同时修改SITE_METHOD为git
    YOUR_APP_SITE = /path/to/your/app/source
    YOUR_APP_SITE_METHOD = local
    YOUR_APP_DEPENDENCIES = libstdcpp # 有其他依赖可在此处追加
    YOUR_APP_INSTALL_STAGING = NO
    
    define YOUR_APP_BUILD_CMDS
        # 若应用使用Makefile/CMake构建,可直接调用$(MAKE) -C $(@D)
        $(TARGET_CXX) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -o $(@D)/your_app $(@D)/main.cpp
    endef
    
    define YOUR_APP_INSTALL_TARGET_CMDS
        $(INSTALL) -D -m 0755 $(@D)/your_app $(TARGET_DIR)/usr/bin/your_app
        $(INSTALL) -D -m 0644 $(YOUR_APP_PKGDIR)/your_app.service $(TARGET_DIR)/usr/lib/systemd/system/your_app.service
    endef
    
    define YOUR_APP_INSTALL_INIT_SYSTEMD
        mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
        ln -sf /usr/lib/systemd/system/your_app.service $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/your_app.service
    endef
    
    $(eval $(generic-package))
    
  4. 将之前编写的your_app.service文件放入package/your_app/目录下
  5. 修改package/Config.in,在合适的分类下追加一行:source "package/your_app/Config.in"
  6. 执行make menuconfig,在Target packages分类下找到your_app并勾选
  7. 执行make编译镜像即可。

验证

镜像烧录启动后,执行systemctl status your_app.service,若输出显示active (running)则配置生效。

内容的提问来源于stack exchange,提问作者AlexB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:57:00