Table of Contents

Procd system init and daemon management

procd is the OpenWrt process management daemon written in C. It keeps track of processes started from init scripts (via ubus calls), and can suppress redundant service start/restart requests when the config/environment has not changed.

procd has replaced ... , e.g.

procd is intended to stay compatible with the existing format of /etc/config/; exceptions ...

Help with the development of procd

  1. test what has been ported
  2. review of the code

Buttons with procd

:!: see commit in https://dev.openwrt.org/log/trunk/package/base-files/files/etc/rc.button

:!: see use case hardware.button

Init scripts with procd

see procd-init-scripts

early state and preinit

Before the real procd runs, a small init process is started. This process has the job of early system init. It will do the following things in the listed order

Once preinit is complete the init process is done and will do an exec on the real procd. This will replace init as pid1 with an instance of procd running as the new pid 1. The watchdog file descriptor is not closed. Instead it is handed over to the new procd process. The debug_level will also be handed over to the new procd instance if it was set via command line or during preinit.

procd start up

Procd will first do some basic process init such as setting itself to be owner of its own process group and setting up signals. We are now ready to bring up the userland in the following order

The basic system bringup is now complete, procd is up and running and can start handling daemons and services

/etc/inittab

Procd supports four commands inside inittab

Once all items inside /etc/inittab are processed, procd enter its normal run mode and will handle messages coming in via ubus. It will stay in this state until a reboot/shutdown is triggered.

ubus command interface

hotplug

Hotplug scripts are located inside /etc/hotplug.d and are based on json_script. This is a json based if then else syntax. Procd hotplug service offers the following actions:

Under Construction!
This page is currently under construction. You can edit the article to help completing it.

procd (process management daemon) – Technical Reference

OpenWrt – operating system architecture

Whereas desktop distributions use glib+dbus+udev(part of systemd), OpenWrt uses libubox+ubus+procd. This provides some pretty awesome functionality without requiring huge libraries with huge dependencies (*cough* glib).

Desktop Distributions OpenWrt Android Replicant mer-based
Typical main memory size 128 MiB to 16 GiB (or more) 32 MiB to 512 MiB1) min 92 MiB for Android 2.1
min 340 MiB for Android 4.0
?
Supported instruction sets almost anything almost anything x86, 86-64, ARM, MIPS32
non-volatile storage space 100 MiB 8 MiB2) 150MiB for Android 2.1
512MiB for Android 4.0
?
kernel Linux kernel
FOSS and binary drivers FOSS drivers: e.g. 802.11; Iaccess Android binary drivers
C standard library glibc uClibc, musl bionic glibc + libhybris eglibc 2.15
init init
Upstart
Initng
systemd busybox-initd procd Android init-fork systemd
rsyslog / syslog-ng busybox-klogd, busybox-syslogd
watchdog busybox-watchdog
udev hotplug2
cron busybox-crond
atd na
D-Bus ubus Binder ? D-Bus
network configuration NetworkManager + GUI netifd ConnectivityManager
(not ConnMan = ConnectionManager!)
? ConnMan
GLib
(GObject, Glib, GModule, GThread, GIO)
libubox ? ? Qt-based?
PulseAudio pulseaudio (optional) PulseAudio PulseAudio PulseAudio
Package management system dpkg/APT
RPM/yum
portage
pacman
...
opkg apk ? RPM

What's the difference between ubus vs dbus?

dbus is bloated, its C API is very annoying to use and requires writing large amounts of boilerplate code. In fact, the pure C API is so annoying that its own API documentation states: “If you use this low-level API directly, you're signing up for some pain.”

ubus is tiny and has the advantage of being easy to use from regular C code, as well as automatically making all exported API functionality also available to shell scripts with no extra effort.

“Of course, NetworkManager should be renamed to “unetwork”, dbus to “ubus”, PulseAudio to “usound”, and X.Org-Server/Wayland-Compositor to “udisplay”; and then indescribable happiness would come down to all people of this world.” – Lennart Poettering



History

Package history is available at:

1)
yes, heavily stripped OpenWrt can run on 16 or even 8MiB
2)
yes, 4MiB and 2MiB possible