From 0f3b33a3e7d2fe7bee2becbde104717930a1b014 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Wed, 14 Oct 2026 00:40:39 +0900 Subject: [PATCH] pl2303 built out of tree for the IMU's PL2303GC adapter; BOM and rebuild procedure Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz --- docs/BOM.md | 6 +++-- docs/impl/reports/PL2303-DRIVER.md | 41 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 docs/impl/reports/PL2303-DRIVER.md diff --git a/docs/BOM.md b/docs/BOM.md index 44b565c..86f6eca 100644 --- a/docs/BOM.md +++ b/docs/BOM.md @@ -181,8 +181,10 @@ Header facts (carrier board spec SP-11324-001 v1.3, Table 3-3 and 5-3; raw copy - Do not zero the accelerometer at startup the way smart-serow's `imu_calibrate()` does: that removes gravity, which tilt and grade need. - The serial device belongs to `dialout` (the header's `/dev/ttyTHS1` and USB adapters alike); a service gets it with `SupplementaryGroups=dialout`, not by adding users to the group. -- **USB-UART adapter:** JetPack's kernel has drivers for CP210x and FTDI only (no PL2303, no CH341). In use: a CP2102 (`10c4:ea60`, - generic serial `0001`, so it can only be told apart by port). A PL2303GC (`067b:23a3`) enumerates but gets no driver. +- **USB-UART adapter: a PL2303GC (`067b:23a3`)**, the one the IMU enclosure is designed around (2026-10-14). JetPack's kernel has + drivers for CP210x and FTDI only, so `pl2303` is built out of tree in `~/infra/pl2303/` ([report](impl/reports/PL2303-DRIVER.md)); + rebuild it after a kernel update. A CP2102 (`10c4:ea60`, generic serial `0001`) was used for the first test and works with no + build. Neither has a unique serial: the `imu` service finds the WT61 by trying each adapter, so they are interchangeable. - The temperature field is the chip's own temperature, not the air's: `raw / 340 + 36.53` °C per the datasheet (smart-serow's `IMU.md` says 36.25). - **The gyro zeroes itself at power-up**, and yaw resets to 0. The module must be still while it powers up; it is, if it powers with the diff --git a/docs/impl/reports/PL2303-DRIVER.md b/docs/impl/reports/PL2303-DRIVER.md new file mode 100644 index 0000000..3a0c111 --- /dev/null +++ b/docs/impl/reports/PL2303-DRIVER.md @@ -0,0 +1,41 @@ +--- +type: report +date: 2026-10-14 +--- +# PL2303 USB-serial driver, built out of tree + +The WT61 plus (the IMU) sits behind a USB-UART adapter, and its enclosure is designed +around a **PL2303GC** (`067b:23a3`). JetPack's kernel ships `CONFIG_USB_SERIAL_PL2303` +unset: of the plain USB-UART drivers it has only `cp210x` and `ftdi_sio`. The adapter +enumerated but got no `ttyUSB`. Built the way `qmi_wwan` is ([SIM7600-SETUP](SIM7600-SETUP.md#rebuilding-qmi_wwan-after-a-kernel-update)). + +## What is installed + +``` +~/infra/pl2303/ +├── Makefile # obj-m += pl2303.o ; `make install` → /lib/modules/$(uname -r)/misc/ + depmod +├── pl2303.c # linux-stable v5.15.148 drivers/usb/serial/pl2303.c +└── pl2303.h # linux-stable v5.15.148 drivers/usb/serial/pl2303.h (has PL2303_PRODUCT_ID_GC 0x23a3) +``` + +`/lib/modules/5.15.148-tegra/misc/pl2303.ko`, vermagic `5.15.148-tegra SMP preempt mod_unload modversions aarch64`, +depends on the in-tree `usbserial`. After `depmod` it loads through the USB modalias when the adapter is plugged +in: no `/etc/modules` entry. Built as the user against `/lib/modules/$(uname -r)/build`; only `make install` +needs sudo. + +The adapter's serial number is not unique, and nothing names it: svc-core's `imu` service finds the WT61 by +trying every USB-UART adapter (`cp210x`, `pl2303`, `ftdi_sio`, `ch341`), never the modem's `option` ports. + +## Rebuilding after a kernel update + +Like `pcan` and `qmi_wwan`, it does not survive a kernel update. Sign: the adapter is in `lsusb` but there is +no new `ttyUSB`, and `yukart/system/imu` says `no WT61 on []`. + +``` +cd ~/infra/pl2303 +# if the kernel's upstream base version changed, refresh the sources: +# V=v5.15.xxx; for f in pl2303.c pl2303.h; do +# curl -fL -o $f "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/plain/drivers/usb/serial/$f?h=$V"; done +make clean && make && sudo make install +sudo modprobe pl2303 +```