使用 BusyBox 的嵌入式 Linux 设备上的守护进程可以用 C 或脚本编写

问题描述 投票:0回答:1

使用 BusyBox 的嵌入式设备上的守护进程应该用 C 编写还是作为脚本编写?

我看到的所有示例都在文件顶部使用

#! /bin/ash
,这是为了编写脚本?但是在我正在写的设备中只有编译的 C 文件(我认为)和
/usr/bin
.

中的符号链接

我尝试用

#include </bin/ash>
编译C文件的每一种方式(例如
gcc -Wall -o daemon_busybox daemon_busybox.c
)我在
/bin/ash
中的错误报告后得到错误:

/bin/ash:174:1: 错误:程序中有杂散的‘�’ /bin/ash:174:1: 错误:程序中有杂散的‘’ /bin/ash:174:1: 错误:程序中出现杂散的“�” /bin/ash:174:1: 错误:程序中出现杂散的“�” /bin/ash:174:1: 错误:程序中有杂散的‘�’

注意我已经设置了这个:

/bin/ash -> busybox

有什么想法我应该走哪条路吗?

更新:

我的任务是尝试查看守护进程是否可以在运行 Linux (2.6.35-at-alpha4) 和 Java(SE 嵌入式运行时环境)且内存非常有限(即 10 秒等待得到

java -version
报告)。

两周前我对守护进程知之甚少——只知道这个词。所以,这对我来说都是新的。

在我的开发机器上,我构建了两个不同的守护进程文件,一个是 C 语言,一个是脚本。两者都在我的 Linux 机器上运行得很好。

但是由于目标设备的尺寸非常小,所以只有BusyBox(没有

/lib/lsb/init-functions
)。所以我正在尝试构建第三个守护进程文件。我相信它应该为这个设备用 C 编写,但 BusyBox 的所有示例都指向脚本。

c embedded daemon busybox
1个回答
0
投票

一旦您的问题被编辑以便您尝试

#include
的文件名可见,问题就变得不言而喻了:

#include </bin/ash>

这试图让 C 编译器将

busybox
的二进制文件(通过符号链接
/bin/ash
)包含到要编译的代码中。普通的二进制文件不是有效的 C 源文件;这是注定要失败的。

也许您只需要删除该行——如果给 C 编译器提供头文件和源文件进行编译,它就有更好的工作机会。也许还需要做更多的工作;我们没有足够的信息来帮助那里。

许多守护进程是用 C 程序编写的,但可以使用精心编写的 shell 脚本代替。


就我个人而言,我想把它作为一个脚本来做(我从来不喜欢 C)。但在设备上,

/usr/sbin
文件夹中的所有内容看起来都像 C 文件。所以,我这个保守的编码员说 C 是要走的路。我知道:问问开发设备的人——但他们早就不在了。现在我的守护进程只是一个测试(即
printf("Hello World\n");
)。我正在尝试将
printf
传递给 Busybox。但到目前为止我无法编译这个文件。我只需要一个简单的 C 守护进程即可启动。

好的;你的 C 代码应该只是:

#include <stdio.h>
int main(void)
{
    printf("Hello World\n");
    return 0;
}

保存在

hw_daemon.c
。编译使用:

gcc -o hw_daemon hw_daemon.c

如果不能编译,那么你还没有为目标机器提供一个可用的 C 开发环境。如果可以编译,你应该可以运行它:

./hw_daemon

你应该会看到臭名昭著的“Hello World”消息出现。

如果这不起作用,那么您可以改用脚本版本,在文件中

hw_script.sh

#!/bin/ash
printf "Hello World\n"

你应该能够运行它:

预测输出——不是在机器上观察到的输出。

$ ash hw_script.sh
Hello World
$ chmod +x hw_script.sh
$ ./hw_script.sh
Hello World
$

如果这些都不起作用,那么您的系统出现了重大问题(例如,Busybox 可能没有提供类似的

printf
命令,您需要使用
echo "Hello World"
而不是
printf
).

© www.soinside.com 2019 - 2024. All rights reserved.