pub struct UbootShell {
pub tx: Option<Box<dyn Write + Send>>,
pub rx: Option<Box<dyn Read + Send>>,
/* private fields */
}Expand description
U-Boot shell communication interface.
UbootShell provides methods to interact with U-Boot bootloader
over a serial connection. It handles shell synchronization,
command execution, and file transfers.
§Example
use uboot_shell::UbootShell;
// Assuming tx and rx are Read/Write implementations
let mut shell = UbootShell::new(tx, rx).unwrap();
let result = shell.cmd("printenv").unwrap();Fields§
§tx: Option<Box<dyn Write + Send>>Transmit channel for sending data to U-Boot.
rx: Option<Box<dyn Read + Send>>Receive channel for reading data from U-Boot.
Implementations§
Source§impl UbootShell
impl UbootShell
Sourcepub fn new(
tx: impl Write + Send + 'static,
rx: impl Read + Send + 'static,
) -> Result<Self>
pub fn new( tx: impl Write + Send + 'static, rx: impl Read + Send + 'static, ) -> Result<Self>
Creates a new UbootShell instance and waits for U-Boot shell to be ready.
This function will block until it successfully detects the U-Boot shell prompt. It sends interrupt signals (Ctrl+C) to ensure the shell is in a clean state.
§Arguments
tx- A writable stream for sending data to U-Bootrx- A readable stream for receiving data from U-Boot
§Returns
Returns Ok(UbootShell) if the shell is successfully initialized,
or an Err if communication fails.
§Errors
Returns an error if the serial I/O fails or the prompt cannot be detected within the internal retry loop.
§Example
use uboot_shell::UbootShell;
let port = serialport::new("/dev/ttyUSB0", 115200).open().unwrap();
let rx = port.try_clone().unwrap();
let mut uboot = UbootShell::new(port, rx).unwrap();Sourcepub fn wait_for_reply(&mut self, val: &str) -> Result<String>
pub fn wait_for_reply(&mut self, val: &str) -> Result<String>
Waits for a specific string to appear in the U-Boot output.
Reads from the serial connection until the specified string is found.
§Arguments
val- The string to wait for
§Returns
Returns the accumulated output up to and including the matched string.
§Errors
Returns an error when the underlying read operation times out or fails.
Sourcepub fn cmd_without_reply(&mut self, cmd: &str) -> Result<()>
pub fn cmd_without_reply(&mut self, cmd: &str) -> Result<()>
Sourcepub fn cmd(&mut self, cmd: &str) -> Result<String>
pub fn cmd(&mut self, cmd: &str) -> Result<String>
Executes a command in U-Boot shell and returns the output.
This method sends the command, waits for completion, and verifies that the command executed successfully. It includes automatic retry logic (up to 3 attempts) for improved reliability.
§Arguments
cmd- The command string to execute
§Returns
Returns Ok(String) with the command output on success,
or an Err if the command fails after all retries.
§Errors
Returns an error if the command fails after retries or if serial I/O fails.
§Example
let output = uboot.cmd("printenv bootargs").unwrap();
println!("bootargs: {}", output);Sourcepub fn env(&mut self, name: impl Into<String>) -> Result<String>
pub fn env(&mut self, name: impl Into<String>) -> Result<String>
Gets the value of a U-Boot environment variable.
§Arguments
name- The name of the environment variable
§Returns
Returns Ok(String) with the variable value, or an Err if not found.
§Errors
Returns ErrorKind::NotFound if the variable is not set or cannot be read.
§Example
let bootargs = uboot.env("bootargs").unwrap();§Errors
Returns ErrorKind::NotFound if the variable is not set or cannot be read.
Sourcepub fn env_int(&mut self, name: impl Into<String>) -> Result<usize>
pub fn env_int(&mut self, name: impl Into<String>) -> Result<usize>
Gets a U-Boot environment variable as an integer.
Supports both decimal and hexadecimal (0x prefix) formats.
§Arguments
name- The name of the environment variable
§Returns
Returns Ok(usize) with the parsed integer value,
or an Err if not found or not a valid number.
§Errors
Returns ErrorKind::InvalidData if the value is not a valid integer.
Sourcepub fn loady(
&mut self,
addr: usize,
file: impl Into<PathBuf>,
on_progress: impl Fn(usize, usize),
) -> Result<String>
pub fn loady( &mut self, addr: usize, file: impl Into<PathBuf>, on_progress: impl Fn(usize, usize), ) -> Result<String>
Transfers a file to U-Boot memory using YMODEM protocol.
Uses the U-Boot loady command to receive files via YMODEM protocol.
The file will be loaded to the specified memory address.
§Arguments
addr- The memory address where the file will be loadedfile- Path to the file to transferon_progress- Callback function called with (bytes_sent, total_bytes)
§Returns
Returns Ok(String) with the U-Boot response on success.
§Errors
Returns an error if the file cannot be opened, the path has a non-UTF-8 file name, or if the serial transfer fails.
§Example
uboot.loady(0x80000000, "kernel.bin", |sent, total| {
println!("Progress: {}/{} bytes", sent, total);
}).unwrap();Trait Implementations§
Source§impl Read for UbootShell
impl Read for UbootShell
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)cursor. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read. Read more1.0.0 · Source§fn chain<R>(self, next: R) -> Chain<Self, R>
fn chain<R>(self, next: R) -> Chain<Self, R>
Source§impl Write for UbootShell
impl Write for UbootShell
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored)