Хобрук: Ваш путь к мастерству в программировании

Автоматический запуск программы C на Raspberry PI

как я могу заставить свой код C автоматически запускаться на моем Raspberry PI? Я видел учебник, чтобы добиться этого, но я действительно не знаю, чего мне еще не хватает. Мой сценарий инициализации показан следующим образом:

#! /bin/sh
# /etc/init.d/my_settings
#
# Something that could run always can be written here
### BEGIN INIT INFO
# Provides:     my_settings
# Required-Start:   $remote_fs $syslog
# Required-Stop:    $remote_fs $syslog
# Default-Start:    2 3 4 5 
# Default-Stop: 0 1 6
# X-Interactive:    true
# Short-Description:    Script to start C program at boot time
# Description:      Enable service provided by my_settings
### END INIT INFO

# Carry out different functions when asked to by the system
case "$1" in 
start)
echo "Starting RPi Data Collector Program"
# run application you want to start
sudo /home/pi/Documents/C_Projects/cfor_RPi/charlie &
;;
stop)
echo "Killing RPi Data Collector Program"
# kills the application you want to stop
sudo killall charlie
;;
*)
echo "Usage: /etc/init.d/my_settings {start | stop}"
exit 1  
;;
esac
exit 0

Проблема в том, что моя программа не запускается во время загрузки, и я действительно не знаю, почему. Чего бы мне не хватило? Является ли этот оператор «killall» «убивающим» какой-то полезный процесс во время выполнения? Я создаю этот код для запуска в качестве фонового приложения, но я знаю, что через несколько секунд, когда RPi инициализируется, он запрашивает имя пользователя и пароль для инициализации сеанса. Возможно ли, что мой RPi не выполняет этот код, потому что я не предоставляю информацию для регистрации? У меня нет монитора, так что моя программа должна запускаться, как только я подключаю свой Rpi. Большое спасибо заранее!!


  • Это не имеет НИЧЕГО общего с C, так можно запустить любую произвольную программу на этой платформе. Пожалуйста, обновите теги соответственно. 16.08.2013

Ответы:


1

То, как сценарии/службы запускаются во время запуска, обычно зависит от типа используемой системы инициализации. Навскидку я бы выделил следующие 4 типа:

  • Встроенный стиль: один сценарий оболочки содержит все команды для запуска системы. Обычно скрипт находится на одном из путей, которые ядро ​​пытается запустить как процесс инициализации.
  • стиль BSD
  • Стиль System V: использует сценарии /etc/inittab и latr в /etc/rc*.d/ для запуска служб по одной.
  • системад

Устройства Raspbian от Debian, поэтому я полагаю, что это стиль System V. Вы должны символически связать свой скрипт с /etc/rc2.d, например

ln -s /etc/init.d/your-script /etc/rc2.d/S08my-script

Не структура имени ссылки: в нем говорится, что она должна запускаться при входе на уровень выполнения, а «08» определяет позицию (выполните команду ls /etc/rc2.d/, чтобы увидеть другие ссылки).

Подробнее: init(8).

update-rc.d(8) — правильный способ создания символических ссылок в debian. Смотрите справочную страницу:

update-rc.d - install and remove System-V style init script links

Я советую прочитать хотя бы man-страницы update-rc.d(8) и init(8).

12.08.2013

2

Вам нужно будет создать ссылки на этот сценарий инициализации в соответствующих папках /etc/rcX.d. На raspbian это делается:

sudo update-rc.d YOUR_INIT_SCRIPT_NAME defaults

Вы можете прочитать это инструкции по Debian для дополнительной информации. Также вам следует прочитать больше об уровнях выполнения в Debian.

12.08.2013
  • Спасибо hek2mgl... Я уже выполнил следующие шаги: sudo chmod 755 /etc/init.d/my_settings - sudo /etc/init.d/my_settings start - sudo /etc/init.d/my_settings stop. Чтобы зарегистрировать мой скрипт для запуска при запуске и завершении работы: sudo update-rc.d my_settings defaults... Что еще я должен выполнить? Каковы были ваши рекомендации в этом смысле??? Заранее спасибо!! 14.08.2013
  • Вы разместили в этом скрипте отладочные сообщения, чтобы убедиться, что он работает? 14.08.2013

  • 3

    http://www.akeric.com/blog/?p=1976

    Вот учебник о том, как автоматически войти в систему и запустить скрипт при загрузке.

    Если он по-прежнему не работает, проблема либо в вашем скрипте, либо в вашей программе на C.

    03.09.2013
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..