Struct linux_loader::cmdline::Cmdline
source · [−]pub struct Cmdline { /* private fields */ }
Expand description
A builder for a kernel command line string that validates the string as it’s being built.
Examples
let mut cl = Cmdline::new(100).unwrap();
cl.insert_str("foobar").unwrap();
assert_eq!(cl.as_cstring().unwrap().as_bytes_with_nul(), b"foobar\0");
Implementations
sourceimpl Cmdline
impl Cmdline
sourcepub fn insert<T: AsRef<str>>(&mut self, key: T, val: T) -> Result<()>
pub fn insert<T: AsRef<str>>(&mut self, key: T, val: T) -> Result<()>
Validates and inserts a key-value pair representing a boot arg of the command line.
Arguments
key
- Key to be inserted in the command line string.val
- Value corresponding tokey
.
Examples
let mut cl = Cmdline::new(100).unwrap();
cl.insert("foo", "bar");
assert_eq!(cl.as_cstring().unwrap().as_bytes_with_nul(), b"foo=bar\0");
sourcepub fn insert_multiple<T: AsRef<str>>(&mut self, key: T, vals: &[T]) -> Result<()>
pub fn insert_multiple<T: AsRef<str>>(&mut self, key: T, vals: &[T]) -> Result<()>
Validates and inserts a key-value1,…,valueN pair representing a boot arg of the command line.
Arguments
key
- Key to be inserted in the command line string.vals
- Values corresponding tokey
.
Examples
let mut cl = Cmdline::new(100).unwrap();
cl.insert_multiple("foo", &["bar", "baz"]);
assert_eq!(
cl.as_cstring().unwrap().as_bytes_with_nul(),
b"foo=bar,baz\0"
);
sourcepub fn insert_init_args<T: AsRef<str>>(&mut self, slug: T) -> Result<()>
pub fn insert_init_args<T: AsRef<str>>(&mut self, slug: T) -> Result<()>
Inserts a string in the init args; returns an error if the string is invalid.
Arguments
slug
- String to be appended to the command line.
Examples
let mut cl = Cmdline::new(100).unwrap();
cl.insert_str("foo").unwrap();
cl.insert_init_args("bar").unwrap();
assert_eq!(
cl.as_cstring().unwrap().as_bytes_with_nul(),
b"foo -- bar\0"
);
sourcepub fn as_cstring(&self) -> Result<CString>
pub fn as_cstring(&self) -> Result<CString>
Returns a C compatible representation of the command line The Linux kernel expects a null terminated cmdline according to the source: https://elixir.bootlin.com/linux/v5.10.139/source/kernel/params.c#L179
To get bytes of the cmdline to be written in guest’s memory (including the null terminator) from this representation, use CString::as_bytes_with_nul()
Examples
let mut cl = Cmdline::new(20).unwrap();
cl.insert_str("foo").unwrap();
cl.insert_init_args("bar").unwrap();
assert_eq!(
cl.as_cstring().unwrap().as_bytes_with_nul(),
b"foo -- bar\0"
);
sourcepub fn add_virtio_mmio_device(
&mut self,
size: GuestUsize,
baseaddr: GuestAddress,
irq: u32,
id: Option<u32>
) -> Result<()>
pub fn add_virtio_mmio_device(
&mut self,
size: GuestUsize,
baseaddr: GuestAddress,
irq: u32,
id: Option<u32>
) -> Result<()>
Adds a virtio MMIO device to the kernel command line.
Multiple devices can be specified, with multiple virtio_mmio.device=
options. This
function must be called once per device.
The function appends a string of the following format to the kernel command line:
<size>@<baseaddr>:<irq>[:<id>]
.
For more details see the documentation (section virtio_mmio.device=
).
Arguments
size
- Size of the slot the device occupies on the MMIO bus.baseaddr
- Physical base address of the device.irq
- Interrupt number to be used by the device.id
- Optional platform device ID.
Examples
let mut cl = Cmdline::new(100).unwrap();
cl.add_virtio_mmio_device(1 << 12, GuestAddress(0x1000), 5, Some(42))
.unwrap();
assert_eq!(
cl.as_cstring().unwrap().as_bytes_with_nul(),
b"virtio_mmio.device=4K@0x1000:5:42\0"
);
sourcepub fn try_from(cmdline_raw: &str, capacity: usize) -> Result<Cmdline>
pub fn try_from(cmdline_raw: &str, capacity: usize) -> Result<Cmdline>
Tries to build a Cmdline
with a given capacity from a str. The format of the
str provided must be one of the followings:
->
Providing a str not following these rules might end up in undefined behaviour of
the resulting Cmdline
.
Arguments
cmdline_raw
- Contains boot params and init params of the cmdline.capacity
- Capacity of the cmdline.
Examples
let cl = Cmdline::try_from("foo -- bar", 100).unwrap();
assert_eq!(
cl.as_cstring().unwrap().as_bytes_with_nul(),
b"foo -- bar\0"
);