diff --git a/CHANGELOG.md b/CHANGELOG.md index bfb52cf2..41b2d1fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed help text for size parameter of read-flash subcommand +- Fixed port detection on `musl` when detection returns paths starting with `/dev/` - [cargo-espflash]: Always resolve package_id from metadata when finding bootloader and partition table (#632) ### Changed diff --git a/espflash/src/cli/serial.rs b/espflash/src/cli/serial.rs index c4ebbed5..993efd5d 100644 --- a/espflash/src/cli/serial.rs +++ b/espflash/src/cli/serial.rs @@ -111,7 +111,7 @@ fn find_serial_port(ports: &[SerialPortInfo], name: &str) -> Result Result> { use std::{ fs::{read_link, read_to_string}, - path::PathBuf, + path::{Path, PathBuf}, }; use serialport::UsbPortInfo; @@ -120,8 +120,12 @@ fn detect_usb_serial_ports(_list_all_ports: bool) -> Result> let ports = ports .into_iter() .filter_map(|port_info| { - // With musl, the paths we get are `/sys/class/tty/*` - let path = PathBuf::from(&port_info.port_name); + // With musl, the paths we get are `/sys/class/tty/*` or `/dev/*` + // In case of `/dev/*` we transform them into `/sys/class/tty/*` + let path = match AsRef::::as_ref(&port_info.port_name).strip_prefix("/dev/") { + Ok(rem) => PathBuf::from("/sys/class/tty/").join(rem), + Err(_) => PathBuf::from(&port_info.port_name), + }; // This will give something like: // `/sys/devices/pci0000:00/0000:00:07.1/0000:0c:00.3/usb5/5-3/5-3.1/5-3.1:1.0/ttyUSB0/tty/ttyUSB0`