【发布时间】:2020-02-28 10:00:17
【问题描述】:
我正在尝试为我正在开发的嵌入式系统构建嵌入式 Linux 映像。
它使用 Buildroot,我们正在尝试在其中安装通用包。
直到我在目标图像的 /etc/init.d/ 目录中安装脚本为止,这都非常有效。
为了在映像中构建我的软件,我创建了以下由 Buildroot 拾取的 makefile。
它旨在通过一些附加脚本将 JAR 文件复制到文件系统。
我发现以字母 S 开头的脚本会自动运行。
见:https://buildroot.org/downloads/manual/manual.html#_init_system
define MY_GATEWAY_INSTALL_TARGET_CMDS
$(INSTALL) -d $(TARGET_DIR)/$(DST_FOLDER); \
$(INSTALL) -D -m 0644 $(@D)/*.jar $(TARGET_DIR)/$(DST_FOLDER); \
\
$(INSTALL) -D -m 0700 /work/package/mycompany/my-gateway/artifacts/start_heimdall $(TARGET_DIR)/$(DST_FOLDER); \
ln -snrf $(TARGET_DIR)/$(DST_FOLDER)/start_heimdall $(TARGET_DIR)/usr/bin/start_heimdall; \
\
$(INSTALL) -D -m 0755 /work/package/mycompany/my-gateway/artifacts/S99gateway $(TARGET_DIR)/$(DST_FOLDER); \
$(INSTALL) -D -m 0755 /work/package/mycompany/my-gateway/artifacts/S99gateway $(TARGET_DIR)/etc/init.d/S99gateway; \
\
if [[ "$(BR2_HSDP_GATEWAY_INCLUDE_VERSION_FILE)" == "y" ]]; then \
echo $(HEIMDALL_VERSION) > $(TARGET_DIR)/my_gw_version; \
fi
endef
构建映像后,我发现 JAR 文件和 start_heimdall 脚本已正确放置在预期的目录中。
S99gateway 脚本不是这种情况,它不会出现在 /etc/init.d/ 目录中。
我的申请因此没有开始。
构建镜像的目标目录如下:
ls -al $(TARGET)/usr/heimdall
total 19476
drwxr-xr-x 2 rick rick 4096 feb 28 08:43 .
drwxr-xr-x 8 rick rick 4096 feb 28 08:43 ..
-rw-r--r-- 1 rick rick 19924893 feb 28 08:40 heimdall-squidlink-1.0.0-1582809178-release.jar
-rwxr-xr-x 1 rick rick 362 feb 28 08:40 S99gateway
-rwx------ 1 rick rick 230 feb 28 08:40 start_heimdall
ls -al /etc/init.d
total 68
drwxr-xr-x 2 rick rick 4096 feb 28 08:43 .
drwxr-xr-x 14 rick rick 4096 feb 28 08:43 ..
-rwxr-xr-x 1 rick rick 423 dec 4 14:50 rcK
-rwxr-xr-x 1 rick rick 408 dec 4 14:50 rcS
-rwxr-x--- 1 rick rick 1295 aug 13 2014 S01logging
-rwxr-xr-x 1 rick rick 241 feb 28 08:19 S10mdev
-rwxr-x--- 1 rick rick 1708 nov 4 2016 S10modules
-rwxr-x--- 1 rick rick 396 mei 30 2016 S11led
-rwxr-x--- 1 rick rick 968 mrt 17 2015 S12automount
-rwxr-x--- 1 rick rick 397 apr 27 2015 S15hostname
-rwxr-xr-x 1 rick rick 1365 dec 4 14:50 S20urandom
-rwxr-x--- 1 rick rick 48 apr 22 2015 S40network
-rwxr-xr-x 1 rick rick 936 feb 28 08:40 S49ntp
-rwxr-xr-x 1 rick rick 4066 feb 28 08:31 S50dropbear
-rwxr-xr-x 1 rick rick 435 feb 28 08:41 S50stunnel
-rwxr-xr-x 1 rick rick 462 feb 28 08:31 S80dnsmasq
-rwxr-xr-x 1 rick rick 362 feb 28 08:40 S99gateway
最后一行显示我的脚本已成功复制到所需目录。
当我将图像刷入我的嵌入式设备并通过 SSH 连接到其中时,我看到以下内容:
ls -al /usr/heimdall
total 19468
drwxr-xr-x 2 root root 408 Feb 28 2020 .
drwxr-xr-x 8 root root 616 Feb 28 2020 ..
-rwxr-xr-x 1 root root 362 Feb 28 2020 S99gateway
-rw-r--r-- 1 root root 19924893 Feb 28 2020 heimdall-squidlink-1.0.0-1582809178-release.jar
-rwx------ 1 root root 230 Feb 28 2020 start_heimdall
ls -al /etc/init.d
total 56
drwxr-xr-x 2 root root 1128 Jan 17 22:12 .
drwx--x--x 14 root root 3088 Jan 17 22:12 ..
-rwxr-x--- 1 root root 1295 Aug 13 2014 S01logging
-rwxr-xr-x 1 root root 241 Feb 7 2020 S10mdev
-rwxr-x--- 1 root root 1708 Nov 4 2016 S10modules
-rwxr-x--- 1 root root 396 May 30 2016 S11led
-rwxr-x--- 1 root root 968 Mar 17 2015 S12automount
-rwxr-x--- 1 root root 397 Apr 27 2015 S15hostname
-rwxrwxr-x 1 root root 1365 Dec 4 2019 S20urandom
-rwxr-x--- 1 root root 48 Apr 22 2015 S40network
-rwxr-xr-x 1 root root 936 Jan 17 22:12 S49ntp
-rwxr-xr-x 1 root root 4066 Feb 7 2020 S50dropbear
-rwxr-xr-x 1 root root 435 Feb 7 2020 S50stunnel
-rwxr-xr-x 1 root root 462 Feb 7 2020 S80dnsmasq
-rwxrwxr-x 1 root root 423 Dec 4 2019 rcK
-rwxrwxr-x 1 root root 408 Dec 4 2019 rcS
在这种情况下,刷机后,S99 脚本就不再存在了。
/etc/init.d/ 目录是否以某种方式受到保护?
我试图了解为什么脚本不再存在。
脚本内部工作的正确性对安装过程很重要吗?
【问题讨论】:
-
看看我们如何将脚本放置在 Buildroot 中:github.com/andy-shev/buildroot/tree/intel(以这种方式完成的所谓 netboot 基础架构:github.com/andy-shev/buildroot/commit/…)
标签: shell makefile embedded-linux buildroot