Skip to content

Commit bf4373f

Browse files
committed
wip: Make kernel changes build
1 parent ba75149 commit bf4373f

16 files changed

Lines changed: 147 additions & 68 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kernel/init_thread/Cargo.toml

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,41 +29,22 @@ qemu = [
2929

3030
[dependencies]
3131
aarch64-cpu = { workspace = true }
32-
# bit_field = { workspace = true }
33-
# bitflags = { workspace = true }
34-
# cfg-if = { workspace = true }
32+
cfg-if = { workspace = true }
3533
libaddress = { workspace = true }
3634
libboot = { workspace = true }
37-
# libconsole = { workspace = true }
3835
libcpu = { workspace = true }
3936
libexception = { workspace = true }
40-
# libkernel-state = { workspace = true }
4137
liblog = { workspace = true }
4238
liblocking = { workspace = true }
4339
libmachine = { workspace = true }
4440
libmapping = { workspace = true }
45-
# libplatform = { workspace = true }
4641
libprint = { workspace = true }
4742
libqemu = { workspace = true, optional = true }
4843
libobject = { workspace = true }
4944
libsyscall = { workspace = true }
50-
# libtime = { workspace = true }
5145
snafu = { workspace = true }
52-
# static_assertions = { workspace = true }
53-
# tock-registers = { workspace = true }
54-
# usize_conversions = { workspace = true }
55-
# ux = { workspace = true }
56-
#enum_dispatch = "0.3"
57-
#tap = "1.0" -- check no_std?
5846
shrinkwraprs = { version = "0.3", default-features = false }
59-
# dtb = "0.2" # Dec 2019 by Simon Prikhodko
60-
# Alternatives to dtb to look at:
61-
#device_tree = "1.1.0" # Jun 2016 by Marc Brinkmann
62-
#fdt-rs = "0.4.2" # Aug 2020 by Sean Wilson
63-
# fdt-rs latest 0.4.3 Jul 2021 by Sean Wilson -- interface is more basic than in dtb
64-
# @todo Added from_raw_pointer() finally
6547
fdt-rs = { version = "=0.4.4", default-features = false }
66-
# num = { version = "0.4", default-features = false }
6748

6849
[dev-dependencies]
6950
libexception = { workspace = true, features = ["test_build"] }

kernel/init_thread/src/boot_info.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
//! Insert sections that are either "free" or "used", disparate used sections can not overlap,
66
//! overlapping free sections are merged (unless they have different MemAttributes).
77
//!
8+
#[cfg(qemu)]
9+
use libqemu::semi_println;
810
use {
911
core::{cell::LazyCell, fmt},
1012
libaddress::PhysAddr,
1113
liblocking::IRQSafeNullLock,
1214
libmapping::{AccessPermissions, AttributeFields, MemAttributes},
13-
libqemu::semi_println,
1415
snafu::Snafu,
1516
};
1617

@@ -318,6 +319,7 @@ impl BootInfo {
318319
if region.is_empty() {
319320
return Ok(());
320321
}
322+
#[cfg(qemu)]
321323
semi_println!("BOOT_INFO.insert_free_region: {}", region);
322324
self.insert_raw(region)?;
323325
self.merge_free_regions();
@@ -347,11 +349,13 @@ impl BootInfo {
347349
if region.is_empty() {
348350
return Ok(());
349351
}
352+
#[cfg(qemu)]
350353
semi_println!("BOOT_INFO.insert_used_region: {}", region);
351354

352355
// Check for overlap with existing used regions.
353356
for slot in self.regions.iter() {
354357
if slot.is_used() && slot.intersects(&region) {
358+
#[cfg(qemu)]
355359
semi_println!(
356360
"BOOT_INFO.insert_used_region: ERROR overlaps existing used region: {}",
357361
slot
@@ -385,6 +389,7 @@ impl BootInfo {
385389
return Ok(());
386390
}
387391

392+
#[cfg(qemu)]
388393
semi_println!(
389394
"BOOT_INFO.insert_overlay_region: [{} - {}) {}",
390395
overlay_start,
@@ -642,6 +647,7 @@ impl BootInfo {
642647
// Add the remaining regions in largest to smallest order.
643648
self.insert_raw(rem_large)?;
644649
if self.insert_raw(rem_small).is_err() {
650+
#[cfg(qemu)]
645651
semi_println!(
646652
"BootInfo::alloc_region(): wasted {} bytes due to alignment, try to increase NUM_MEM_REGIONS",
647653
rem_small.size()
@@ -685,9 +691,11 @@ impl BootInfo {
685691

686692
/// Print all non-empty regions for debug purposes.
687693
pub fn dump(&self) {
694+
#[cfg(qemu)]
688695
semi_println!("BOOT_INFO: {} region(s):", self.count());
689696
for region in self.regions.iter() {
690697
if !region.is_empty() {
698+
#[cfg(qemu)]
691699
semi_println!(" {}", region);
692700
}
693701
}

kernel/init_thread/src/device_tree.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,12 +431,14 @@ pub struct FdtDumper<'a> {
431431
impl<'i, 'dt> FdtDumper<'_> {
432432
fn push_indent(&mut self) {
433433
for _ in 0..self.indent {
434+
#[cfg(qemu)]
434435
libqemu::semi_print!(" ");
435436
}
436437
}
437438

438439
fn dump_node_name(&mut self, name: &str) {
439440
self.push_indent();
441+
#[cfg(qemu)]
440442
libqemu::semi_println!("{name} {{");
441443
}
442444

@@ -454,12 +456,15 @@ impl<'i, 'dt> FdtDumper<'_> {
454456
fn dump_property(&mut self, prop: DevTreeIndexProp) -> DevTreeResult<()> {
455457
self.push_indent();
456458

459+
#[cfg(qemu)]
457460
libqemu::semi_print!("{}", prop.name()?);
458461

459462
if prop.length() == 0 {
463+
#[cfg(qemu)]
460464
libqemu::semi_println!(";");
461465
return Ok(());
462466
}
467+
#[cfg(qemu)]
463468
libqemu::semi_print!(" = ");
464469

465470
// Unsafe Ok - we're reinterpreting the data as expected.
@@ -468,31 +473,39 @@ impl<'i, 'dt> FdtDumper<'_> {
468473
if are_printable_strings(prop.iter_str()) {
469474
let mut iter = prop.iter_str();
470475
while let Some(s) = iter.next()? {
476+
#[cfg(qemu)]
471477
libqemu::semi_print!("\"{}\", ", s);
472478
}
473479
// let _ = self.dump.pop();
474480
// let _ = self.dump.pop();
475481
} else if prop.propbuf().len() % size_of::<u32>() == 0 {
482+
#[cfg(qemu)]
476483
libqemu::semi_print!("<");
477484
for val in prop.propbuf().chunks_exact(size_of::<u32>()) {
478485
// We use read_unaligned
479486
#[allow(clippy::cast_ptr_alignment)]
480487
let v = read_unaligned::<u32>(val.as_ptr() as *const u32);
481488
let v = u32::from_be(v);
489+
#[cfg(qemu)]
482490
libqemu::semi_print!("{:#010x} ", v);
483491
}
484492
// let _ = self.dump.pop(); // Pop off extra space
493+
#[cfg(qemu)]
485494
libqemu::semi_print!(">");
486495
} else {
496+
#[cfg(qemu)]
487497
libqemu::semi_print!("[");
488498
for val in prop.propbuf() {
499+
#[cfg(qemu)]
489500
libqemu::semi_print!("{:02x} ", val);
490501
}
491502
// let _ = self.dump.pop(); // Pop off extra space
503+
#[cfg(qemu)]
492504
libqemu::semi_print!("]");
493505
}
494506
}
495507

508+
#[cfg(qemu)]
496509
libqemu::semi_println!(";");
497510
Ok(())
498511
}
@@ -508,6 +521,7 @@ impl<'i, 'dt> FdtDumper<'_> {
508521
}
509522
self.indent -= 1;
510523
self.push_indent();
524+
#[cfg(qemu)]
511525
libqemu::semi_println!("}};");
512526
Ok(())
513527
}
@@ -518,17 +532,28 @@ impl<'i, 'dt> FdtDumper<'_> {
518532

519533
pub fn dump_metadata(&mut self) {
520534
let fdt = self.index.fdt();
535+
#[cfg(qemu)]
521536
libqemu::semi_println!("// magic:\t\t{:#x}", fdt.magic());
522537
let s = fdt.totalsize();
538+
#[cfg(qemu)]
523539
libqemu::semi_println!("// totalsize:\t\t{:#x} ({})", s, s);
540+
#[cfg(qemu)]
524541
libqemu::semi_println!("// off_dt_struct:\t{:#x}", fdt.off_dt_struct());
542+
#[cfg(qemu)]
525543
libqemu::semi_println!("// off_dt_strings:\t{:#x}", fdt.off_dt_strings());
544+
#[cfg(qemu)]
526545
libqemu::semi_println!("// off_mem_rsvmap:\t{:#x}", fdt.off_mem_rsvmap());
546+
#[cfg(qemu)]
527547
libqemu::semi_println!("// version:\t\t{:}", fdt.version());
548+
#[cfg(qemu)]
528549
libqemu::semi_println!("// last_comp_version:\t{:}", fdt.last_comp_version());
550+
#[cfg(qemu)]
529551
libqemu::semi_println!("// boot_cpuid_phys:\t{:#x}", fdt.boot_cpuid_phys());
552+
#[cfg(qemu)]
530553
libqemu::semi_println!("// size_dt_strings:\t{:#x}", fdt.size_dt_strings());
554+
#[cfg(qemu)]
531555
libqemu::semi_println!("// size_dt_struct:\t{:#x}", fdt.size_dt_struct());
556+
#[cfg(qemu)]
532557
libqemu::semi_println!();
533558
}
534559
}

kernel/init_thread/src/loader.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
// init_thread/src/loader.rs
22

3+
#[cfg(qemu)]
4+
use libqemu::semi_println;
35
use {
46
crate::{
57
embed::KERNEL,
68
memory::{Alloc, BootAllocator, KernelLayout, MemoryPermissions},
79
},
810
core::ptr,
911
libaddress::{PhysAddr, VirtAddr},
10-
libqemu::semi_println,
1112
};
1213

1314
/// Metadata for a kernel section
@@ -95,6 +96,7 @@ pub fn load_kernel(allocator: &mut BootAllocator) -> Result<KernelLayout, &'stat
9596
)
9697
.ok_or("Failed to allocate memory for kernel")?;
9798

99+
#[cfg(qemu)]
98100
semi_println!(
99101
"Nucleus is {total_pages} * 4K pages @ {:#016X}",
100102
phys_base.as_u64()
@@ -149,6 +151,7 @@ fn load_section(section: &LoadableSection, kernel_phys_base: PhysAddr) -> Result
149151
let offset = section.meta.offset_from_base(KERNEL.virt_base);
150152
let dest_phys = PhysAddr::new(kernel_phys_base.as_u64() + offset);
151153

154+
#[cfg(qemu)]
152155
semi_println!(
153156
"> section {}, copy {} bytes of {} bytes total to {:#016X}",
154157
section.meta.name,
@@ -184,6 +187,7 @@ fn zero_bss(bss: &SectionMeta, kernel_phys_base: PhysAddr) -> Result<(), &'stati
184187
let offset = bss.offset_from_base(KERNEL.virt_base);
185188
let dest_phys = PhysAddr::new(kernel_phys_base.as_u64() + offset);
186189

190+
#[cfg(qemu)]
187191
semi_println!(
188192
"> section {}, zero {} bytes at {:#016X}",
189193
bss.name,

0 commit comments

Comments
 (0)