Cookbook:Appliance:Startup Scripts
From Yocto Project
Jump to navigationJump to search
NOTE : THIS IS WORK IN PROGRESS
Introduction
This cookbook item explains how to add startup scripts to a Yocto image.
Prerequisites
It is assumed that the following scripts have been written and are to be used by the target:
startup-script --- A script to run at system boot (e.g. to restore persistent state) run-script --- A script used to start the main appliance application at runlevel 5 support-script --- A support script required by the above
BitBake Recipe
The addition of the scripts to the image and their interaction with the various init runlevels is controlled be means of a BitBake recipe. A template is shown below:
DESCRIPTON = "Startup scripts" LICENSE = "MIT" # Recipe revision - don't forget to 'bump' when a new revision is created ! PR = "r0" # Runtime dependencies # # Add a line similar to the following to ensure any packages needed for the scripts to run are installed in the image. # # RDEPENDS_${PN} = "parted" # SRC_URI specifies the files that are to be used as the scripts. # # Any valid src_uri format can be used - this example assumes the # scripts are stored in the 'files' directory below the one in # which this file is located. # SRC_URI = " \ file://startup-script \ file://run-script \ file://support-script \ " # This function is responsible for: # 1) Ensuring the required directories exist in the image; # 2) Installing the scripts in to the image; # 3) Creating the desired runlevel links to the scripts. # do_install() { # # Create directories: # ${D}${sysconfdir}/init.d - will hold the scripts # ${D}${sysconfdir}/rcS.d - will contain a link to the script that runs at startup # ${D}${sysconfdir}/rc5.d - will contain a link to the script that runs at runlevel=5 # ${D}${sbindir} - scripts called by the above # # ${D} is effectively the root directory of the target system. # ${D}${sysconfdir} is where system configuration files are to be stored (e.g. /etc). # ${D}${sbindir} is where executable files are to be stored (e.g. /sbin). # install -d ${D}${sysconfdir}/init.d install -d ${D}${sysconfdir}/rcS.d install -d ${D}${sysconfdir}/rc1.d install -d ${D}${sysconfdir}/rc2.d install -d ${D}${sysconfdir}/rc3.d install -d ${D}${sysconfdir}/rc4.d install -d ${D}${sysconfdir}/rc5.d install -d ${D}${sbindir} # # Install files in to the image # # The files fetched via SRC_URI (above) will be in ${WORKDIR}. # install -m 0755 ${WORKDIR}/startup-script ${D}${sysconfdir}/init.d/ install -m 0755 ${WORKDIR}/run-script ${D}${sysconfdir}/init.d/ install -m 0755 ${WORKDIR}/support-script ${D}${sbindir}/ # # Symbolic links can also be installed. e.g. # # ln -s support-script-link ${D}${sbindir}/support-script # # Create symbolic links from the runlevel directories to the script files. # Links of the form S... and K... mean the script when be called when # entering / exiting the runlevel designated by the containing directory. # For example: # rc5.d/S90run-script will be called (with %1='start') when entering runlevel 5. # rc5.d/K90run-script will be called (with %1='stop') when exiting runlevel 5. # ln -sf ../init.d/startup-script ${D}${sysconfdir}/rcS.d/S90startup-script ln -sf ../init.d/run-script ${D}${sysconfdir}/rc1.d/K90run-script ln -sf ../init.d/run-script ${D}${sysconfdir}/rc2.d/K90run-script ln -sf ../init.d/run-script ${D}${sysconfdir}/rc3.d/K90run-script ln -sf ../init.d/run-script ${D}${sysconfdir}/rc4.d/K90run-script ln -sf ../init.d/run-script ${D}${sysconfdir}/rc5.d/S90run-script }