* @brief 构造函数 * @param header fdt 数据地址 * @pre header 指向有效的 DTB 数据 * @post fdt_header_ 已初始化并通过校验 */
| 624 | * @post fdt_header_ 已初始化并通过校验 |
| 625 | */ |
| 626 | explicit KernelFdt(uint64_t header) |
| 627 | : fdt_header_(reinterpret_cast<fdt_header*>(header)) { |
| 628 | ValidateFdtHeader().or_else([](auto&& err) { |
| 629 | klog::Err("KernelFdt init failed: {}", err.message()); |
| 630 | while (true) { |
| 631 | cpu_io::Pause(); |
| 632 | } |
| 633 | return Expected<void>{}; |
| 634 | }); |
| 635 | |
| 636 | klog::Debug("Load dtb at [{:#X}], size [{:#X}]", |
| 637 | static_cast<uint64_t>(reinterpret_cast<uintptr_t>(fdt_header_)), |
| 638 | static_cast<uint64_t>(fdt32_to_cpu(fdt_header_->totalsize))); |
| 639 | } |
| 640 | |
| 641 | KernelFdt() = default; |
| 642 | KernelFdt(const KernelFdt&) = default; |