Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>i.MX DevtoolNew to Visual Studio Code? Get it now.
i.MX Devtool

i.MX Devtool

Inabox

| (0) | Free
Use a locally connected i.MX board (USB serial download for uuu, UARTs) from a remote devcontainer.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

i.MX Devtool

Use an i.MX board plugged into your own PC (the client) from a devcontainer running on a remote Docker host (the remote): uuu in the container flashes the board over its USB serial-download port, and the board's UARTs show up in the container as ttys.

client (Windows/Linux)                          remote (Linux + Docker)
┌───────────────────────────────┐               ┌──────────────────────────────────────┐
│ VS Code + imx-devtool (UI)    │   VS Code     │ container                            │
│  libusb ── USB/IP server ─────┼── port fwd ──►│  imx-devtool-agent ─► vhci_hcd ──► uuu│
│  serial ports ── byte pump ───┼──────────────►│  imx-devtool-agent ─► /dev/ttyIMX-A55 │
└───────────────────────────────┘               └──────────────────────────────────────┘
  • USB: the client extension implements the device side of USB/IP on top of libusb. Attach forwards every device uuu knows (boot ROM SDP/SDPS, SPL SDPU/SDPV, U-Boot fastboot), including the new devices the board enumerates while uuu runs. The agent hands each connection to the remote kernel's vhci_hcd, so in the container the device is a normal USB device and every uuu feature works unchanged. Detach gives the devices back to the client.
  • UART: configured serial ports are bridged to ptys in the container, linked as /dev/ttyIMX-<name> (or /tmp/imx-devtool/tty<name> without root/sudo).
  • Everything travels over VS Code's own port forwarding, so no SSH tunnels or open ports are needed and the client can sit behind NAT.

There are two extensions: imx-devtool runs on the client (UI extension) and depends on imx-devtool-agent, which VS Code installs in the container (workspace extension). To preinstall the agent in every container, add to devcontainer.json:

"customizations": { "vscode": { "extensions": ["inabox.imx-devtool-agent"] } }

Setup

Remote host (once)

sudo modprobe vhci-hcd
echo vhci-hcd | sudo tee /etc/modules-load.d/vhci-hcd.conf

Devcontainer

Add to the repo's .devcontainer/devcontainer.json:

// Merge into the repo's .devcontainer/devcontainer.json to let i.MX Devtool forward the board.
{
  "runArgs": [
    // vhci_hcd attach (sysfs) and access to hot-plugged USB devices
    "--privileged",
    // libusb/uuu only see devices appearing (board re-enumerating ROM -> SPL -> fastboot)
    // with the host's udev events: host network namespace + udev runtime dir
    "--network=host"
  ],
  "mounts": [
    "source=/dev/bus/usb,target=/dev/bus/usb,type=bind",
    "source=/run/udev,target=/run/udev,type=bind,readonly"
  ]
}

Why each setting is needed:

Setting Why
--privileged vhci attach goes through /sys, and hot-plugged USB devices need access
/dev/bus/usb bind mount device nodes of devices attached after the container started
--network=host + /run/udev mount libusb (uuu) learns about new devices from udev events, which only reach the container this way. Without both, uuu does not see the board re-enumerate (ROM → SPL → fastboot)

The agent runs vhci_hcd attach as root: either the container user is root, or it has passwordless sudo.

Client

  1. Install i.MX Devtool from the Marketplace.
  2. Open the devcontainer. The agent is installed into it automatically (if not, run i.MX Devtool: Install Agent in Container).
  3. Run i.MX Devtool: Check Container Setup.
  4. Run i.MX Devtool: Configure UART Ports... and pick the board's debug ports (A55, M33).

Client OS notes:

  • Windows: the boot ROM (HID) works through libusb's HID backend. If a device is reported as "no WinUSB/HID driver", install WinUSB for that VID:PID once (e.g. with Zadig). U-Boot fastboot normally gets WinUSB automatically.
  • Linux: your user needs access to the device, e.g. /etc/udev/rules.d/70-imx.rules: SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", MODE="0666" (repeat for 15a2 and 0525).
  • macOS: not supported yet.

Use

  • Status bar i.MX USB: click to attach/detach. While attached, put the board in serial download mode and run uuu ... in the container as usual.
  • Status bar i.MX UART: click to connect/disconnect, then picocom -b 115200 /dev/ttyIMX-A55 in the container. Set the baud rate in the UART configuration; baud changes made in the container are not passed on.
  • i.MX Devtool: Show Status / Show Log for troubleshooting.

Settings: imxDevtool.usb.extraDeviceFilters (extra vid:pid to forward; also see List Local USB Devices...), imxDevtool.usb.useDefaultFilters, imxDevtool.usb.attachOnStartup, imxDevtool.uart.ports, imxDevtool.uart.connectOnStartup.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft