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

Yocto配方中systemd服务启动自定义包的ExecStart路径配置问题

路径相关问题解答

myserver程序在镜像中的存放路径

你在do_install函数中将myserver安装到了${D}${bindir}路径下,其中${D}是Yocto构建时的临时部署目录,最终打包镜像时会去掉该前缀;Yocto默认的${bindir}变量值为/usr/bin,因此myserver在最终镜像中的绝对路径为:
/usr/bin/myserver

systemd单元文件ExecStart字段配置

ExecStart需要填写myserver的绝对路径,示例配置如下:

ExecStart=/usr/bin/myserver

如果程序需要启动参数,直接在路径后追加即可,例如:

ExecStart=/usr/bin/myserver --port 8080
现有配方的可优化点
  • 修正可执行文件权限问题:当前安装myserver时用了-m 0644权限,该权限无执行位,会导致程序无法运行,需要改为install -m 0755 ${S}/myserver ${D}${bindir}
  • 替换直接make为oe_runmake:直接调用make不会自动传递Yocto的交叉编译参数,很可能出现用宿主机gcc编译的问题,改为oe_runmake即可自动适配交叉编译环境
  • 删除冗余的systemd安装逻辑:你已经继承了systemd类,只要在SRC_URI中添加了service文件,systemd类会自动处理单元文件的安装、路径打包逻辑,你手动写的do_install_append、手动添加的FILES_${PN}中systemd路径的配置都可以完全删除
  • 合并SRC_URI配置:不需要分开写SRC_URI和SRC_URI_append,可以直接合并为一行:SRC_URI = "file://myserver.tar.gz file://serverAutoStart.service",写法更简洁
  • 修正路径多余斜杠问题:${S}//myserver多了一个冗余斜杠,改为${S}/myserver即可,避免潜在的路径识别问题
  • 替换旧版追加语法:旧的_append下划线语法在Yocto 3.4(Honister)及之后版本已经被弃用,推荐改为冒号语法:FILESEXTRAPATHS:append := " ${THISDIR}/../systemd/files",适配更高版本的Yocto
  • 补充必填的许可证字段:Yocto配方要求必须填写LICENSE和LIC_FILES_CHKSUM字段,否则构建会报错,示例配置(以MIT许可证为例):
    LICENSE = "MIT"
    LIC_FILES_CHKSUM = "file://LICENSE;md5=你的LICENSE文件的md5值"
    
    同时需要将对应的LICENSE文件添加到SRC_URI中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:05