mirror of https://github.com/vinc/moros.git
Add memory dump command (#574)
* Add memory dump command * Refactor disk help * Display binary size option in list help
This commit is contained in:
parent
521b30f63e
commit
10d9ba5833
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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(())
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue