#pl011 #arm #dtb #earlycon

no-std any-uart

Init early console from device tree, mostly for Arm

2 releases

Uses new Rust 2024

new 0.1.1 Mar 25, 2025
0.1.0 Mar 25, 2025

#2 in #pl011


Used in 2 crates (via sparreal-rt)

MIT license

12KB
288 lines

Any Uart

Check, Build and Test

A easy way to use early console in ARM.

Get the debug uart address from dtb, and some uart driver are supported.

supported uart

  • 8250 and 16550
  • pl011
  • aux_mini (raspi 4b)

example

use core::ptr::NonNull;

// your dtb address
let dtb_addr = 0usize as *mut u8

fn phys_to_virt(addr: usize) -> *mut u8 { 
    // phys addr to virt addr logic
    addr as *mut u8
}

if let Some((mut tx, _rx)) = any_uart::init(NonNull::new(dtb_addr).unwrap(), phys_to_virt) {
    let _ = tx.write_str_blocking("Hello, world!\n");
}

test

cargo install ostool
# test with qemu
cargo test -p hello --test test -- --show-output
# test with uboot
cargo test -p hello --test test -- --show-output --uboot

Dependencies

~135KB