|
28 | 28 | //! boot protocol.
|
29 | 29 | //!
|
30 | 30 | //! ```rust
|
31 |
| -//! |
32 | 31 | //! # extern crate linux_loader;
|
33 | 32 | //! # extern crate vm_memory;
|
34 | 33 | //! # use std::{io::{Cursor, Read}, fs::File};
|
|
47 | 46 | //!
|
48 | 47 | //! # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
49 | 48 | //! fn build_boot_params() -> (hvm_start_info, Vec<hvm_memmap_table_entry>) {
|
50 |
| -//! let mut start_info = hvm_start_info::default(); |
51 |
| -//! let memmap_entry = hvm_memmap_table_entry { |
52 |
| -//! addr: 0x7000, |
53 |
| -//! size: 0, |
54 |
| -//! type_: E820_RAM, |
55 |
| -//! reserved: 0, |
56 |
| -//! }; |
57 |
| -//! start_info.magic = XEN_HVM_START_MAGIC_VALUE; |
58 |
| -//! start_info.version = 1; |
59 |
| -//! start_info.nr_modules = 0; |
60 |
| -//! start_info.memmap_entries = 0; |
61 |
| -//! (start_info, vec![memmap_entry]) |
| 49 | +//! let mut start_info = hvm_start_info::default(); |
| 50 | +//! let memmap_entry = hvm_memmap_table_entry { |
| 51 | +//! addr: 0x7000, |
| 52 | +//! size: 0, |
| 53 | +//! type_: E820_RAM, |
| 54 | +//! reserved: 0, |
| 55 | +//! }; |
| 56 | +//! start_info.magic = XEN_HVM_START_MAGIC_VALUE; |
| 57 | +//! start_info.version = 1; |
| 58 | +//! start_info.nr_modules = 0; |
| 59 | +//! start_info.memmap_entries = 0; |
| 60 | +//! (start_info, vec![memmap_entry]) |
62 | 61 | //! }
|
63 | 62 | //!
|
64 | 63 | //! # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
65 | 64 | //! fn main() {
|
66 |
| -//! let guest_mem = |
67 |
| -//! GuestMemoryMmap::from_ranges( &[(GuestAddress(0x0), MEM_SIZE)]) .unwrap(); |
68 |
| -//! |
69 |
| -//! let mut elf_pvh_image = Vec::new(); |
70 |
| -//! let path = concat!(env!("CARGO_MANIFEST_DIR"), "/src/loader/x86_64/elf/test_elfnote.bin"); |
71 |
| -//! let mut file = File::open(path).unwrap(); |
72 |
| -//! file.read_to_end(&mut elf_pvh_image).unwrap(); |
73 |
| -//! |
74 |
| -//! // Load the kernel image. |
75 |
| -//! let loader_result = Elf::load( |
76 |
| -//! &guest_mem, None, &mut Cursor::new(&elf_pvh_image), None |
77 |
| -//! ).unwrap(); |
78 |
| -//! |
79 |
| -//! // Build boot parameters. |
80 |
| -//! let (mut start_info, memmap_entries) = build_boot_params(); |
81 |
| -//! // Address in guest memory where the `start_info` struct will be written. |
82 |
| -//! let start_info_addr = GuestAddress(0x6000); |
83 |
| -//! // Address in guest memory where the memory map will be written. |
84 |
| -//! let memmap_addr = GuestAddress(0x7000); |
85 |
| -//! start_info.memmap_paddr = memmap_addr.raw_value(); |
86 |
| -//! |
87 |
| -//! // Write boot parameters in guest memory. |
88 |
| -//! let mut boot_params = BootParams::new::<hvm_start_info>(&start_info, start_info_addr); |
89 |
| -//! boot_params.set_sections::<hvm_memmap_table_entry>(&memmap_entries, memmap_addr); |
90 |
| -//! PvhBootConfigurator::write_bootparams::<GuestMemoryMmap>(&boot_params, &guest_mem).unwrap(); |
| 65 | +//! let guest_mem = GuestMemoryMmap::from_ranges(&[(GuestAddress(0x0), MEM_SIZE)]).unwrap(); |
| 66 | +//! |
| 67 | +//! let mut elf_pvh_image = Vec::new(); |
| 68 | +//! let path = concat!( |
| 69 | +//! env!("CARGO_MANIFEST_DIR"), |
| 70 | +//! "/src/loader/x86_64/elf/test_elfnote.bin" |
| 71 | +//! ); |
| 72 | +//! let mut file = File::open(path).unwrap(); |
| 73 | +//! file.read_to_end(&mut elf_pvh_image).unwrap(); |
| 74 | +//! |
| 75 | +//! // Load the kernel image. |
| 76 | +//! let loader_result = |
| 77 | +//! Elf::load(&guest_mem, None, &mut Cursor::new(&elf_pvh_image), None).unwrap(); |
| 78 | +//! |
| 79 | +//! // Build boot parameters. |
| 80 | +//! let (mut start_info, memmap_entries) = build_boot_params(); |
| 81 | +//! // Address in guest memory where the `start_info` struct will be written. |
| 82 | +//! let start_info_addr = GuestAddress(0x6000); |
| 83 | +//! // Address in guest memory where the memory map will be written. |
| 84 | +//! let memmap_addr = GuestAddress(0x7000); |
| 85 | +//! start_info.memmap_paddr = memmap_addr.raw_value(); |
| 86 | +//! |
| 87 | +//! // Write boot parameters in guest memory. |
| 88 | +//! let mut boot_params = BootParams::new::<hvm_start_info>(&start_info, start_info_addr); |
| 89 | +//! boot_params.set_sections::<hvm_memmap_table_entry>(&memmap_entries, memmap_addr); |
| 90 | +//! PvhBootConfigurator::write_bootparams::<GuestMemoryMmap>(&boot_params, &guest_mem).unwrap(); |
91 | 91 | //! }
|
92 | 92 | //!
|
93 | 93 | //! # #[cfg(target_arch = "aarch64")]
|
94 | 94 | //! # fn main() {}
|
95 |
| -//! |
96 | 95 | //! ```
|
97 | 96 | //!
|
98 | 97 | //! [`BootConfigurator`]: trait.BootConfigurator.html
|
|
0 commit comments