2015-02-27 1 views
0

Должен ли демон на встроенном устройстве с использованием Busybox записываться на C или в качестве сценария?Демон на встроенном Linux-устройстве с использованием Busybox должен быть написан на C или как сценарий

Все примеры, которые я видел, используют #! /bin/ash в верхней части файла и что такое скрипты? Но в устройстве, которое я пишу, только выполнил файлы C (я думаю) и символические ссылки в /usr/bin.

Каждый способ, которым я пытаюсь скомпилировать файл C с #include </bin/ash> (например gcc -Wall -o daemon_busybox daemon_busybox.c) Я получаю сообщение об ошибке после сообщения об ошибке в /bin/ash:

/bin/ash:174:1: error: stray ‘\213’ in program
/bin/ash:174:1: error: stray ‘\10’ in program
/bin/ash:174:1: error: stray ‘\273’ in program
/bin/ash:174:1: error: stray ‘\204’ in program
/bin/ash:174:1: error: stray ‘\342’ in program

Примечание Я установил это: /bin/ash -> busybox

Любые идеи, способ Мне нужно идти?

Update:

Я получил задание, пытаясь увидеть, если демон может быть запущен на небольшом устройстве, которое работает Linux (2.6.35-на-альфа-4) и Java (SE Embedded Runtime Environment) с очень ограниченной памятью (т.е. 10 секунд ожидания, чтобы получить java -version для отчета).

Две недели назад я мало знал о демонах - знал только слово. Итак, это все новое для меня.

На моей машине разработки я создал два разных файла-демона, один на C и один как скрипт. Оба работают очень хорошо на моей машине Linux.

Но из-за очень малого размера целевого устройства есть только busybox (нет /lib/lsb/init-functions). Поэтому я пытаюсь создать третий файл-демон. Я считаю, что это должно быть написано на C для этого устройства, но все примеры для busybox указывают на сценарии.

+2

Похоже, вы пытаетесь запустить скомпилированную программу, как если бы это был скрипт оболочки. – immibis

+0

Вы понимаете, что C-программы скомпилированы, например. GCC первый, не так ли? Кроме того, что делает Java с этим? Я не уверен, кто больше запутался прямо сейчас; вы или я. –

+0

Джонатан Рейнхарт - спасибо, что внимательно прочитал мой пост (^. ^) v – mycowan

ответ

0

После того, как ваш вопрос отредактирован так, чтобы имя файла, который вы пытаетесь #include видно, проблема становится самоочевидной:

#include </bin/ash> 

Это пытается сделать компилятор C включает двоичный busybox (через символическую ссылку /bin/ash) в код, который нужно скомпилировать. Средний двоичный файл не является допустимым исходным кодом C; это обречено на провал.

Возможно, вам просто нужно отказаться от этой строки - компилятор C имеет больше шансов на работу, если ему заданы файлы заголовков и исходные файлы для компиляции. Возможно, требуется больше работы; у нас недостаточно информации, чтобы помочь там.

Многие демоны написаны как программы на языке C, но вместо этого можно использовать тщательно написанный сценарий оболочки.


Personally, I would like to do this as a script (I've never liked C). But on the device everything in the /usr/sbin folder looks like a C file. So, the conservative coder in me says C is the way to go. I know: ask the guys developed the device — but they're long gone. Right now my daemon is just a test (i.e. printf("Hello World\n"); ). I'm trying to get printf passed to Busybox. But so far I cannot get this file to compile. I just need a simple daemon in C to start.

OK; ваш 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 команды workalike, например, и вы должны использовать echo "Hello World" вместо printf).

+0

Благодарим за ответ. Удаление #include не является проблемой, если есть другой способ передать вызовы в busybox. Работает ли PATH? – mycowan

+0

#!/bin/ash дает мне Неверная директива предварительной обработки #! – mycowan

+0

Что находится в файле 'daemon_busybox.c'? Это код C или сценарий оболочки? Если это код C, вы скомпилируете его как программу на C. Если это скрипт оболочки, то компиляция не нужна (но вы, вероятно, хотите, чтобы в качестве первой строки была shebang). Если вам нужно запустить программу Busybox, номинально вы можете использовать 'system()' или, возможно, 'popen()' и 'pclose()' - это не редкость в программе на C, которая должна запускать какую-либо другую программу. Но на самом деле неясно, что у вас есть в daemon_busybox.c', что затрудняет угадывание того, что вам нужно делать. –

Смежные вопросы