使用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的所有示例都指向脚本。
1条答案
按热度按时间uoifb46i1#
一旦你的问题被编辑,以便你试图
#include
的文件名是可见的,问题就变得不言而喻了:这试图使C编译器将
busybox
的二进制(通过符号链接/bin/ash
)包含到要编译的代码中。平均二进制文件不是有效的C源文件;这是注定要失败的。也许你只需要删除这一行-如果给C编译器头文件和源文件来编译,它就有更好的工作机会。也许还需要更多的工作;我们没有足够的信息来帮助你
许多守护进程都是用C程序编写的,但也可以使用精心编写的shell脚本。
就我个人而言,我想把它作为一个脚本来做(我从来都不喜欢C)。但在设备上,
/usr/sbin
文件夹中的所有内容看起来都像C文件。所以,保守的程序员在我说C是要走的路。我知道:问问那些开发这个设备的人--但他们早就走了。现在我的守护进程只是一个测试(即。printf("Hello World\n");
)。我正在尝试将printf
传递给Busybox。但到目前为止,我无法编译此文件。我只需要一个简单的守护进程在C启动。你的C代码应该是:
保存在
hw_daemon.c
中。使用以下命令编译:如果不能编译,那么您就没有为目标机器提供一个可行的C开发环境。如果这将编译,你应该能够运行它与:
你应该会看到臭名昭著的'Hello World'消息出现。
如果这不起作用,那么你可以使用脚本版本,在文件
hw_script.sh
中:你应该能够运行它:
如果这两个都不起作用,那么系统上就有了大问题(例如,也许Busybox没有提供
printf
命令,而您需要使用echo "Hello World"
而不是printf
)。