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

yeotifhr  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(205)

使用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:错误:杂散'\213'在程序/bin/ash:174:1:错误:杂散'\10'在程序/bin/ash:174:1:错误:杂散'\273'在程序/bin/ash:174:1:错误:杂散'\204'在程序/bin/ash:174:1:错误:程序中的“\342”
注意我设置了这个:/bin/ash -> busybox
你觉得我该走哪条路?
更新:
我的任务是尝试看看一个守护进程是否可以在一个运行Linux(2.6.35-at-alpha 4)和Java(SE嵌入式运行时环境)的小型设备上运行。等待10秒以使java -version返回报告)。
两个星期前,我对守护进程还不太了解--只知道这个词。这对我来说是全新的
在我的开发机器上,我构建了两个不同的守护程序文件,一个是C语言,另一个是脚本。这两个都在我的Linux机器上运行得很好。
但是由于目标设备的尺寸非常小,所以只有BusyBox(没有/lib/lsb/init-functions)。所以我正在尝试构建第三个守护进程文件。我相信它应该用C语言为这个设备编写,但是BusyBox的所有示例都指向脚本。

uoifb46i

uoifb46i1#

一旦你的问题被编辑,以便你试图#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)。

相关问题