I'm looking at a static OpenWrt firmware.
On OpenWrt initialization, procd
is supposed to run all the S
prefixed scripts in /etc/rc.d
which are links to the actual scripts in /etc/init.d
. I wonder who triggers those scripts...
I see that on /etc/inittab
there's this line ::sysinit:/etc/init.d/rcS S boot
but /etc/init.d/rcS
file does not exist, so who actually runs the scripts on /etc/rc.d
and when does it happen on init?
I tried searching all over their documentation but still could not figure this out... Any ideas?
Thanks.
You can check details in procd init
procd actually ignores the process specification "/etc/init.d/rcS" (there is no such a script!) in "/etc/inittab".
The implementation is in rcS.c:
int rcS(char *pattern, char *param, void (*q_empty)(struct runqueue *))
{
runqueue_init(&q);
q.empty_cb = q_empty;
q.max_running_tasks = 1;
return _rc(&q, "/etc/rc.d", pattern, "*", param);
}
which is called by "runrc" function in inittab.c
static void runrc(struct init_action *a)
{
if (!a->argv[1] || !a->argv[2]) {
ERROR("valid format is rcS <S|K> <param>\n");
return;
}
/* proceed even if no init or shutdown scripts run */
if (rcS(a->argv[1], a->argv[2], rcdone))
rcdone(NULL);
}