Add memory dump command (#574)

* Add memory dump command

* Refactor disk help

* Display binary size option in list help
This commit is contained in:
Vincent Ollivier 2024-03-11 12:27:53 +01:00 committed by GitHub
parent 521b30f63e
commit 10d9ba5833
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 53 additions and 12 deletions

View File

@ -181,13 +181,15 @@ fn help() {
println!();
println!("{}Commands:{}", csi_title, csi_reset);
println!(
" {}list{} List detected disks",
csi_option, csi_reset
" {}erase <path>{} Erase disk", csi_option, csi_reset
);
println!(
" {}usage{} List disk usage",
csi_option, csi_reset
" {}format <path>{} Format disk", csi_option, csi_reset
);
println!(
" {}list{} List detected disks", csi_option, csi_reset
);
println!(
" {}usage{} List disk usage", csi_option, csi_reset
);
println!(" {}format <path>{} Format disk", csi_option, csi_reset);
println!(" {}erase <path>{} Erase disk", csi_option, csi_reset);
}

View File

@ -113,19 +113,23 @@ fn help() -> Result<(), ExitCode> {
println!();
println!("{}Options:{}", csi_title, csi_reset);
println!(
" {0}-a{1}, {0}--all{1} Show dot files",
" {0}-b{1}, {0}--binary-size{1} Use binary size",
csi_option, csi_reset
);
println!(
" {0}-n{1}, {0}--name{1} Sort by name",
" {0}-a{1}, {0}--all{1} Show dot files",
csi_option, csi_reset
);
println!(
" {0}-s{1}, {0}--size{1} Sort by size",
" {0}-n{1}, {0}--name{1} Sort by name",
csi_option, csi_reset
);
println!(
" {0}-t{1}, {0}--time{1} Sort by time",
" {0}-s{1}, {0}--size{1} Sort by size",
csi_option, csi_reset
);
println!(
" {0}-t{1}, {0}--time{1} Sort by time",
csi_option, csi_reset
);
Ok(())

View File

@ -1,10 +1,15 @@
use crate::api::console::Style;
use crate::api::process::ExitCode;
use crate::api::syscall;
use crate::api::unit::SizeUnit;
use crate::sys;
use core::num::ParseIntError;
use x86_64::PhysAddr;
pub fn main(args: &[&str]) -> Result<(), ExitCode> {
match *args.get(1).unwrap_or(&"") {
"d" | "dump" => dump(&args[2..]),
"u" | "usage" => usage(&args[2..]),
"f" | "format" => {
sys::fs::mount_mem();
@ -24,6 +29,29 @@ pub fn main(args: &[&str]) -> Result<(), ExitCode> {
}
}
fn parse_usize(s: &str) -> Result<usize, ParseIntError> {
if s.starts_with("0x") {
usize::from_str_radix(&s[2..], 16)
} else {
usize::from_str_radix(s, 10)
}
}
fn dump(args: &[&str]) -> Result<(), ExitCode> {
if args.len() != 2 {
return Err(ExitCode::UsageError);
}
let addr = parse_usize(args[0]).unwrap();
let size = parse_usize(args[1]).unwrap();
let phys_addr = PhysAddr::new(addr as u64);
let virt_addr = sys::mem::phys_to_virt(phys_addr);
let buf = unsafe {
core::slice::from_raw_parts(virt_addr.as_ptr(), size)
};
syscall::write(1, buf);
Ok(())
}
fn usage(args: &[&str]) -> Result<(), ExitCode> {
let mut unit = SizeUnit::None;
for arg in args {
@ -102,6 +130,13 @@ fn help() {
);
println!();
println!("{}Commands:{}", csi_title, csi_reset);
println!(" {}usage{} List memory usage", csi_option, csi_reset);
println!(" {}format{} Format RAM disk", csi_option, csi_reset);
println!(
" {}dump <addr> <size>{} Dump memory", csi_option, csi_reset
);
println!(
" {}format{} Format RAM disk", csi_option, csi_reset
);
println!(
" {}usage{} List memory usage", csi_option, csi_reset
);
}