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文件添加到LICENSE = "MIT" LIC_FILES_CHKSUM = "file://LICENSE;md5=你的LICENSE文件的md5值"SRC_URI中。
内容的提问来源于stack exchange,提问作者Oleksandr
相关产品推荐
相关产品推荐

