76 lines
3.0 KiB
Markdown
76 lines
3.0 KiB
Markdown
# Boot and Init
|
|
|
|
## Init System
|
|
|
|
The rootfs uses BusyBox init via `/etc/inittab`. There is no systemd unit layout in this extraction.
|
|
|
|
Important `/etc/inittab` behavior:
|
|
|
|
1. Mounts proc at `/proc`.
|
|
2. Creates `/dev/pts` and `/dev/shm`.
|
|
3. Runs `mount -a`.
|
|
4. Creates `/run/lock/subsys`.
|
|
5. Runs `swapon -a`.
|
|
6. Links `/dev/fd`, `/dev/stdin`, `/dev/stdout`, and `/dev/stderr` into proc fd paths.
|
|
7. Sets hostname from `/etc/hostname`.
|
|
8. Runs `/etc/init.d/rcS`.
|
|
9. On shutdown, runs `/etc/init.d/rcK`, then `swapoff -a`, then `umount -a -r`.
|
|
|
|
Console gettys are present but commented out:
|
|
|
|
- Serial console: `console::respawn:/sbin/getty -L console 0 vt100`
|
|
- HDMI console: `tty1::respawn:/sbin/getty -L tty1 0 vt100`
|
|
|
|
That means the extracted configuration does not spawn an interactive login shell by default.
|
|
|
|
## rcS Startup Order
|
|
|
|
`/etc/init.d/rcS` runs all `/etc/init.d/S??*` files in lexical order. For this rootfs:
|
|
|
|
| Order | Script | Purpose |
|
|
| --- | --- | --- |
|
|
| 01 | `S01seedrng` | Seed RNG support. Comment references `/data/seedrng`. |
|
|
| 01 | `S01syslogd` | Starts syslog daemon. |
|
|
| 02 | `S02klogd` | Starts kernel log daemon. |
|
|
| 02 | `S02sysctl` | Applies sysctl settings. |
|
|
| 10 | `S10udev` | Starts udev. |
|
|
| 12 | `S12lvds_panel` | Starts boot display on the LVDS panel. |
|
|
| 30 | `S30dbus` | Starts D-Bus. |
|
|
| 40 | `S40bluetoothd` | Starts Bluetooth daemon. |
|
|
| 40 | `S40network` | Runs `/sbin/ifup -a`. |
|
|
| 50 | `S50crond` | Starts cron daemon. No cron job files were present under `/etc/cron*` in this extraction. |
|
|
| 55 | `S55spike3` | Spike-specific Bluetooth, audio, and module setup. |
|
|
| 95 | `S95game` | Kernel update check, persistent directory setup, core dump policy, monitors, game launch, update scanner. |
|
|
|
|
## Shutdown Order
|
|
|
|
`/etc/init.d/rcK` reverses the `/etc/init.d/S??*` list and calls each script with `stop`.
|
|
|
|
## Spike-specific Boot Actions
|
|
|
|
`S12lvds_panel`:
|
|
|
|
- Sources `/etc/init.d/shared`.
|
|
- Starts `$BOOT_DISPLAY` in the background.
|
|
- `$BOOT_DISPLAY` resolves first to `/games/spike3/bin/boot_display`, falling back to `/usr/local/spike/boot_display`.
|
|
|
|
`S55spike3`:
|
|
|
|
- Runs `bluetoothctl power on`.
|
|
- Registers a `KeyboardOnly` Bluetooth agent and makes it the default agent.
|
|
- Starts BlueALSA as A2DP source: `/usr/bin/bluealsa -p a2dp-source &`.
|
|
- Loads `i2c-dev`, `exfat`, and `fuse`.
|
|
|
|
`S95game`:
|
|
|
|
- Checks staged kernel update files under `/connectivity/os_update`.
|
|
- Runs a previous `/connectivity/os_update/post_install_hook.sh` if present.
|
|
- Creates persistent ALSA/Bluetooth directories under `/connectivity`.
|
|
- Ensures `/var/lib/alsa`, `/var/lib/bluetooth`, and `/var/lib/bluealsa` point into `/connectivity`.
|
|
- Overrides hostname from `/connectivity/hostname` if present.
|
|
- Prepares `/connectivity/dump/cores`.
|
|
- Sets `ulimit -c unlimited`.
|
|
- Sets core pattern to `/connectivity/dump/cores/core.%h.%t`.
|
|
- Starts `reboot_monitor`, `conagent_monitor`, and `game_monitor` if `/games/game` exists.
|
|
- Starts `/etc/init.d/update` in the background so USB/downloaded `.spk` updates can interrupt the running game.
|