k230-modem on the board (nRF9151 task 3.3)
Evidence class: board-read. First board, landscape profile, system
gcgvaz29zb5wk4d1sm8kygcrz13dpkk2-nixos-system-nixos-26.11.20260919.20b1ddd
(built from impl/nrf9151-service at “Set the modem UART to 115200 under
glibc 2.42 …”). No SIM is fitted (see ../probe/), so the cellular path stops
at sim: absent. Captured 2026-10-14 00:57 UTC, holding the board lock.
board-2026-10-14.txt is the whole capture. The commands, as root on the
board:
C="runuser -u shell -- k230-modemctl"
grep nrf9151-enable /sys/kernel/debug/gpio; cat /run/k230/modem/state.json
$C power on; $C status
setpriv --reuid=nobody --regid=dialout --clear-groups -- sh -c 'exec 3<>/dev/ttyS3'
$C power off; grep nrf9151-enable /sys/kernel/debug/gpio
journalctl -b -u k230-modem
| Requirement | Observed |
|---|---|
After a fresh boot: enable low, state off | `gpio-2 (nrf9151-enable |
power on, then status without a SIM | Ready 1 s after the request; "power":"on","present":true,"sim":"absent","registration":"sim_failure", firmware mfw_nrf91x1_2.0.3, SLM 2.9.0; enable out hi |
power off returns the enable line low | AT+CFUN=0 then out lo; "power":"off" |
A second process refused /dev/ttyS3 | uid nobody, gid dialout (the device is root:dialout 0660): Device or resource busy (TIOCEXCL). Root bypasses TIOCEXCL by design, so the test uses an unprivileged opener |
The shell user ran k230-modemctl through the control socket, which shows
the k230-modem group grant works.
The first deploy failed, and why
The first image (cfc847ae) timed out: the modem never answered AT, and
stty -F /dev/ttyS3 read speed 4098 baud afterwards. glibc 2.42 reads
speed_t as the plain baud rate, so the Rust libc crate’s legacy
B115200 (0o010002 = 4098) set 4098 baud. The read-only probe still worked
in the same boot, so the hardware was fine. The fix tries cfsetspeed(115200)
and falls back to the constant on older glibc. Commands now also end in CR LF,
as the probe’s do. Host transcript tests cannot see a baud rate, which is why
they passed.
Limits
- No SIM: PIN, registration, signal and SMS stay unexercised on the radio (tasks 4.x).
AT+CMGF=1andAT+CNMIanswered+CMS ERROR: 302(operation not allowed) andAT+CSDH=1ERROR, so the service setlast_error: sms_unavailable. Without a SIM this does not show whether the firmware supports text-mode SMS; task 4.x must re-check with a SIM.- GNSS (
gnss on) was not exercised: no GPS antenna or sky view is confirmed (tasks 5.x). - The service log withholds the tracking area and cell id from
+CEREGlines and any identity answer; with no SIM, none appeared here.