Auto-Running a C Program on Raspberry PI

纵饮孤独 提交于 2020-01-03 02:29:14

问题


how can I make my C code to auto-run on my Raspberry PI? I have seen a tutorial so as to achieve that but I do not really know what I am still missing. My initialization script is shown as it follows:

#! /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

The problem is that my program does not run at boot time and I do not really know why. What would I be missing? Is this "killall" statement "killing" some useful process during execution time? I am making this code to run as a background application but I know that after a few seconds, when the RPi is initializing, it asks for an username and a password in order to initialize the session. Is it possible that my RPi is not executing this code because I am not providing the logging information? I do not have a monitor so that my program has to run once I plug my Rpi in. Thanks a lot in advance!!


回答1:


How scripts/services are run at startuptime, generally depends on the type of init system used. Off the top of my head, I'd distginguish the following 4 types:

  • Embedded style: A single shell script has all the commands to start the system. Usually the script is at one off the paths the kernel tries to start as init process.
  • BSD style
  • System V style: This uses /etc/inittab and latr scripts in /etc/rc*.d/ to start services one by one
  • systemd

Raspbian dervices from Debian, so I suppose System V style. You have to symlink your script to /etc/rc2.d like

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

Not the structure of the link name: It says, it should be started when the run level is entered, and the '08' determines the position (do a ls /etc/rc2.d/ to see the other links).

More details: init(8).

update-rc.d(8) is the proper wway to create the symlinks on debian. See the manpage:

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

I advice to read at least the man pages update-rc.d(8) and init(8).




回答2:


You'll have to create links to that init script in the proper /etc/rcX.d folders. On raspbian this is done by:

sudo update-rc.d YOUR_INIT_SCRIPT_NAME defaults

You can read this debian how-to for further information. Also you should read more about run levels in Debian.




回答3:


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

Here a tutorial on how to auto-loggin and start a script at boot.

If it still don t work, there s either a problem in your script or in your C program.



来源:https://stackoverflow.com/questions/18197252/auto-running-a-c-program-on-raspberry-pi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!