misc: Add verbose config option

This commit is contained in:
mintsuki 2021-05-11 06:46:42 +02:00
parent 0eb5af44aa
commit f650e4b41b
23 changed files with 150 additions and 106 deletions

View File

@ -67,6 +67,7 @@ Some keys take *URIs* as values; these are described in the next section.
* `BACKGROUND_STYLE` - The style which will be used to display the background image. Either `tiled` or `centered`. Default is `tiled`.
* `BACKDROP_COLOUR` - When the background style is `centered`, this specifies the colour of the backdrop for parts of the screen not covered by the background image, in RRGGBB format.
* `BACKDROP_COLOR` - Alias of `BACKDROP_COLOUR`.
* `VERBOSE` - If set to `yes`, print additional information during boot. Defaults to not verbose.
*Locally assignable (non protocol specific)* keys are:
* `PROTOCOL` - The boot protocol that will be used to boot the kernel. Valid protocols are: `linux`, `stivale`, `stivale2`, `chainload`.

View File

@ -182,6 +182,28 @@ ext2-test:
bin/limine-install test.hdd
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.hdd -debugcon stdio
.PHONY: fat12-test
fat12-test:
$(MAKE) test-clean
$(MAKE) test.hdd
$(MAKE) limine-bios
$(MAKE) bin/limine-install
$(MAKE) -C test
rm -rf test_image/
mkdir test_image
sudo losetup -Pf --show test.hdd > loopback_dev
sudo partprobe `cat loopback_dev`
sudo mkfs.fat -F 12 `cat loopback_dev`p1
sudo mount `cat loopback_dev`p1 test_image
sudo mkdir test_image/boot
sudo cp -rv bin/* test/* test_image/boot/
sync
sudo umount test_image/
sudo losetup -d `cat loopback_dev`
rm -rf test_image loopback_dev
bin/limine-install test.hdd
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.hdd -debugcon stdio
.PHONY: fat16-test
fat16-test:
$(MAKE) test-clean
@ -277,8 +299,6 @@ full-hybrid-test:
rm -rf test_image/
mkdir -p test_image/boot
cp -rv bin/* test/* test_image/boot/
mkdir -p test_image/EFI/BOOT
cp -v bin/BOOTX64.EFI test_image/EFI/BOOT/
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -part_like_isohybrid -eltorito-alt-boot -e boot/limine-eltorito-efi.bin -no-emul-boot test_image/ -isohybrid-gpt-basdat -o test.iso
bin/limine-install test.iso
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio

View File

@ -22,7 +22,7 @@ Like Limine and want to support it? Donate Bitcoin to `bc1q00d59y75crpapw7qp8sea
### Supported filesystems
* ext2/3/4
* echfs
* FAT16/32
* FAT12/16/32
* ISO9660 (CDs/DVDs)
### Supported partitioning schemes

View File

@ -78,7 +78,7 @@ bool disk_read_sectors(struct volume *volume, void *buf, uint64_t block, size_t
void disk_create_index(void) {
size_t volume_count = 0;
print("Detected volumes:\n");
printv("Detected volumes:\n");
for (uint8_t drive = 0x80; ; drive++) {
if (drive == 0x90)
@ -177,7 +177,7 @@ void disk_create_index(void) {
block->guid_valid = true;
}
print(" %x\n", block->drive);
printv(" %x\n", block->drive);
volume_index[volume_index_i++] = block;
@ -190,7 +190,7 @@ void disk_create_index(void) {
if (ret == NO_PARTITION)
continue;
print(" %x:%u\n", block->drive, part);
printv(" %x:%u\n", block->drive, part);
volume_index[volume_index_i++] = p;
@ -343,7 +343,7 @@ void disk_create_index(void) {
volume_index = ext_mem_alloc(sizeof(struct volume) * volume_count);
print("Detected volumes:\n");
printv("Detected volumes:\n");
size_t drives_counter = 0x80, optical_counter = 0xe0;
@ -388,7 +388,7 @@ void disk_create_index(void) {
block->guid_valid = true;
}
print(" %x\n", block->drive);
printv(" %x\n", block->drive);
volume_index[volume_index_i++] = block;
@ -401,7 +401,7 @@ void disk_create_index(void) {
if (ret == NO_PARTITION)
continue;
print(" %x:%u\n", block->drive, part);
printv(" %x:%u\n", block->drive, part);
volume_index[volume_index_i++] = p;

View File

@ -35,11 +35,11 @@ struct edid_info_struct *get_edid_info(void) {
goto success;
fail:
print("edid: Could not fetch EDID data.\n");
printv("edid: Could not fetch EDID data.\n");
return NULL;
success:
print("edid: Success.\n");
printv("edid: Success.\n");
return buf;
}
@ -91,11 +91,11 @@ struct edid_info_struct *get_edid_info(void) {
goto success;
fail:
print("edid: Could not fetch EDID data.\n");
printv("edid: Could not fetch EDID data.\n");
return NULL;
success:
print("edid: Success.\n");
printv("edid: Success.\n");
return buf;
}

View File

@ -97,16 +97,16 @@ static bool try_mode(struct fb_info *ret, size_t mode, int width, int height, in
return false;
}
print("gop: Found matching mode %x, attempting to set...\n", mode);
printv("gop: Found matching mode %x, attempting to set...\n", mode);
if ((int)mode == current_video_mode) {
print("gop: Mode was already set, perfect!\n");
printv("gop: Mode was already set, perfect!\n");
} else {
status = uefi_call_wrapper(gop->SetMode, 2, gop, mode);
if (status) {
current_video_mode = -2;
print("gop: Failed to set video mode %x, moving on...\n", mode);
printv("gop: Failed to set video mode %x, moving on...\n", mode);
return false;
}
}
@ -181,15 +181,15 @@ bool init_gop(struct fb_info *ret,
target_width = edid_width;
target_height = edid_height;
target_bpp = 32;
print("gop: EDID detected screen resolution of %ux%u\n",
target_width, target_height);
printv("gop: EDID detected screen resolution of %ux%u\n",
target_width, target_height);
goto retry;
}
}
goto fallback;
} else {
print("gop: Requested resolution of %ux%ux%u\n",
target_width, target_height, target_bpp);
printv("gop: Requested resolution of %ux%ux%u\n",
target_width, target_height, target_bpp);
}
retry:

View File

@ -118,7 +118,7 @@ static int set_vbe_mode(uint16_t mode) {
bool init_vbe(struct fb_info *ret,
uint16_t target_width, uint16_t target_height, uint16_t target_bpp) {
print("vbe: Initialising...\n");
printv("vbe: Initialising...\n");
ret->default_res = false;
@ -127,11 +127,11 @@ bool init_vbe(struct fb_info *ret,
struct vbe_info_struct vbe_info;
get_vbe_info(&vbe_info);
print("vbe: Version: %u.%u\n", vbe_info.version_maj, vbe_info.version_min);
print("vbe: OEM: %s\n", (char *)rm_desegment(vbe_info.oem_seg, vbe_info.oem_off));
print("vbe: Graphics vendor: %s\n", (char *)rm_desegment(vbe_info.vendor_seg, vbe_info.vendor_off));
print("vbe: Product name: %s\n", (char *)rm_desegment(vbe_info.prod_name_seg, vbe_info.prod_name_off));
print("vbe: Product revision: %s\n", (char *)rm_desegment(vbe_info.prod_rev_seg, vbe_info.prod_rev_off));
printv("vbe: Version: %u.%u\n", vbe_info.version_maj, vbe_info.version_min);
printv("vbe: OEM: %s\n", (char *)rm_desegment(vbe_info.oem_seg, vbe_info.oem_off));
printv("vbe: Graphics vendor: %s\n", (char *)rm_desegment(vbe_info.vendor_seg, vbe_info.vendor_off));
printv("vbe: Product name: %s\n", (char *)rm_desegment(vbe_info.prod_name_seg, vbe_info.prod_name_off));
printv("vbe: Product revision: %s\n", (char *)rm_desegment(vbe_info.prod_rev_seg, vbe_info.prod_rev_off));
uint16_t *vid_modes = (uint16_t *)rm_desegment(vbe_info.vid_modes_seg,
vbe_info.vid_modes_off);
@ -155,15 +155,15 @@ bool init_vbe(struct fb_info *ret,
target_width = edid_width;
target_height = edid_height;
target_bpp = 32;
print("vbe: EDID detected screen resolution of %ux%u\n",
target_width, target_height);
printv("vbe: EDID detected screen resolution of %ux%u\n",
target_width, target_height);
goto retry;
}
}
goto fallback;
} else {
print("vbe: Requested resolution of %ux%ux%u\n",
target_width, target_height, target_bpp);
printv("vbe: Requested resolution of %ux%ux%u\n",
target_width, target_height, target_bpp);
}
retry:
@ -179,17 +179,17 @@ retry:
// We only support linear modes
if (!(vbe_mode_info.mode_attributes & (1 << 7)))
continue;
print("vbe: Found matching mode %x, attempting to set...\n", vid_modes[i]);
printv("vbe: Found matching mode %x, attempting to set...\n", vid_modes[i]);
if (vid_modes[i] == current_video_mode) {
print("vbe: Mode was already set, perfect!\n");
printv("vbe: Mode was already set, perfect!\n");
} else if (set_vbe_mode(vid_modes[i]) == 0x01) {
current_video_mode = -2;
print("vbe: Failed to set video mode %x, moving on...\n", vid_modes[i]);
printv("vbe: Failed to set video mode %x, moving on...\n", vid_modes[i]);
continue;
}
current_video_mode = vid_modes[i];
print("vbe: Framebuffer address: %x\n", vbe_mode_info.framebuffer_addr);
printv("vbe: Framebuffer address: %x\n", vbe_mode_info.framebuffer_addr);
ret->memory_model = vbe_mode_info.memory_model;
ret->framebuffer_addr = vbe_mode_info.framebuffer_addr;
ret->framebuffer_width = vbe_mode_info.res_x;

View File

@ -89,14 +89,18 @@ __attribute__((noreturn))
void stage3_common(void) {
volume_iterate_parts(boot_volume,
if (!init_config_disk(_PART)) {
print("Config file found and loaded.\n");
boot_volume = _PART;
break;
}
);
print("Boot drive: %x\n", boot_volume->drive);
print("Boot partition: %d\n", boot_volume->partition);
char *verbose_str = config_get_value(NULL, 0, "VERBOSE");
verbose = verbose_str != NULL && strcmp(verbose_str, "yes") == 0;
if (verbose) {
print("Boot drive: %x\n", boot_volume->drive);
print("Boot partition: %d\n", boot_volume->partition);
}
char *cmdline;
char *config = menu(&cmdline);

View File

@ -26,7 +26,7 @@ void *acpi_get_rsdp(void) {
}
if (!memcmp((char *)i, "RSD PTR ", 8)
&& !acpi_checksum((void *)i, sizeof(struct rsdp))) {
print("acpi: Found RSDP at %x\n", i);
printv("acpi: Found RSDP at %x\n", i);
return (void *)i;
}
}
@ -41,7 +41,7 @@ void acpi_get_smbios(void **smbios32, void **smbios64) {
for (size_t i = 0xf0000; i < 0x100000; i += 16) {
if (!memcmp((char *)i, "_SM_", 4)
&& !acpi_checksum((void *)i, *((uint8_t *)(i + 5)))) {
print("acpi: Found SMBIOS 32-bit entry point at %x\n", i);
printv("acpi: Found SMBIOS 32-bit entry point at %x\n", i);
*smbios32 = (void *)i;
break;
}
@ -50,7 +50,7 @@ void acpi_get_smbios(void **smbios32, void **smbios64) {
for (size_t i = 0xf0000; i < 0x100000; i += 16) {
if (!memcmp((char *)i, "_SM3_", 5)
&& !acpi_checksum((void *)i, *((uint8_t *)(i + 6)))) {
print("acpi: Found SMBIOS 64-bit entry point at %x\n", i);
printv("acpi: Found SMBIOS 64-bit entry point at %x\n", i);
*smbios64 = (void *)i;
break;
}
@ -74,7 +74,7 @@ void *acpi_get_rsdp(void) {
if (acpi_checksum(cur_table->VendorTable, sizeof(struct rsdp)) != 0)
continue;
print("acpi: Found RSDP at %X\n", cur_table->VendorTable);
printv("acpi: Found RSDP at %X\n", cur_table->VendorTable);
return (void *)cur_table->VendorTable;
}
@ -97,7 +97,7 @@ void acpi_get_smbios(void **smbios32, void **smbios64) {
*((uint8_t *)(cur_table->VendorTable + 5))) != 0)
continue;
print("acpi: Found SMBIOS 32-bit entry point at %X\n", cur_table->VendorTable);
printv("acpi: Found SMBIOS 32-bit entry point at %X\n", cur_table->VendorTable);
*smbios32 = cur_table->VendorTable;
@ -115,7 +115,7 @@ void acpi_get_smbios(void **smbios32, void **smbios64) {
*((uint8_t *)(cur_table->VendorTable + 6))) != 0)
continue;
print("acpi: Found SMBIOS 64-bit entry point at %X\n", cur_table->VendorTable);
printv("acpi: Found SMBIOS 64-bit entry point at %X\n", cur_table->VendorTable);
*smbios64 = cur_table->VendorTable;
@ -155,11 +155,11 @@ void *acpi_get_table(const char *signature, int index) {
if (!memcmp(ptr->signature, signature, 4)
&& !acpi_checksum(ptr, ptr->length)
&& cnt++ == index) {
print("acpi: Found \"%s\" at %x\n", signature, ptr);
printv("acpi: Found \"%s\" at %x\n", signature, ptr);
return ptr;
}
}
print("acpi: \"%s\" not found\n", signature);
printv("acpi: \"%s\" not found\n", signature);
return NULL;
}

View File

@ -18,6 +18,8 @@ EFI_MEMORY_DESCRIPTOR *efi_mmap = NULL;
UINTN efi_mmap_size = 0, efi_desc_size = 0, efi_desc_ver = 0;
#endif
bool verbose = false;
bool parse_resolution(int *width, int *height, int *bpp, const char *buf) {
int res[3] = {0};
@ -93,7 +95,7 @@ bool efi_exit_boot_services(void) {
efi_boot_services_exited = true;
print("efi: Exited boot services.\n");
printv("efi: Exited boot services.\n");
return true;
}

View File

@ -28,6 +28,8 @@ extern struct volume *boot_volume;
extern bool stage3_loaded;
#endif
extern bool verbose;
bool parse_resolution(int *width, int *height, int *bpp, const char *buf);
uint64_t sqrt(uint64_t a_nInput);

View File

@ -36,15 +36,12 @@ int init_config_disk(struct volume *part) {
#if defined (bios)
int init_config_pxe(void) {
struct tftp_file_handle cfg;
if (tftp_open(&cfg, 0, 69, "limine.cfg")
&& tftp_open(&cfg, 0, 69, "tomatboot.cfg")) {
if (tftp_open(&cfg, 0, 69, "limine.cfg")) {
return -1;
}
config_addr = ext_mem_alloc(cfg.file_size);
tftp_read(&cfg, config_addr, 0, cfg.file_size);
print("\nconfig: %s\n", config_addr);
return init_config(cfg.file_size);
}
#endif

View File

@ -297,17 +297,17 @@ int elf64_load(uint8_t *elf, uint64_t *entry_point, uint64_t *_slide, uint32_t a
memcpy(&hdr, elf + (0), sizeof(struct elf64_hdr));
if (strncmp((char *)hdr.ident, "\177ELF", 4)) {
print("Not a valid ELF file.\n");
print("elf: Not a valid ELF file.\n");
return -1;
}
if (hdr.ident[EI_DATA] != BITS_LE) {
print("Not a Little-endian ELF file.\n");
print("elf: Not a Little-endian ELF file.\n");
return -1;
}
if (hdr.machine != ARCH_X86_64) {
print("Not an x86_64 ELF file.\n");
print("elf: Not an x86_64 ELF file.\n");
return -1;
}
@ -378,17 +378,17 @@ int elf32_load(uint8_t *elf, uint32_t *entry_point, uint32_t alloc_type) {
memcpy(&hdr, elf + (0), sizeof(struct elf32_hdr));
if (strncmp((char *)hdr.ident, "\177ELF", 4)) {
print("Not a valid ELF file.\n");
print("elf: Not a valid ELF file.\n");
return -1;
}
if (hdr.ident[EI_DATA] != BITS_LE) {
print("Not a Little-endian ELF file.\n");
print("elf: Not a Little-endian ELF file.\n");
return -1;
}
if (hdr.machine != ARCH_X86_32) {
print("Not an x86_32 ELF file.\n");
print("elf: Not an x86_32 ELF file.\n");
return -1;
}

View File

@ -6,4 +6,6 @@
void print(const char *fmt, ...);
void vprint(const char *fmt, va_list args);
#define printv(FMT, ...) ({ if (verbose) print(FMT, ##__VA_ARGS__); })
#endif

View File

@ -159,7 +159,6 @@ static bool uri_tftp_dispatch(struct file_handle *fd, char *root, char *path) {
if (inet_pton(root, &ip)) {
panic("invalid ipv4 address: %s", root);
}
print("\nip: %x\n", ip);
}
struct tftp_file_handle *cfg = ext_mem_alloc(sizeof(struct tftp_file_handle));

View File

@ -78,11 +78,11 @@ static const char *memmap_type(uint32_t type) {
void print_memmap(struct e820_entry_t *mm, size_t size) {
for (size_t i = 0; i < size; i++) {
print("[%X -> %X] : %X <%s>\n",
mm[i].base,
mm[i].base + mm[i].length,
mm[i].length,
memmap_type(mm[i].type));
printv("[%X -> %X] : %X <%s>\n",
mm[i].base,
mm[i].base + mm[i].length,
mm[i].length,
memmap_type(mm[i].type));
}
}

View File

@ -385,8 +385,8 @@ void linux_load(char *config, char *cmdline) {
fread(kernel, setup_header, 0x1f1, setup_header_end - 0x1f1);
print("linux: Boot protocol: %u.%u\n",
setup_header->version >> 8, setup_header->version & 0xff);
printv("linux: Boot protocol: %u.%u\n",
setup_header->version >> 8, setup_header->version & 0xff);
if (setup_header->version < 0x203) {
panic("Linux protocols < 2.03 are not supported");
@ -397,10 +397,12 @@ void linux_load(char *config, char *cmdline) {
// vid_mode. 0xffff means "normal"
setup_header->vid_mode = 0xffff;
char *kernel_version = ext_mem_alloc(128);
if (setup_header->kernel_version != 0) {
fread(kernel, kernel_version, setup_header->kernel_version + 0x200, 128);
print("linux: Kernel version: %s\n", kernel_version);
if (verbose) {
char *kernel_version = ext_mem_alloc(128);
if (setup_header->kernel_version != 0) {
fread(kernel, kernel_version, setup_header->kernel_version + 0x200, 128);
print("linux: Kernel version: %s\n", kernel_version);
}
}
setup_header->type_of_loader = 0xff;
@ -413,7 +415,7 @@ void linux_load(char *config, char *cmdline) {
// load kernel
uintptr_t kernel_load_addr = 0x100000;
print("linux: Loading kernel...\n");
print("linux: Loading kernel `%s`...\n", kernel_path);
for (;;) {
if (memmap_alloc_range(kernel_load_addr,
ALIGN_UP(kernel->size - real_mode_code_size, 4096),

View File

@ -43,6 +43,8 @@ void stivale_load(char *config, char *cmdline) {
if (kernel_path == NULL)
panic("KERNEL_PATH not specified");
print("stivale: Loading kernel `%s`...\n", kernel_path);
if (!uri_open(kernel_file, kernel_path))
panic("Could not open kernel resource");
@ -73,7 +75,7 @@ void stivale_load(char *config, char *cmdline) {
}
// Check if 5-level paging is available
if (cpuid(0x00000007, 0, &eax, &ebx, &ecx, &edx) && (ecx & (1 << 16))) {
print("stivale: CPU has 5-level paging support\n");
printv("stivale: CPU has 5-level paging support\n");
level5pg = true;
}
@ -96,7 +98,7 @@ void stivale_load(char *config, char *cmdline) {
panic("stivale: Not 32 nor 64 bit x86 ELF file.");
}
print("stivale: %u-bit ELF file detected\n", bits);
printv("stivale: %u-bit ELF file detected\n", bits);
switch (ret) {
case 1:
@ -118,10 +120,12 @@ void stivale_load(char *config, char *cmdline) {
if (stivale_hdr.entry_point != 0)
entry_point = stivale_hdr.entry_point;
print("stivale: Kernel slide: %X\n", slide);
if (verbose) {
print("stivale: Kernel slide: %X\n", slide);
print("stivale: Entry point at: %X\n", entry_point);
print("stivale: Requested stack at: %X\n", stivale_hdr.stack);
print("stivale: Entry point at: %X\n", entry_point);
print("stivale: Requested stack at: %X\n", stivale_hdr.stack);
}
stivale_struct.module_count = 0;
uint64_t *prev_mod_ptr = &stivale_struct.modules;
@ -158,11 +162,13 @@ void stivale_load(char *config, char *cmdline) {
*prev_mod_ptr = REPORTED_ADDR((uint64_t)(size_t)m);
prev_mod_ptr = &m->next;
print("stivale: Requested module %u:\n", i);
print(" Path: %s\n", module_path);
print(" String: %s\n", m->string);
print(" Begin: %X\n", m->begin);
print(" End: %X\n", m->end);
if (verbose) {
print("stivale: Requested module %u:\n", i);
print(" Path: %s\n", module_path);
print(" String: %s\n", m->string);
print(" Begin: %X\n", m->begin);
print(" End: %X\n", m->end);
}
}
uint64_t rsdp = (uint64_t)(size_t)acpi_get_rsdp();
@ -181,7 +187,7 @@ void stivale_load(char *config, char *cmdline) {
stivale_struct.cmdline = REPORTED_ADDR((uint64_t)(size_t)cmdline);
stivale_struct.epoch = time();
print("stivale: Current epoch: %U\n", stivale_struct.epoch);
printv("stivale: Current epoch: %U\n", stivale_struct.epoch);
term_deinit();

View File

@ -65,6 +65,8 @@ void stivale2_load(char *config, char *cmdline, bool pxe, void *efi_system_table
if (kernel_path == NULL)
panic("KERNEL_PATH not specified");
print("stivale2: Loading kernel `%s`...\n", kernel_path);
if (!uri_open(kernel_file, kernel_path))
panic("Could not open kernel resource");
@ -95,7 +97,7 @@ void stivale2_load(char *config, char *cmdline, bool pxe, void *efi_system_table
}
// Check if 5-level paging is available
if (cpuid(0x00000007, 0, &eax, &ebx, &ecx, &edx) && (ecx & (1 << 16))) {
print("stivale2: CPU has 5-level paging support\n");
printv("stivale2: CPU has 5-level paging support\n");
level5pg = true;
}
@ -118,7 +120,7 @@ void stivale2_load(char *config, char *cmdline, bool pxe, void *efi_system_table
panic("stivale2: Not 32 nor 64 bit x86 ELF file.");
}
print("stivale2: %u-bit ELF file detected\n", bits);
printv("stivale2: %u-bit ELF file detected\n", bits);
switch (ret) {
case 1:
@ -140,10 +142,12 @@ void stivale2_load(char *config, char *cmdline, bool pxe, void *efi_system_table
if (stivale2_hdr.entry_point != 0)
entry_point = stivale2_hdr.entry_point;
print("stivale2: Kernel slide: %X\n", slide);
if (verbose) {
print("stivale2: Kernel slide: %X\n", slide);
print("stivale2: Entry point at: %X\n", entry_point);
print("stivale2: Requested stack at: %X\n", stivale2_hdr.stack);
print("stivale2: Entry point at: %X\n", entry_point);
print("stivale2: Requested stack at: %X\n", stivale2_hdr.stack);
}
strcpy(stivale2_struct.bootloader_brand, "Limine");
strcpy(stivale2_struct.bootloader_version, LIMINE_VERSION);
@ -229,11 +233,13 @@ void stivale2_load(char *config, char *cmdline, bool pxe, void *efi_system_table
m->begin = REPORTED_ADDR((uint64_t)(size_t)freadall(&f, STIVALE2_MMAP_KERNEL_AND_MODULES));
m->end = m->begin + f.size;
print("stivale2: Requested module %u:\n", i);
print(" Path: %s\n", module_path);
print(" String: %s\n", m->string);
print(" Begin: %X\n", m->begin);
print(" End: %X\n", m->end);
if (verbose) {
print("stivale2: Requested module %u:\n", i);
print(" Path: %s\n", module_path);
print(" String: %s\n", m->string);
print(" Begin: %X\n", m->begin);
print(" End: %X\n", m->end);
}
}
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
@ -291,7 +297,7 @@ void stivale2_load(char *config, char *cmdline, bool pxe, void *efi_system_table
tag->tag.identifier = STIVALE2_STRUCT_TAG_EPOCH_ID;
tag->epoch = time();
print("stivale2: Current epoch: %U\n", tag->epoch);
printv("stivale2: Current epoch: %U\n", tag->epoch);
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
}
@ -495,14 +501,16 @@ skip_modeset:;
//////////////////////////////////////////////
// List tags
//////////////////////////////////////////////
print("stivale2: Generated tags:\n");
struct stivale2_tag *taglist = (void*)(size_t)stivale2_struct.tags;
for (size_t i = 0; ; i++) {
print(" Tag #%u ID: %X\n", i, taglist->identifier);
if (taglist->next)
taglist = (void*)(size_t)taglist->next;
else
break;
if (verbose) {
print("stivale2: Generated tags:\n");
struct stivale2_tag *taglist = (void*)(size_t)stivale2_struct.tags;
for (size_t i = 0; ; i++) {
print(" Tag #%u ID: %X\n", i, taglist->identifier);
if (taglist->next)
taglist = (void*)(size_t)taglist->next;
else
break;
}
}
// Clear terminal for kernels that will use the stivale2 terminal

View File

@ -50,7 +50,7 @@ void pxe_init(void) {
panic("!pxe signature corrupted");
}
set_pxe_fp(bangpxe->rm_entry);
print("Successfully initialized pxe");
printv("pxe: Successfully initialized");
}
#endif

View File

@ -60,7 +60,7 @@ int tftp_open(struct tftp_file_handle *handle, uint32_t server_ip, uint16_t serv
strcpy((char*)open.name, name);
ret = pxe_call(TFTP_OPEN, ((uint16_t)rm_seg(&open)), (uint16_t)rm_off(&open));
if (ret) {
print("failed to open file %x or bad packet size", open.status);
print("tftp: Failed to open file %x or bad packet size", open.status);
return -1;
}
mtu = open.packet_size;
@ -86,7 +86,7 @@ int tftp_open(struct tftp_file_handle *handle, uint32_t server_ip, uint16_t serv
if (read.bsize < mtu && !slow) {
slow = true;
print("Server is sending the file in smaller packets (it sent %d bytes), download might take longer.\n", read.bsize);
print("tftp: Server is sending the file in smaller packets (it sent %d bytes), download might take longer.\n", read.bsize);
}
to_transfer -= read.bsize;
progress += read.bsize;

View File

@ -222,7 +222,7 @@ struct smp_information *init_smp(size_t header_hack_size,
continue;
}
print("smp: [xAPIC] Found candidate AP for bring-up. LAPIC ID: %u\n", lapic->lapic_id);
printv("smp: [xAPIC] Found candidate AP for bring-up. LAPIC ID: %u\n", lapic->lapic_id);
// Try to start the AP
if (!smp_start_ap(lapic->lapic_id, &gdtr, info_struct,
@ -232,7 +232,7 @@ struct smp_information *init_smp(size_t header_hack_size,
continue;
}
print("smp: Successfully brought up AP\n");
printv("smp: Successfully brought up AP\n");
(*cpu_count)++;
continue;
@ -259,7 +259,7 @@ struct smp_information *init_smp(size_t header_hack_size,
continue;
}
print("smp: [x2APIC] Found candidate AP for bring-up. LAPIC ID: %u\n", x2apic->x2apic_id);
printv("smp: [x2APIC] Found candidate AP for bring-up. LAPIC ID: %u\n", x2apic->x2apic_id);
// Try to start the AP
if (!smp_start_ap(x2apic->x2apic_id, &gdtr, info_struct,
@ -269,7 +269,7 @@ struct smp_information *init_smp(size_t header_hack_size,
continue;
}
print("smp: Successfully brought up AP\n");
printv("smp: Successfully brought up AP\n");
(*cpu_count)++;
continue;

View File

@ -2,6 +2,7 @@ DEFAULT_ENTRY=1
TIMEOUT=3
GRAPHICS=yes
MENU_FONT=boot:///boot/font.bin
VERBOSE=yes
THEME_BACKGROUND=60000000
THEME_MARGIN=64