summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2024-01-07 20:19:20 +0100
committerAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2024-01-07 20:19:24 +0100
commit0ee22520f50b4f006a554c79dd0e5f1d5d780d4d (patch)
tree0345608543d423f376909614700da4f11ace1b28 /util
parent30d6e8f850d2fe26fffdeef0c38fc627ef8bab9a (diff)
replace make with meson
Signed-off-by: Anna (navi) Figueiredo Gomes <navi@vlhl.dev>
Diffstat (limited to 'util')
-rwxr-xr-xutil/build_iso.sh6
-rw-r--r--util/grub.cfg3
-rw-r--r--util/linker.ld62
3 files changed, 71 insertions, 0 deletions
diff --git a/util/build_iso.sh b/util/build_iso.sh
new file mode 100755
index 0000000..0ca346f
--- /dev/null
+++ b/util/build_iso.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+mkdir -p "${1}/iso/boot/grub"
+cp "$2" "${1}/iso/boot/grub"
+cp "$3" "${1}/iso/boot/nrvn.bin"
+grub-mkrescue -o "$4" "${1}/iso"
diff --git a/util/grub.cfg b/util/grub.cfg
new file mode 100644
index 0000000..e1d7e5c
--- /dev/null
+++ b/util/grub.cfg
@@ -0,0 +1,3 @@
+menuentry "nrvn" {
+ multiboot /boot/nrvn.bin
+}
diff --git a/util/linker.ld b/util/linker.ld
new file mode 100644
index 0000000..87fb6c4
--- /dev/null
+++ b/util/linker.ld
@@ -0,0 +1,62 @@
+/* The bootloader will look at this image and start execution at the symbol
+ designated as the entry point. */
+ENTRY(bootstrap)
+
+/* Tell where the various sections of the object files will be put in the final
+ kernel image. */
+SECTIONS
+{
+ /* It used to be universally recommended to use 1MiB as a start offset,
+ as it was effectively guaranteed to be available under BIOS systems.
+ However, UEFI has made things more complicated, and experimental data
+ strongly suggests that 2M is a safer place to load. In 2016, a new
+ feature was introduced to the multiboot2 spec to inform bootloaders
+ that a kernel can be loaded anywhere within a range of addresses and
+ will be able to relocations to itself to run from such a loader-selected
+ address, in order to give the loader freedom in selecting a span of
+ memory which is verified to be available by the firmware, in order to
+ work around this issue. This does not use that feature, so 2M was
+ chosen as a safer option than the traditional 1M. */
+ . = 2M;
+
+ .bootstrap BLOCK(4K) : ALIGN(4K)
+ {
+ *(.multiboot)
+ *(.bootstrap)
+ }
+
+ /* First put the multiboot header, as it is required to be put very early
+ early in the image or the bootloader won't recognize the file format.
+ Next we'll put the .text section. */
+ .text BLOCK(4K) : ALIGN(4K)
+ {
+ *(.text)
+ }
+
+ /* Read-only data. */
+ .rodata BLOCK(4K) : ALIGN(4K)
+ {
+ *(.rodata)
+ }
+
+ /* Read-write data (initialized) */
+ .data BLOCK(4K) : ALIGN(4K)
+ {
+ *(.data)
+ }
+
+ /* Read-write data (uninitialized) and stack */
+ .bss BLOCK(4K) : ALIGN(4K)
+ {
+ *(COMMON)
+ *(.bss)
+ }
+
+ .end BLOCK(4K) : ALIGN(4K)
+ {
+ *(.end)
+ }
+
+ /* The compiler may produce other sections, by default it will put them in
+ a segment with the same name. Simply add stuff here as needed. */
+}