From 3762ea1e3fcfdb5611d441557ab42e7698d6da84 Mon Sep 17 00:00:00 2001 From: Andrei Radulescu Date: Sat, 25 Oct 2025 23:05:26 +0300 Subject: [PATCH] Remove Qt + weston (#502) * bye bye * add libwayland-egl.so.1, libeglSubDriverWayland.so(.patched) back to agnos-display 0.0.2 * moved libffi6 to libs/ * revert deb for now, too hard to review --------- Co-authored-by: Adeeb Shihadeh --- Dockerfile.agnos | 30 ------ README.md | 2 +- userspace/.gitattributes | 2 - userspace/compile-qtwayland5.sh | 63 ------------ userspace/files/agnos-tests.service | 3 +- userspace/files/gl-renderer.so | Bin 186672 -> 0 bytes .../files/libeglSubDriverWayland.so.patched | 3 - userspace/files/profile | 4 +- userspace/files/weston | 3 - userspace/files/weston-ready.service | 28 ----- userspace/files/weston.service | 31 ------ userspace/libinput/NOTES | 3 - userspace/libinput/patch.diff | 97 ------------------ userspace/libs/libffi.so.6 | 1 + userspace/libs/libffi.so.6.0.4 | Bin 0 -> 30920 bytes userspace/libs/libqmapboxgl.so | Bin 69224 -> 0 bytes userspace/qtwayland/README | 80 --------------- userspace/qtwayland/build-libwayland-deb.sh | 59 ----------- userspace/qtwayland/build-qt-deb.sh | 95 ----------------- userspace/qtwayland/libffi6_3.2.1-8_arm64.deb | 3 - .../libicu66_66.1-2ubuntu2.1_arm64.deb | 3 - .../libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb | 3 - userspace/qtwayland/libwayland-1.9.0-1.deb | 3 - userspace/qtwayland/patch-qtwayland-v5.12 | 25 ----- userspace/qtwayland/qt-5.12.8.deb | 3 - userspace/usr/comma/power_drop_monitor.py | 2 +- .../usr/comma/tests/analyze-boot-time.py | 3 - userspace/usr/comma/tests/benchmark_weston.py | 47 --------- userspace/usr/comma/tests/test_agnos.py | 7 -- userspace/usr/comma/tests/test_weston.py | 47 --------- userspace/usr/comma/weston.ini | 4 - 31 files changed, 5 insertions(+), 649 deletions(-) delete mode 100755 userspace/compile-qtwayland5.sh delete mode 100755 userspace/files/gl-renderer.so delete mode 100644 userspace/files/libeglSubDriverWayland.so.patched delete mode 100755 userspace/files/weston delete mode 100644 userspace/files/weston-ready.service delete mode 100644 userspace/files/weston.service delete mode 100644 userspace/libinput/NOTES delete mode 100644 userspace/libinput/patch.diff create mode 120000 userspace/libs/libffi.so.6 create mode 100644 userspace/libs/libffi.so.6.0.4 delete mode 100755 userspace/libs/libqmapboxgl.so delete mode 100644 userspace/qtwayland/README delete mode 100755 userspace/qtwayland/build-libwayland-deb.sh delete mode 100755 userspace/qtwayland/build-qt-deb.sh delete mode 100644 userspace/qtwayland/libffi6_3.2.1-8_arm64.deb delete mode 100644 userspace/qtwayland/libicu66_66.1-2ubuntu2.1_arm64.deb delete mode 100644 userspace/qtwayland/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb delete mode 100644 userspace/qtwayland/libwayland-1.9.0-1.deb delete mode 100644 userspace/qtwayland/patch-qtwayland-v5.12 delete mode 100644 userspace/qtwayland/qt-5.12.8.deb delete mode 100755 userspace/usr/comma/tests/benchmark_weston.py delete mode 100755 userspace/usr/comma/tests/test_weston.py delete mode 100644 userspace/usr/comma/weston.ini diff --git a/Dockerfile.agnos b/Dockerfile.agnos index 64914f6..f9bc67d 100644 --- a/Dockerfile.agnos +++ b/Dockerfile.agnos @@ -51,14 +51,6 @@ COPY ./userspace/compile-lpac.sh /tmp/agnos/ RUN --mount=type=cache,target=/root/.ccache,id=lpac,sharing=shared \ /tmp/agnos/compile-lpac.sh -# qtwayland5 -FROM agnos-compiler AS agnos-compiler-qtwayland5 -COPY ./userspace/qtwayland/*.deb /tmp/agnos/ -COPY ./userspace/compile-qtwayland5.sh /tmp/agnos/ -COPY ./userspace/qtwayland/patch* /tmp/agnos/ -RUN --mount=type=cache,target=/root/.ccache,id=qtwayland5,sharing=shared \ - /tmp/agnos/compile-qtwayland5.sh - # ################## # # ###### Base ###### # # ################## # @@ -87,15 +79,6 @@ RUN /tmp/agnos/openpilot_dependencies.sh COPY ./userspace/openpilot_python_dependencies.sh /tmp/agnos/ RUN /tmp/agnos/openpilot_python_dependencies.sh -# Install old Qt 5.12.8, libwayland 1.9.0-1 and deps -COPY ./userspace/qtwayland/*.deb /tmp/agnos/ -RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \ - /tmp/agnos/qt-5.12.8.deb \ - /tmp/agnos/libwayland-1.9.0-1.deb \ - /tmp/agnos/libicu66_66.1-2ubuntu2.1_arm64.deb \ - /tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \ - /tmp/agnos/libffi6_3.2.1-8_arm64.deb - # ################### # # ###### AGNOS ###### # # ################### # @@ -153,12 +136,6 @@ RUN source $XDG_DATA_HOME/venv/bin/activate && \ COPY ./userspace/install_extras.sh /tmp/agnos/ RUN /tmp/agnos/install_extras.sh -COPY --from=agnos-compiler-qtwayland5 /tmp/qtwayland5.deb /tmp/qtwayland5.deb -RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq --allow-downgrades ./qtwayland5.deb - -# Patched libeglSubDriverWayland with fixed nullptr deref in CommitBuffer -COPY ./userspace/files/libeglSubDriverWayland.so.patched /lib/aarch64-linux-gnu/libeglSubDriverWayland.so - COPY ./userspace/home/ /home/$USERNAME/ COPY ./userspace/home/.config/ /root/.config RUN chown -R $USERNAME: /home/$USERNAME/.config @@ -194,10 +171,6 @@ COPY ./userspace/libs32/* /usr/lib/arm-linux-gnueabihf/ #COPY ./userspace/files/linux-headers-4.9.103+_4.9.103+-1_arm64.deb /tmp/ #RUN dpkg -i /tmp/linux-headers-4.9.103+_4.9.103+-1_arm64.deb -# Weston with hacked touch rotate and color correction -COPY ./userspace/files/weston /usr/bin/weston -COPY ./userspace/files/gl-renderer.so /usr/lib/arm-linux-gnueabihf/weston - # Setup systemd services COPY ./userspace/services.sh /tmp/agnos RUN /tmp/agnos/services.sh @@ -226,9 +199,6 @@ COPY ./userspace/files/avahi-override.conf /etc/systemd/system/avahi-daemon.serv # Prevent polkitd memory leak from getting out of hand by restarting it every ~day COPY ./userspace/files/polkit-override.conf /etc/systemd/system/polkit.service.d/override.conf -# Remove qt network bearer plugins -RUN rm -rf /usr/lib/aarch64-linux-gnu/qt5/plugins/bearer - # Add iptable rules to block incoming traffic on wwan0 COPY ./userspace/etc/iptables/rules.v4 /etc/iptables/rules.v4 diff --git a/README.md b/README.md index 31ffd95..f3fa579 100644 --- a/README.md +++ b/README.md @@ -87,4 +87,4 @@ Some concrete things on the roadmap: - [ ] mainline Linux kernel https://github.com/commaai/openpilot/issues/32386 - [ ] fully open source - [ ] anything from `firmware/`: XBL, ABL, etc. - - [ ] Weston https://github.com/commaai/agnos-builder/issues/16 + - [x] Weston https://github.com/commaai/agnos-builder/issues/16 deleted! diff --git a/userspace/.gitattributes b/userspace/.gitattributes index 7db9ea4..ee2edf9 100644 --- a/userspace/.gitattributes +++ b/userspace/.gitattributes @@ -1,7 +1,5 @@ usr/comma/wlan.ko filter=lfs diff=lfs merge=lfs -text usr/comma/wifi filter=lfs diff=lfs merge=lfs -text -files/weston filter=lfs diff=lfs merge=lfs -text -files/libeglSubDriverWayland.so.patched filter=lfs diff=lfs merge=lfs -text usr/comma/reset filter=lfs diff=lfs merge=lfs -text usr/comma/setup filter=lfs diff=lfs merge=lfs -text usr/comma/installer filter=lfs diff=lfs merge=lfs -text diff --git a/userspace/compile-qtwayland5.sh b/userspace/compile-qtwayland5.sh deleted file mode 100755 index 6d5c930..0000000 --- a/userspace/compile-qtwayland5.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -e - -VERSION=5.12.9 - -# Install build requirements -dpkg --add-architecture armhf - -apt-get update && apt-get install -yq --no-install-recommends \ - libc6:armhf \ - libdbus-1-3 \ - libegl-dev \ - libexpat1:armhf \ - libfontconfig-dev \ - libfreetype6 \ - libgles-dev \ - libglib2.0-dev \ - libharfbuzz-dev \ - libpcre2-dev \ - libwayland-dev \ - libxcomposite-dev \ - libxkbcommon-dev \ - zlib1g-dev - -apt-get -o Dpkg::Options::="--force-overwrite" install -yq \ - /tmp/agnos/qt-5.12.8.deb \ - /tmp/agnos/libwayland-1.9.0-1.deb \ - /tmp/agnos/libicu66_66.1-2ubuntu2.1_arm64.deb \ - /tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \ - /tmp/agnos/libffi6_3.2.1-8_arm64.deb - -# Patched qtwayland that outputs a fixed screen size -# Clone qtwayland submodule, checkout, apply patch, qmake, make -cd /tmp -git clone --branch v${VERSION} --depth 1 https://github.com/qt/qtwayland.git -cd qtwayland - -git apply /tmp/agnos/patch-qtwayland-v5.12 - -# qtwayland is incorrectly built against libdl.so instead of libdl.so.2 -# https://stackoverflow.com/a/75855054/639708 -ln -s libdl.so.2 /usr/lib/aarch64-linux-gnu/libdl.so - -qmake -export MAKEFLAGS="-j$(nproc)" -make - -OUTPUT_DIR=/tmp/qtwayland5 -mkdir $OUTPUT_DIR -make install INSTALL_ROOT=$OUTPUT_DIR - -mkdir $OUTPUT_DIR/DEBIAN -cat << EOF > $OUTPUT_DIR/DEBIAN/control -Package: qtwayland5 -Version: ${VERSION}-1 -Architecture: all -Maintainer: Andrei Radulescu -Replaces: qtwayland5, libqt5waylandclient5, libqt5waylandcompositor5 -Installed-Size: `du -s $OUTPUT_DIR | awk '{print $1}'` -Homepage: https://comma.ai -Description: Patched qtwayland that outputs a fixed screen size -EOF - -dpkg-deb --root-owner-group --build $OUTPUT_DIR /tmp/qtwayland5.deb diff --git a/userspace/files/agnos-tests.service b/userspace/files/agnos-tests.service index 5b26bf4..e925dec 100644 --- a/userspace/files/agnos-tests.service +++ b/userspace/files/agnos-tests.service @@ -1,5 +1,5 @@ [Unit] -#After=weston-ready.service +#After= [Service] #Type=simple @@ -10,7 +10,6 @@ Restart=no # exit if connected to 5V ExecStartPre=/bin/bash -c "if [ $(cat /sys/class/hwmon/hwmon1/in1_input) -le 6500 ]; then echo 'Exiting, connected to 5V'; exit 1; fi" -#ExecStart=/bin/bash -c "source /etc/profile && /usr/comma/tests/test_weston.py" ExecStart=/bin/bash -c "source /etc/profile && /usr/comma/tests/test_sounds.py" [Install] diff --git a/userspace/files/gl-renderer.so b/userspace/files/gl-renderer.so deleted file mode 100755 index 8de34bb44f25f80d0c037de46c49ef0d86c25c20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186672 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 /sys/class/backlight/panel0-backlight/brightness" - -[Install] -WantedBy=multi-user.target diff --git a/userspace/files/weston.service b/userspace/files/weston.service deleted file mode 100644 index 52ecd20..0000000 --- a/userspace/files/weston.service +++ /dev/null @@ -1,31 +0,0 @@ -[Unit] -Description=Weston -Conflicts=getty@tty1.service - -[Service] -Type=simple -Restart=no -KillSignal=SIGKILL -Environment="XDG_RUNTIME_DIR=/var/tmp/weston" - -UtmpIdentifier=tty1 -TTYPath=/dev/tty1 -TTYReset=yes -TTYVHangup=yes -TTYVTDisallocate=yes - -ExecStartPre=/bin/bash -c "/usr/local/venv/bin/python -c 'import fcntl; KDSETMODE = 0x4B3A; KD_TEXT = 0x00; fd = open(\"/dev/tty1\", \"w\"); fcntl.ioctl(fd, KDSETMODE, KD_TEXT); fd.close()'" -ExecStartPre=/bin/bash -c "/usr/local/venv/bin/python -c 'from PIL import Image; img=Image.open(\"/usr/comma/bg.jpg\"); (img.rotate(180) if open(\"/sys/devices/platform/vendor/vendor:gpio-som-id/som_id\").read().strip() == \"1\" else img).save(\"/tmp/bg.jpg\")'" -ExecStartPre=/bin/bash -c "mkdir -p $XDG_RUNTIME_DIR" -ExecStartPre=/bin/bash -c "chown -R comma: $XDG_RUNTIME_DIR" -ExecStartPre=/bin/bash -c "chmod -R 700 $XDG_RUNTIME_DIR" - -ExecStartPre=/bin/bash -c "mkdir -p /data/misc/display || true" -ExecStartPre=/bin/bash -c "echo 0 > /data/misc/display/sdm_dbg_cfg.txt || true" -ExecStartPre=/bin/bash -c "echo 0 > /data/misc/display/gbm_dbg_cfg.txt || true" - -ExecStartPre=/bin/chvt 1 -ExecStart=/usr/bin/weston --idle-time=0 --tty=1 --config=/usr/comma/weston.ini - -[Install] -WantedBy=multi-user.target diff --git a/userspace/libinput/NOTES b/userspace/libinput/NOTES deleted file mode 100644 index e021625..0000000 --- a/userspace/libinput/NOTES +++ /dev/null @@ -1,3 +0,0 @@ -The Thundercomm version of Weston has a bug where it doesn't allow opening the input devices. -This patch bypasses that. -Source used to build: libinput commit f0997536a7a3e384bfe64b67c5c1f874656042c6 diff --git a/userspace/libinput/patch.diff b/userspace/libinput/patch.diff deleted file mode 100644 index ddb09b4..0000000 --- a/userspace/libinput/patch.diff +++ /dev/null @@ -1,97 +0,0 @@ -diff --git a/src/evdev.c b/src/evdev.c -index c3c02d2a..ef773e6a 100644 ---- a/src/evdev.c -+++ b/src/evdev.c -@@ -1991,7 +1991,7 @@ evdev_notify_added_device(struct evdev_device *device) - static bool - evdev_device_have_same_syspath(struct udev_device *udev_device, int fd) - { -- struct udev *udev = udev_device_get_udev(udev_device); -+ struct udev *udev = udev_device_get_udev(udev_device); - struct udev_device *udev_device_new = NULL; - struct stat st; - bool rc = false; -@@ -1999,9 +1999,13 @@ evdev_device_have_same_syspath(struct udev_device *udev_device, int fd) - if (fstat(fd, &st) < 0) - goto out; - -+ printf("st_rdev: %d\n", st.st_rdev); - udev_device_new = udev_device_new_from_devnum(udev, 'c', st.st_rdev); - if (!udev_device_new) - goto out; -+ -+ printf("same syspath: %s %s\n", udev_device_get_syspath(udev_device_new), -+ udev_device_get_syspath(udev_device)); - - rc = streq(udev_device_get_syspath(udev_device_new), - udev_device_get_syspath(udev_device)); -@@ -2174,6 +2178,8 @@ evdev_device_create(struct libinput_seat *seat, - return NULL; - } - -+ log_error(libinput, "%s: evdev_device_create\n", sysname); -+ - if (udev_device_should_be_ignored(udev_device)) { - log_debug(libinput, "%s: device is ignored\n", sysname); - return NULL; -@@ -2182,7 +2188,8 @@ evdev_device_create(struct libinput_seat *seat, - /* Use non-blocking mode so that we can loop on read on - * evdev_device_data() until all events on the fd are - * read. mtdev_get() also expects this. */ -- fd = open_restricted(libinput, devnode, -+ //fd = open_restricted(libinput, devnode, -+ fd = open(devnode, - O_RDWR | O_NONBLOCK | O_CLOEXEC); - if (fd < 0) { - log_info(libinput, -@@ -2193,8 +2200,11 @@ evdev_device_create(struct libinput_seat *seat, - return NULL; - } - -- if (!evdev_device_have_same_syspath(udev_device, fd)) -+ printf("Opened fd: %d from devnode %s\n", fd, devnode); -+ if (!evdev_device_have_same_syspath(udev_device, fd)){ -+ log_error(libinput, "%s: not same syspath\n", sysname); - goto err; -+ } - - device = zalloc(sizeof *device); - -@@ -2204,8 +2214,10 @@ evdev_device_create(struct libinput_seat *seat, - evdev_drain_fd(fd); - - rc = libevdev_new_from_fd(fd, &device->evdev); -- if (rc != 0) -+ if (rc != 0){ -+ log_error(libinput, "%s: new_from_fd failed\n", sysname); - goto err; -+ } - - libevdev_set_clock_id(device->evdev, CLOCK_MONOTONIC); - libevdev_set_device_log_function(device->evdev, -@@ -2241,16 +2253,22 @@ evdev_device_create(struct libinput_seat *seat, - evdev_pre_configure_model_quirks(device); - - device->dispatch = evdev_configure_device(device); -- if (device->dispatch == NULL || device->seat_caps == 0) -+ if (device->dispatch == NULL || device->seat_caps == 0){ -+ log_error(libinput, "%s: device->dispatch or device->seat_caps %d failed\n", sysname, device->seat_caps); - goto err; -+ } - - device->source = - libinput_add_fd(libinput, fd, evdev_device_dispatch, device); -- if (!device->source) -+ if (!device->source){ -+ log_error(libinput, "%s: device->source failed\n", sysname); - goto err; -+ } - -- if (!evdev_set_device_group(device, udev_device)) -+ if (!evdev_set_device_group(device, udev_device)){ -+ log_error(libinput, "%s: set device group failed\n", sysname); - goto err; -+ } - - list_insert(seat->devices_list.prev, &device->base.link); - diff --git a/userspace/libs/libffi.so.6 b/userspace/libs/libffi.so.6 new file mode 120000 index 0000000..c6cc6fd --- /dev/null +++ b/userspace/libs/libffi.so.6 @@ -0,0 +1 @@ +libffi.so.6.0.4 \ No newline at end of file diff --git a/userspace/libs/libffi.so.6.0.4 b/userspace/libs/libffi.so.6.0.4 new file mode 100644 index 0000000000000000000000000000000000000000..217a6dcce211d77a137cef154588b5dd12210793 GIT binary patch literal 30920 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 diff --git a/userspace/qtwayland/README b/userspace/qtwayland/README deleted file mode 100644 index 1910295..0000000 --- a/userspace/qtwayland/README +++ /dev/null @@ -1,80 +0,0 @@ -# Ubuntu 24.04 + "old" weston - -The following need to work together in Ubuntu 24.04 (noble): -- "old" weston -- libwayland -- qtwayland -- qt - -The "old" weston is built with: -- libwayland-dev_1.9.0-1 -- libwayland-server_1.9.0-1 -- libwayland-client_1.9.0-1 -- libwayland-cursor_1.9.0-1 - -These are roughly from Xenial (16.04 - https://launchpad.net/ubuntu/xenial/arm64/libwayland-dev/1.9.0-1). - -In Ubuntu 20.04 (focal) even if libwayland is 1.18.0-1, the protocol between -the server (1.9.0-1) and client (1.18.0-1) was still compatible. Unfortunately, -this is not the case anymore in Ubuntu 24.04 (noble), where libwayland 1.22.0 -is not compatible anymore with 1.9.0. - -Because of this: -- libwayland-*_1.9.0-1 packages can't be installed anymore from noble, but a -custom deb has been built (libwayland-1.9.0-1.deb) - this includes all -libwayland packages in one package -- libwayland has a dependency (libffi6) -- libwayland-1.9.0-1.deb can be rebuilt with `build-libwayland-deb.sh` - -Also, Qt 5.15 from Ubuntu 24.04 (noble) doesn't compile with these old -dependencies, 5.12 being the last major being able to be compiled, so: -- a custom qt-5.12.8.deb has been built, since qt from focal has a lot of -dependencies not existing in Ubuntu 24.04 (noble) -- qt has two non-qt related dependencies (libicu66, libssl1.1) -- qt-5.12.8.deb can be rebuilt with `build-qt-deb.sh` - -The dependencies for the two custom debs can be downloaded from Launchpad: -``` -curl -LO https://launchpad.net/ubuntu/+archive/primary/+files/libffi6_3.2.1-8_arm64.deb -curl -LO https://launchpad.net/ubuntu/+archive/primary/+files/libicu66_66.1-2ubuntu2.1_arm64.deb -curl -LO https://launchpad.net/ubuntu/+archive/primary/+files/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb -``` -\* libffi6_armhf is also needed, but already exits in libs32 - -# When updating weston & removing custom debs -After removing qt-5.12.8.deb add these back: -``` -libqt5opengl5-dev \ -libqt5sql5-sqlite \ -libqt5svg5-dev \ -libqt5multimedia5-plugins \ -qml-module-qtquick2 \ -qtbase5-dev \ -qtchooser \ -qt5-qmake \ -qtbase5-dev-tools \ -qtbase5-private-dev \ -qtdeclarative5-dev \ -qtdeclarative5-private-dev \ -qtlocation5-dev \ -qtmultimedia5-dev \ -qtpositioning5-dev \ -qtwayland5 \ -``` - -In case of uncertainty, qt5-default was a metapackage for: -``` -qtbase5-dev -qtchooser -qt5-qmake -qtbase5-dev-tools -``` -More info: https://packages.ubuntu.com/focal/qt5-default - -After removing libwayland-1.9.0-1.deb add these back: -``` -libwayland-client0:armhf \ -libwayland-cursor0:armhf \ -libwayland-server0:armhf \ -libwayland-dev \ -``` diff --git a/userspace/qtwayland/build-libwayland-deb.sh b/userspace/qtwayland/build-libwayland-deb.sh deleted file mode 100755 index 4b2714f..0000000 --- a/userspace/qtwayland/build-libwayland-deb.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -set -e - -################################################################################ -# Custom libwayland is created by combining libwayland client0, cursor0, server0 -# and dev 1.9.0-1 from Ubuntu 16.04 (xenial) for both aarch64 and armhf, without -# getting into dependency hell. -################################################################################ - -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" -TMP=$DIR/tmp -TMP_SRC=$TMP/libwayland-src-debs - -# Create a new folder `libwayland-1.9.0-1` and put the metadata in -# `libwayland-1.9.0-1/DEBIAN/control`: - -mkdir -p $TMP -cd $TMP -mkdir -p libwayland-1.9.0-1/DEBIAN - -cat << EOF > libwayland-1.9.0-1/DEBIAN/control -Package: libwayland-xenial -Version: 1.9.0-1 -Architecture: all -Maintainer: Andrei Radulescu andi.radulescu@gmail.com -Depends: libc6 (>= 2.17), libexpat1 (>= 2.0.1), libffi6 (>= 3.2) -Replaces: libwayland-dev, libwayland-client0, libwayland-cursor0, libwayland-server0 -Installed-Size: 0 -Homepage: https://comma.ai -Description: libwayland client0, cursor0, server0 and dev 1.9.0-1 from Ubuntu Xenial -EOF - -# Download the official debs: -mkdir -p $TMP_SRC -cd $TMP_SRC - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-dev_1.9.0-1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-dev_1.9.0-1_armhf.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-client0_1.9.0-1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-client0_1.9.0-1_armhf.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-cursor0_1.9.0-1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-cursor0_1.9.0-1_armhf.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-server0_1.9.0-1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libwayland-server0_1.9.0-1_armhf.deb - -# And unpack them: -for deb in *.deb; do dpkg-deb -R "$deb" "${deb%.deb}"; done - -# Copy all files in libwayland-1.9.0-1 -cd $TMP -cp -a $TMP_SRC/*/usr libwayland-1.9.0-1 - -# Package the deb and clean up everything else -dpkg-deb --root-owner-group --build "libwayland-1.9.0-1" "libwayland-1.9.0-1.deb" -mv libwayland-1.9.0-1.deb $DIR -rm -rf libwayland-1.9.0-1 $TMP_SRC diff --git a/userspace/qtwayland/build-qt-deb.sh b/userspace/qtwayland/build-qt-deb.sh deleted file mode 100755 index cfa6b45..0000000 --- a/userspace/qtwayland/build-qt-deb.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -set -e - -################################################################################ -# Custom qt is created by combining qt packages from from Ubuntu 20.04 (focal) -# without getting into dependency hell. -################################################################################ - -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" -TMP=$DIR/tmp -TMP_SRC=$TMP/qt-src-debs - -# Create a new folder `qt-5.12.8` and put the metadata in -# `qt-5.12.8/DEBIAN/control`: - -mkdir -p $TMP -cd $TMP -mkdir -p qt-5.12.8/DEBIAN - -cat << EOF > qt-5.12.8/DEBIAN/control -Package: qt-focal -Version: 5.12.8 -Architecture: all -Maintainer: Andrei Radulescu andi.radulescu@gmail.com -Depends: libicu66 (>= 66.1-1~), libdouble-conversion3 (>= 2.0.0), libssl1.1 -Replaces: qtbase5-dev, qtchooser, qt5-qmake, qtbase5-dev-tools -Installed-Size: 0 -Homepage: https://comma.ai -Description: Qt 5.12.8 from Ubuntu 20.04 -EOF - -# Download the official debs: -mkdir -p $TMP_SRC -cd $TMP_SRC - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtbase5-dev_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtbase5-dev-tools_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtbase5-private-dev_5.12.8+dfsg-0ubuntu2.1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qt5-qmake_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qt5-qmake-bin_5.12.8+dfsg-0ubuntu2.1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtdeclarative5-dev-tools_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5core5a_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5network5_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5gui5_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5dbus5_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5concurrent5_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5widgets5_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5xml5_5.12.8+dfsg-0ubuntu2.1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5opengl5-dev_5.12.8+dfsg-0ubuntu2.1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5opengl5_5.12.8+dfsg-0ubuntu2.1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5svg5-dev_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5svg5_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5multimedia5-plugins_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5multimedia5_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5multimediagsttools5_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5multimediawidgets5_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtdeclarative5-dev_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtdeclarative5-private-dev_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtlocation5-dev_5.12.8+dfsg-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5location5_5.12.8+dfsg-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5location5-plugins_5.12.8+dfsg-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5location5-plugin-mapboxgl_5.12.8+dfsg-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtmultimedia5-dev_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5multimedia5_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5multimediaquick5_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5waylandclient5_5.12.8-0ubuntu1_arm64.deb -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/libqt5waylandcompositor5_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtwayland5_5.12.8-0ubuntu1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qt5-default_5.12.8+dfsg-0ubuntu2.1_arm64.deb - -curl -sSLO https://launchpad.net/ubuntu/+archive/primary/+files/qtchooser_66-2build1_arm64.deb - -# And unpack them: -for deb in *.deb; do dpkg-deb -R "$deb" "${deb%.deb}"; done - -# Copy all files in qt-5.12.8 -cd $TMP -cp -a $TMP_SRC/*/usr qt-5.12.8 - -# Package the deb and clean up everything else -dpkg-deb --root-owner-group --build "qt-5.12.8" "qt-5.12.8.deb" -mv qt-5.12.8.deb $DIR -rm -rf qt-5.12.8 $TMP_SRC diff --git a/userspace/qtwayland/libffi6_3.2.1-8_arm64.deb b/userspace/qtwayland/libffi6_3.2.1-8_arm64.deb deleted file mode 100644 index b906114..0000000 --- a/userspace/qtwayland/libffi6_3.2.1-8_arm64.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0f8d2b7613167317ec4f9bf65125a2e13c5f357e5acb5cc1fa9ed488c3c88b0 -size 17016 diff --git a/userspace/qtwayland/libicu66_66.1-2ubuntu2.1_arm64.deb b/userspace/qtwayland/libicu66_66.1-2ubuntu2.1_arm64.deb deleted file mode 100644 index 757254e..0000000 --- a/userspace/qtwayland/libicu66_66.1-2ubuntu2.1_arm64.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ccfbd8e68fadcf4cc3975cdae42d1786733963f75d0b180f96c13782e185635b -size 8359564 diff --git a/userspace/qtwayland/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb b/userspace/qtwayland/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb deleted file mode 100644 index c42ff55..0000000 --- a/userspace/qtwayland/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36b33bc85a8c75d539f00dcda80cf9d618a0ee56aec46761347409caeebb9028 -size 1158832 diff --git a/userspace/qtwayland/libwayland-1.9.0-1.deb b/userspace/qtwayland/libwayland-1.9.0-1.deb deleted file mode 100644 index 491baa2..0000000 --- a/userspace/qtwayland/libwayland-1.9.0-1.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b06c0ea60c33fb5bb2e16e0d340296dec22e178af5210b5405d7bf26e1c6527 -size 160312 diff --git a/userspace/qtwayland/patch-qtwayland-v5.12 b/userspace/qtwayland/patch-qtwayland-v5.12 deleted file mode 100644 index ac5024d..0000000 --- a/userspace/qtwayland/patch-qtwayland-v5.12 +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/src/client/qwaylandscreen.cpp b/src/client/qwaylandscreen.cpp -index 1fe0125e..7899c94e 100644 ---- a/src/client/qwaylandscreen.cpp -+++ b/src/client/qwaylandscreen.cpp -@@ -94,6 +94,7 @@ QString QWaylandScreen::model() const - - QRect QWaylandScreen::geometry() const - { -+ return QRect(0, 0, 2160, 1080); - if (zxdg_output_v1::isInitialized()) { - return mXdgGeometry; - } else { -diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp -index 4b3a635c..d0e70f29 100644 ---- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp -+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp -@@ -76,7 +76,7 @@ QWaylandEglClientBufferIntegration::~QWaylandEglClientBufferIntegration() - - void QWaylandEglClientBufferIntegration::initialize(QWaylandDisplay *display) - { -- if (q_hasEglExtension(EGL_NO_DISPLAY, "EGL_EXT_platform_base")) { -+ if (false && q_hasEglExtension(EGL_NO_DISPLAY, "EGL_EXT_platform_base")) { - if (q_hasEglExtension(EGL_NO_DISPLAY, "EGL_KHR_platform_wayland") || - q_hasEglExtension(EGL_NO_DISPLAY, "EGL_EXT_platform_wayland") || - q_hasEglExtension(EGL_NO_DISPLAY, "EGL_MESA_platform_wayland")) { diff --git a/userspace/qtwayland/qt-5.12.8.deb b/userspace/qtwayland/qt-5.12.8.deb deleted file mode 100644 index c971fc5..0000000 --- a/userspace/qtwayland/qt-5.12.8.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f10abc73eafab7e1e26a912b0cd5eece3df708f94868cd37b5bb717c6003fac -size 18782360 diff --git a/userspace/usr/comma/power_drop_monitor.py b/userspace/usr/comma/power_drop_monitor.py index 4dd7379..c4c3d45 100755 --- a/userspace/usr/comma/power_drop_monitor.py +++ b/userspace/usr/comma/power_drop_monitor.py @@ -95,7 +95,7 @@ def perform_controlled_shutdown(): # Kill services that draw a lot of power printk("Killing services") - subprocess.call(["/usr/bin/systemctl", "kill", "--signal=9", "weston", "comma"]) + subprocess.call(["/usr/bin/systemctl", "kill", "--signal=9", "comma"]) set_screen_power(False) printk("Halt") diff --git a/userspace/usr/comma/tests/analyze-boot-time.py b/userspace/usr/comma/tests/analyze-boot-time.py index 75e66f2..2bcd15c 100755 --- a/userspace/usr/comma/tests/analyze-boot-time.py +++ b/userspace/usr/comma/tests/analyze-boot-time.py @@ -5,7 +5,6 @@ from tabulate import tabulate # serial with timestamps: # grabserial -d /dev/serial/by-id/usb-FTDI_FT230X* -t -# systemd-analyze critical-chain weston.service # systemd-analyze critical-chain comma.service # boot chart: @@ -36,8 +35,6 @@ if __name__ == "__main__": ts['kernel'] = float(l[3][:-1]) #ts['systemd'] = float(l[6][:-1]) - # includes /sbin/init -> weston being ready to display stuff - ts['weston'] = get_journal_time("Finished weston-ready.service") - tot_since_kern() ts['comma'] = get_journal_time("Starting comma.service") - tot_since_kern() # print diff --git a/userspace/usr/comma/tests/benchmark_weston.py b/userspace/usr/comma/tests/benchmark_weston.py deleted file mode 100755 index 8362f89..0000000 --- a/userspace/usr/comma/tests/benchmark_weston.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 -import os -import time -import subprocess - -def run(cmd): - subprocess.check_call(cmd, shell=True) - -def timestamp_cmd(cmd): - cnt = 0 - while True: - cnt += 1 - print("try ", cnt) - run("sudo chmod -R 700 /var/tmp/weston/") - proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - t = time.monotonic() - time.sleep(0.5) - r = proc.poll() - if r is not None: - continue - break - print("r", r) - return t - -if __name__ == "__main__": - - run("sudo systemctl stop weston") - run("sudo rm -rf /var/tmp/weston/wayland-0") - time.sleep(0.5) - #run("sudo systemctl restart weston-ready") - - run("sudo systemctl restart weston --no-block") - st = time.monotonic() - #ts = defaultdict() - - cnt = 0 - while not os.path.exists("/var/tmp/weston/wayland-0"): - time.sleep(0.1) - cnt += 1 - t = time.monotonic() - print(f"- socket at {t - st:.2f}s") - - t = timestamp_cmd('/usr/comma/setup') - print(f"- setup works {t - st:.2f}s") - - t = timestamp_cmd('cd /data/openpilot/selfdrive/ui/ && ./spinner') - print(f"- spinner works {t - st:.2f}s") diff --git a/userspace/usr/comma/tests/test_agnos.py b/userspace/usr/comma/tests/test_agnos.py index 1db914e..8ca6647 100755 --- a/userspace/usr/comma/tests/test_agnos.py +++ b/userspace/usr/comma/tests/test_agnos.py @@ -44,10 +44,6 @@ def test_wifi(): networks = out.strip().splitlines()[1:] assert len(networks) > 5 -def test_color_calibration(): - out = subprocess.check_output("journalctl -u weston", shell=True, encoding='utf8') - assert out.count("Successfully setup color correction") == 3 - def test_python_shims(): subprocess.check_call("cd /data/openpilot && scons -h", shell=True, stdout=subprocess.DEVNULL) @@ -64,7 +60,4 @@ def test_boot_time(): a = out.splitlines()[0] print(out, a) - # check weston service - # check comma service - diff --git a/userspace/usr/comma/tests/test_weston.py b/userspace/usr/comma/tests/test_weston.py deleted file mode 100755 index 0595577..0000000 --- a/userspace/usr/comma/tests/test_weston.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 -import os -import time -import hashlib -import subprocess - -""" -journalctl -o short-monotonic -u weston -u weston-ready -u agnos-tests -""" - -if __name__ == "__main__": - socket_exists = os.path.exists("/var/tmp/weston/wayland-0") - is_active = subprocess.check_output("systemctl is-active weston", shell=True, encoding='utf8').strip() - - d = b"" - for fn in ('/lib/systemd/system/weston.service', '/lib/systemd/system/weston-ready.service'): - with open(fn, 'rb') as f: - d += f.read() - h = hashlib.sha1(d).hexdigest() - - # weston should be ready to go at this point - cmd = '/usr/comma/setup' - cmd = 'cd /data/openpilot/selfdrive/ui/ && ./ui' - proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - for i in range(10): - r = proc.poll() - if r is not None: - break - time.sleep(1) - - rc = proc.returncode - proc.kill() - out, err = proc.stdout.read(), proc.stderr.read() - - with open('/data/weston_log', 'a') as f: - f.write(f"{is_active=}, {socket_exists=}, {rc=} / {h} / {cmd}\n") - if rc is not None: - f.write(f" stdout: {out}\n") - f.write(f" stderr: {err}\n") - os.sync() - - os.system("sudo su -c 'tail /data/weston_log > /dev/console'") - os.system("sudo su -c 'wc -l /data/weston_log > /dev/console'") - - if rc is None: - time.sleep(2) - os.system("sudo reboot") diff --git a/userspace/usr/comma/weston.ini b/userspace/usr/comma/weston.ini deleted file mode 100644 index 9f1f991..0000000 --- a/userspace/usr/comma/weston.ini +++ /dev/null @@ -1,4 +0,0 @@ -[shell] -background-image=/tmp/bg.jpg -background-type=scale-crop -close-animation=none