fix(kernel), feat(Timekeeping): Rely on system OVMF firmware for emulation, Rudimentary time zone support
This commit is contained in:
+16
-24
@@ -30,23 +30,23 @@ run: run-$(ARCH)
|
|||||||
run-hdd: run-hdd-$(ARCH)
|
run-hdd: run-hdd-$(ARCH)
|
||||||
|
|
||||||
.PHONY: run-x86_64
|
.PHONY: run-x86_64
|
||||||
run-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
run-x86_64: $(IMAGE_NAME).iso
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M q35 \
|
-M q35 \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-cdrom $(IMAGE_NAME).iso \
|
-cdrom $(IMAGE_NAME).iso \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-hdd-x86_64
|
.PHONY: run-hdd-x86_64
|
||||||
run-hdd-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
run-hdd-x86_64: $(IMAGE_NAME).hdd
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M q35 \
|
-M q35 \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-hda $(IMAGE_NAME).hdd \
|
-hda $(IMAGE_NAME).hdd \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-aarch64
|
.PHONY: run-aarch64
|
||||||
run-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
run-aarch64: $(IMAGE_NAME).iso
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M virt \
|
-M virt \
|
||||||
-cpu cortex-a72 \
|
-cpu cortex-a72 \
|
||||||
@@ -54,12 +54,12 @@ run-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
|||||||
-device qemu-xhci \
|
-device qemu-xhci \
|
||||||
-device usb-kbd \
|
-device usb-kbd \
|
||||||
-device usb-mouse \
|
-device usb-mouse \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-cdrom $(IMAGE_NAME).iso \
|
-cdrom $(IMAGE_NAME).iso \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-hdd-aarch64
|
.PHONY: run-hdd-aarch64
|
||||||
run-hdd-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
run-hdd-aarch64: $(IMAGE_NAME).hdd
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M virt \
|
-M virt \
|
||||||
-cpu cortex-a72 \
|
-cpu cortex-a72 \
|
||||||
@@ -67,12 +67,12 @@ run-hdd-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
|||||||
-device qemu-xhci \
|
-device qemu-xhci \
|
||||||
-device usb-kbd \
|
-device usb-kbd \
|
||||||
-device usb-mouse \
|
-device usb-mouse \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-hda $(IMAGE_NAME).hdd \
|
-hda $(IMAGE_NAME).hdd \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-riscv64
|
.PHONY: run-riscv64
|
||||||
run-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
run-riscv64: $(IMAGE_NAME).iso
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M virt \
|
-M virt \
|
||||||
-cpu rv64 \
|
-cpu rv64 \
|
||||||
@@ -80,12 +80,12 @@ run-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
|||||||
-device qemu-xhci \
|
-device qemu-xhci \
|
||||||
-device usb-kbd \
|
-device usb-kbd \
|
||||||
-device usb-mouse \
|
-device usb-mouse \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-cdrom $(IMAGE_NAME).iso \
|
-cdrom $(IMAGE_NAME).iso \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-hdd-riscv64
|
.PHONY: run-hdd-riscv64
|
||||||
run-hdd-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
run-hdd-riscv64: $(IMAGE_NAME).hdd
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M virt \
|
-M virt \
|
||||||
-cpu rv64 \
|
-cpu rv64 \
|
||||||
@@ -93,12 +93,12 @@ run-hdd-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
|||||||
-device qemu-xhci \
|
-device qemu-xhci \
|
||||||
-device usb-kbd \
|
-device usb-kbd \
|
||||||
-device usb-mouse \
|
-device usb-mouse \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-hda $(IMAGE_NAME).hdd \
|
-hda $(IMAGE_NAME).hdd \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-loongarch64
|
.PHONY: run-loongarch64
|
||||||
run-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
run-loongarch64: $(IMAGE_NAME).iso
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M virt \
|
-M virt \
|
||||||
-cpu la464 \
|
-cpu la464 \
|
||||||
@@ -106,12 +106,12 @@ run-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso
|
|||||||
-device qemu-xhci \
|
-device qemu-xhci \
|
||||||
-device usb-kbd \
|
-device usb-kbd \
|
||||||
-device usb-mouse \
|
-device usb-mouse \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-cdrom $(IMAGE_NAME).iso \
|
-cdrom $(IMAGE_NAME).iso \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
.PHONY: run-hdd-loongarch64
|
.PHONY: run-hdd-loongarch64
|
||||||
run-hdd-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
run-hdd-loongarch64: $(IMAGE_NAME).hdd
|
||||||
qemu-system-$(ARCH) \
|
qemu-system-$(ARCH) \
|
||||||
-M virt \
|
-M virt \
|
||||||
-cpu la464 \
|
-cpu la464 \
|
||||||
@@ -119,7 +119,7 @@ run-hdd-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd
|
|||||||
-device qemu-xhci \
|
-device qemu-xhci \
|
||||||
-device usb-kbd \
|
-device usb-kbd \
|
||||||
-device usb-mouse \
|
-device usb-mouse \
|
||||||
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \
|
-bios /usr/share/ovmf/OVMF.fd \
|
||||||
-hda $(IMAGE_NAME).hdd \
|
-hda $(IMAGE_NAME).hdd \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
@@ -139,14 +139,6 @@ run-hdd-bios: $(IMAGE_NAME).hdd
|
|||||||
-hda $(IMAGE_NAME).hdd \
|
-hda $(IMAGE_NAME).hdd \
|
||||||
$(QEMUFLAGS)
|
$(QEMUFLAGS)
|
||||||
|
|
||||||
ovmf/ovmf-code-$(ARCH).fd:
|
|
||||||
mkdir -p ovmf
|
|
||||||
curl -Lo $@ https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/ovmf-code-$(ARCH).fd
|
|
||||||
case "$(ARCH)" in \
|
|
||||||
aarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=67108864 2>/dev/null;; \
|
|
||||||
riscv64) dd if=/dev/zero of=$@ bs=1 count=0 seek=33554432 2>/dev/null;; \
|
|
||||||
esac
|
|
||||||
|
|
||||||
limine/limine:
|
limine/limine:
|
||||||
rm -rf limine
|
rm -rf limine
|
||||||
git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1
|
git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1
|
||||||
|
|||||||
Submodule kernel/src/Libraries/flanterm updated: 4cacad1621...ea6a6cdecf
@@ -10,6 +10,29 @@
|
|||||||
using namespace Kt;
|
using namespace Kt;
|
||||||
|
|
||||||
void Timekeeping::Init(uint16_t Year, uint8_t Month, uint8_t Day, uint8_t Hour, uint8_t Minute, uint8_t Second) {
|
void Timekeeping::Init(uint16_t Year, uint8_t Month, uint8_t Day, uint8_t Hour, uint8_t Minute, uint8_t Second) {
|
||||||
|
/* Hardcode CET for now */
|
||||||
|
TimeZone CET = {
|
||||||
|
"Central European Time",
|
||||||
|
"CET",
|
||||||
|
1, /* UTC+1 */
|
||||||
|
0,
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
|
Kt::KernelLogStream(INFO, "Timekeeping Service") << "Setting time zone to " << CET.TZLongName << " (" << CET.TZShortName << ")";
|
||||||
|
|
||||||
|
Minute = Minute + CET.MinuteOffset;
|
||||||
|
Hour = Hour + CET.HourOffset;
|
||||||
|
if (Minute >= 60) {
|
||||||
|
Minute -= 60;
|
||||||
|
Hour += 1;
|
||||||
|
}
|
||||||
|
if (Hour >= 24) {
|
||||||
|
Hour -= 24;
|
||||||
|
Day += 1;
|
||||||
|
/* Note: No month/day overflow handling yet */
|
||||||
|
}
|
||||||
|
|
||||||
kcp::cstringstream minuteStream;
|
kcp::cstringstream minuteStream;
|
||||||
if (Minute < 10) {
|
if (Minute < 10) {
|
||||||
minuteStream << "0";
|
minuteStream << "0";
|
||||||
@@ -33,7 +56,8 @@ void Timekeeping::Init(uint16_t Year, uint8_t Month, uint8_t Day, uint8_t Hour,
|
|||||||
<< Hour << ":"
|
<< Hour << ":"
|
||||||
|
|
||||||
<< minuteStr << ":"
|
<< minuteStr << ":"
|
||||||
<< secondStr;
|
<< secondStr
|
||||||
|
<< " (" << CET.TZLongName << ")";
|
||||||
|
|
||||||
|
|
||||||
CString dateString = panelStr.c_str();
|
CString dateString = panelStr.c_str();
|
||||||
|
|||||||
@@ -7,6 +7,24 @@
|
|||||||
#include <CppLib/CString.hpp>
|
#include <CppLib/CString.hpp>
|
||||||
|
|
||||||
namespace Timekeeping {
|
namespace Timekeeping {
|
||||||
|
/*
|
||||||
|
Structure representing the attributes of a time zone; properties and time zone configuration will eventually
|
||||||
|
be loaded from disk/ramdisk.
|
||||||
|
*/
|
||||||
|
struct TimeZone {
|
||||||
|
/* Time zone naming scheme:
|
||||||
|
i.e. "Central European Time" / "CET"
|
||||||
|
*/
|
||||||
|
CString TZLongName;
|
||||||
|
CString TZShortName;
|
||||||
|
/* Hour offset from UTC */
|
||||||
|
int8_t HourOffset;
|
||||||
|
/* Minute offset from UTC */
|
||||||
|
int8_t MinuteOffset;
|
||||||
|
/* Is daylight saving time */
|
||||||
|
bool IsDST;
|
||||||
|
};
|
||||||
|
|
||||||
const CString Months[] = {
|
const CString Months[] = {
|
||||||
nullptr,
|
nullptr,
|
||||||
"January",
|
"January",
|
||||||
|
|||||||
Reference in New Issue
Block a user