Remove ModemManager & friends (#561)

This commit is contained in:
Adeeb Shihadeh
2026-05-01 10:20:11 -07:00
committed by GitHub
parent d7a4fc50bf
commit 4c5609a9cf
14 changed files with 4 additions and 14831 deletions

View File

@@ -21,18 +21,6 @@ RUN apt-get update && apt-get install -yq --no-install-recommends \
# Enable ccache
ENV PATH="/usr/lib/ccache:$PATH"
# libqmi
FROM agnos-compiler AS agnos-compiler-libqmi
COPY ./userspace/compile-libqmi.sh /tmp/agnos/
RUN --mount=type=cache,target=/root/.ccache,id=libqmi,sharing=shared \
/tmp/agnos/compile-libqmi.sh
# ModemManager
FROM agnos-compiler-libqmi AS agnos-compiler-modemmanager
COPY ./userspace/compile-modemmanager.sh /tmp/agnos/
RUN --mount=type=cache,target=/root/.ccache,id=modemmanager,sharing=shared \
/tmp/agnos/compile-modemmanager.sh
# power_burn_max
FROM agnos-compiler AS agnos-compiler-power-burn
RUN apt-get update && apt-get install -yq --no-install-recommends \
@@ -86,17 +74,12 @@ COPY ./userspace/root/system/ /system/
COPY ./userspace/root/usr/ /usr/
RUN mkdir -p /dsp /firmware /persist /data /cache /rwtmp
COPY --from=agnos-compiler-libqmi /tmp/libqmi.deb /tmp/
COPY --from=agnos-compiler-modemmanager /tmp/modemmanager.deb /tmp/
RUN cd /tmp && \
apt-get update && \
apt-get install -yq --no-install-recommends \
python3 \
python3-dev \
gir1.2-qmi-1.0 \
libglib2.0-dev \
libqmi-glib5 \
libc6 \
libglib2.0-0t64 \
libgudev-1.0-0 \
@@ -105,10 +88,7 @@ RUN cd /tmp && \
libsystemd0 \
libwayland-client0 \
libwayland-server0 \
polkitd \
mobile-broadband-provider-info && \
apt-get -o Dpkg::Options::="--force-overwrite" install -yq ./libqmi.deb && \
apt-get -o Dpkg::Options::="--force-overwrite" install -yq ./modemmanager.deb
polkitd
ARG XDG_DATA_HOME="/usr/local"
@@ -145,18 +125,9 @@ RUN /tmp/agnos/services.sh
RUN rm -r /etc/update-motd.d/*
COPY --chown=root:root ./userspace/root/etc/update-motd.d/* /etc/update-motd.d/
RUN chmod 600 /usr/lib/NetworkManager/system-connections/*.nmconnection
# Prefer ipv4 over ipv6
RUN echo "precedence ::ffff:0:0/96 100" >> /etc/gai.conf
# Run ModemManager in debug mode to allow AT commands
COPY ./userspace/files/ModemManager.service /lib/systemd/system/
RUN systemctl enable ModemManager
# Add more T-Mobile networks to mobile-broadband-provider-info (do we still need the package?)
COPY ./userspace/files/serviceproviders.xml /usr/share/mobile-broadband-provider-info/serviceproviders.xml
# Setup hostname resolution for our custom hostname
RUN sed -i 's/hosts: files dns myhostname/hosts: files myhostname dns/g' /etc/nsswitch.conf

View File

@@ -4,7 +4,6 @@
- [ ] [`test_onroad`](https://github.com/commaai/openpilot/blob/master/selfdrive/test/test_onroad.py) passes
- [ ] Wi-Fi: lists networks and connects
- [ ] Modem: connects to cell network
- [ ] Image sizes haven't increased
- [ ] Sounds work: `pkill -f manager ; /data/openpilot/scripts/disable-powersave.py && aplay /data/openpilot/selfdrive/assets/sounds/engage.wav`
- [ ] Clean openpilot build: `scons -c && scons -j8`

View File

@@ -17,7 +17,7 @@ sudo rm -rf /usr/comma
sudo ln -snf $ROOT/userspace/root/usr/comma/ /usr/comma
echo "cp systemd services"
for s in "$ROOT"/userspace/root/lib/systemd/system/*.{service,path,timer,mount} "$ROOT"/userspace/files/ModemManager.service; do
for s in "$ROOT"/userspace/root/lib/systemd/system/*.{service,path,timer,mount}; do
[ -e "$s" ] || continue
service=$(basename $s)
echo "- $service"

View File

@@ -57,7 +57,6 @@ apt-fast install --no-install-recommends -yq \
libi2c-dev \
libncursesw5-dev \
libnss-myhostname \
libqmi-utils \
libssl-dev \
locales \
llvm \

View File

@@ -1,31 +0,0 @@
#!/bin/bash
set -e
LIBQMI_VERSION="1.36.0"
cd /tmp
# meson support for checkinstall
git clone https://github.com/keithbowes/meson-install.git
apt-get update && apt-get install -yq --no-install-recommends \
bash-completion \
gobject-introspection \
gtk-doc-tools \
help2man \
libgirepository1.0-dev \
libglib2.0-dev \
libgudev-1.0-dev \
meson \
ninja-build \
git clone -b $LIBQMI_VERSION --depth 1 https://gitlab.freedesktop.org/mobile-broadband/libqmi.git
cd libqmi
meson setup build --prefix=/usr --libdir=/usr/lib/aarch64-linux-gnu -Dmbim_qmux=false -Dqrtr=false
ninja -C build
cd build
checkinstall -yD --install=no --fstrans=no --pkgname=libqmi /tmp/meson-install/meson-install
mv libqmi*.deb /tmp/libqmi.deb
apt-get -o Dpkg::Options::="--force-overwrite" install -yq /tmp/libqmi.deb

View File

@@ -1,72 +0,0 @@
#!/bin/bash
set -e
MM_VERSION="1.22.0"
cd /tmp
git clone -b $MM_VERSION --depth 1 https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git
apt-get install -y --no-install-recommends \
cmake \
gettext \
libdbus-1-dev \
libpolkit-gobject-1-dev \
libsystemd-dev \
udev
cd ModemManager
meson setup build \
--prefix=/usr \
--libdir=/usr/lib/aarch64-linux-gnu \
--sysconfdir=/etc \
--buildtype=release \
-Dqmi=true \
-Dmbim=false \
-Dqrtr=false \
-Dplugin_generic=enabled \
-Dplugin_altair_lte=disabled \
-Dplugin_anydata=disabled \
-Dplugin_broadmobi=disabled \
-Dplugin_cinterion=disabled \
-Dplugin_dell=disabled \
-Dplugin_dlink=disabled \
-Dplugin_fibocom=disabled \
-Dplugin_foxconn=disabled \
-Dplugin_gosuncn=disabled \
-Dplugin_haier=disabled \
-Dplugin_huawei=disabled \
-Dplugin_intel=disabled \
-Dplugin_iridium=disabled \
-Dplugin_linktop=disabled \
-Dplugin_longcheer=disabled \
-Dplugin_mbm=disabled \
-Dplugin_motorola=disabled \
-Dplugin_mtk=disabled \
-Dplugin_nokia=disabled \
-Dplugin_nokia_icera=disabled \
-Dplugin_novatel=disabled \
-Dplugin_novatel_lte=disabled \
-Dplugin_option=disabled \
-Dplugin_option_hso=disabled \
-Dplugin_pantech=disabled \
-Dplugin_qcom_soc=disabled \
-Dplugin_quectel=enabled \
-Dplugin_samsung=disabled \
-Dplugin_sierra_legacy=disabled \
-Dplugin_sierra=disabled \
-Dplugin_simtech=disabled \
-Dplugin_telit=disabled \
-Dplugin_thuraya=disabled \
-Dplugin_tplink=disabled \
-Dplugin_ublox=disabled \
-Dplugin_via=disabled \
-Dplugin_wavecom=disabled \
-Dplugin_x22x=disabled \
-Dplugin_zte=disabled
ninja -C build
cd build
checkinstall -yD --install=no --fstrans=no --pkgname=modemmanager /tmp/meson-install/meson-install
mv modemmanager*.deb /tmp/modemmanager.deb

View File

@@ -1,22 +0,0 @@
[Unit]
Description=Modem Manager
After=polkit.service
Requires=polkit.service
[Service]
Type=dbus
BusName=org.freedesktop.ModemManager1
ExecStart=/usr/sbin/ModemManager --filter-policy=strict --debug
StandardError=null
Restart=on-abort
CapabilityBoundingSet=CAP_SYS_ADMIN
ProtectSystem=true
ProtectHome=true
PrivateTmp=true
RestrictAddressFamilies=AF_NETLINK AF_UNIX
NoNewPrivileges=true
User=root
[Install]
WantedBy=multi-user.target
Alias=dbus-org.freedesktop.ModemManager1.service

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,6 @@
// Allow sudo users to control network & modem
// Allow sudo users to control network
polkit.addRule(function (action, subject) {
if ((action.id.startsWith("org.freedesktop.NetworkManager.") ||
action.id.startsWith("org.freedesktop.ModemManager1.")) &&
if (action.id.startsWith("org.freedesktop.NetworkManager.") &&
subject.isInGroup("sudo")) {
return polkit.Result.YES;
}

View File

@@ -39,8 +39,3 @@ source /usr/local/venv/bin/activate
# custom shims
export PATH="/usr/comma/shims:${PATH}"
# nice AT command helper
atc() {
mmcli -m any --command="${@}"
}

View File

@@ -1,24 +0,0 @@
# EG25
# Interface 0 - GNSS
# Interface 2 - AT
# Interface 3 - AT
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="0125",ENV{ID_USB_INTERFACE_NUM}=="00",ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="0125",ENV{ID_USB_INTERFACE_NUM}=="02",SYMLINK+="modem_at0",ENV{ID_MM_PORT_IGNORE}="1"
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="0125",ENV{ID_USB_INTERFACE_NUM}=="03",SYMLINK+="modem_at1",ENV{ID_MM_PORT_IGNORE}="1"
# EG91
# Interface 0 - debug
# Interface 1 - GPS
# Interface 2 - AT
# Interface 3 - AT
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="6007",ENV{ID_USB_INTERFACE_NUM}=="00",ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="6007",ENV{ID_USB_INTERFACE_NUM}=="01",ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="6007",ENV{ID_USB_INTERFACE_NUM}=="02",SYMLINK+="modem_at0",ENV{ID_MM_PORT_IGNORE}="1"
SUBSYSTEM=="tty",ATTRS{idVendor}=="2c7c",ATTRS{idProduct}=="6007",ENV{ID_USB_INTERFACE_NUM}=="03",SYMLINK+="modem_at1",ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"
ACTION=="add",SUBSYSTEM=="usb",ATTR{idVendor}=="2c7c",ATTR{idProduct}=="6007",RUN+="/bin/sh -c 'echo -n $kernel:1.4 > /sys/bus/usb/drivers/cdc_ether/unbind'"
# C16
KERNEL=="ttyACM1",ENV{ID_MM_DEVICE_IGNORE}="1"
KERNEL=="ttyACM0",ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"
KERNEL=="ttyACM2",ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1"
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9330", NAME="usb%n"

View File

@@ -1,5 +1,4 @@
#!/usr/bin/env python3
import json
import time
import subprocess
@@ -20,25 +19,6 @@ def test_reset():
assert proc.poll() is None
proc.terminate()
def test_modem():
out = run("mmcli -m 0 --output-json")
mm = json.loads(out)
from pprint import pprint
pprint(mm)
# modem is up
g = mm['modem']['generic']
assert g['manufacturer'] == 'QUALCOMM INCORPORATED'
assert g['model'] == 'QUECTEL Mobile Broadband Module'
assert g['revision'] == 'EG25GGBR07A08M2G'
# sim is present
assert g['sim'] == '/org/freedesktop/ModemManager1/SIM/0'
# blue prime is active
out = run("nmcli con show --active")
assert "blue-prime" in out
def test_wifi():
out = run("nmcli dev wifi")
networks = out.strip().splitlines()[1:]

View File

@@ -1,81 +0,0 @@
#!/usr/bin/env python3
import os
import json
import subprocess
import time
def mmcli(cmd):
try:
out = subprocess.check_output(["mmcli", "-J", *cmd])
return json.loads(out)
except Exception as e:
raise Exception(f"modem command failed: {cmd}") from e
def test_modem():
# wait for the modem to come back up after flashing
n = 0
cnt = 0
while n == 0:
n = len(mmcli(["-L"])['modem-list'])
if n > 1:
raise Exception(f"Wrong number of modems ({n})")
cnt += 1
if cnt > 100:
raise Exception("Modem never came up")
time.sleep(1)
cnt = 0
while True:
modem = mmcli(["-m", "any"])
if modem['modem']['generic']['sim'] != '--':
break
cnt += 1
if cnt > 100:
raise Exception("SIM missing")
time.sleep(1)
# force to LTE
#os.system("mmcli -m any --set-allowed-modes='4g'")
# set initial eps bearer apn
#sim_id = mmcli(['-i', '0'])['sim']['properties']['iccid']
#if sim_id.startswith('8901410'):
# os.system('mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn=Broadband"')
print("waiting for cell connection")
time.sleep(7)
expected = [
# key, expected value, error msg
(['generic', 'manufacturer'], "QUALCOMM INCORPORATED", "Modem: wrong manufacturer"),
(['generic', 'model'], "QUECTEL Mobile Broadband Module", "Modem: wrong model"),
(['generic', 'revision'], "EG25GGBR07A08M2G", "Modem: wrong revision"),
(['generic', 'carrier-configuration'], ["VoLTE-ATT", "Commercial-TMO_VoLTE"], "Modem: wrong carrier configuration"),
(['generic', 'carrier-configuration-revision'], ["0501033C", "05010505"], "Modem: wrong carrier configuration revision"),
(['generic', 'supported-capabilities'], [['gsm-umts, lte'], ], "Modem: wrong capabilities"),
(['3gpp', 'operator-name'], ["--", "AT&T", "T-Mobile"], "Modem: wrong operator"),
]
for key, val, err_msg in expected:
v = modem['modem']
for k in key:
v = v.get(k)
if isinstance(val, list):
assert v in val, f"{err_msg} ({v})"
else:
assert v == val, f"{err_msg} ({v})"
os.system("date >> /data/tmp/modem_log")
os.system("sudo su -c 'tail /data/tmp/modem_log > /dev/console'")
os.system("sudo su -c 'wc -l /data/tmp/modem_log > /dev/console'")
os.sync()
time.sleep(2)
os.system("sudo reboot")
if __name__ == "__main__":
test_modem()

View File

@@ -1,28 +0,0 @@
[connection]
id=lte
uuid=6586fb1f-4a66-46d4-9164-0100b73750ee
type=gsm
permissions=
autoconnect=true
autoconnect-retries=100
metered=1
[gsm]
apn=
home-only=false
auto-config=true
[ipv4]
route-metric=1000
dns-priority=1000
dns-search=
method=auto
[ipv6]
ddr-gen-mode=stable-privacy
dns-search=
route-metric=1000
dns-priority=1000
method=auto
[proxy]