mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
[boot] Create bootconfig to tell boot what to load
While bonnibel already had the concept of a manifest, which controls what goes into the built disk image, the bootloader still had filenames hard-coded. Now bonnibel creates a 'jsix_boot.dat' file that tells the bootloader what it should load. Changes include: - Modules have two new fields: location and description. location is their intended directory on the EFI boot volume. description is self-explanatory, and is used in log messages. - New class, boot::bootconfig, implements reading of jsix_boot.dat - New header, bootproto/bootconfig.h, specifies flags used in the manifest and jsix_boot.dat - New python module, bonnibel/manifest.py, encapsulates reading of the manifest and writing jsix_boot.dat - Syntax of the manifest changed slightly, including adding flags - Boot and Kernel target ccflags unified a bit (this was partly due to trying to get enum_bitfields to work in boot) - util::counted gained operator+= and new free function util::read<T>
This commit is contained in:
43
src/boot/bootconfig.h
Normal file
43
src/boot/bootconfig.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/// \file bootconfig.h
|
||||
/// Definitions for reading the jsix bootconfig file
|
||||
#pragma once
|
||||
|
||||
#include <bootproto/bootconfig.h>
|
||||
#include <util/counted.h>
|
||||
|
||||
namespace uefi {
|
||||
struct boot_services;
|
||||
}
|
||||
|
||||
namespace boot {
|
||||
|
||||
using desc_flags = bootproto::desc_flags;
|
||||
|
||||
struct descriptor {
|
||||
desc_flags flags;
|
||||
wchar_t const *path;
|
||||
wchar_t const *desc;
|
||||
};
|
||||
|
||||
/// A bootconfig is a manifest of potential files.
|
||||
class bootconfig
|
||||
{
|
||||
public:
|
||||
using descriptors = util::counted<descriptor>;
|
||||
|
||||
/// Constructor. Loads bootconfig from the given buffer.
|
||||
bootconfig(util::buffer data, uefi::boot_services *bs);
|
||||
|
||||
inline const descriptor & kernel() { return m_kernel; }
|
||||
inline const descriptor & init() { return m_init; }
|
||||
descriptors programs() { return m_programs; }
|
||||
descriptors data() { return m_data; }
|
||||
|
||||
private:
|
||||
descriptor m_kernel;
|
||||
descriptor m_init;
|
||||
descriptors m_programs;
|
||||
descriptors m_data;
|
||||
};
|
||||
|
||||
} // namespace boot
|
||||
Reference in New Issue
Block a user