summaryrefslogtreecommitdiff
path: root/doc/forum.osdev.org_viewtopic.php_f=2_t=33362.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/forum.osdev.org_viewtopic.php_f=2_t=33362.txt')
-rw-r--r--doc/forum.osdev.org_viewtopic.php_f=2_t=33362.txt1015
1 files changed, 1015 insertions, 0 deletions
diff --git a/doc/forum.osdev.org_viewtopic.php_f=2_t=33362.txt b/doc/forum.osdev.org_viewtopic.php_f=2_t=33362.txt
new file mode 100644
index 0000000..505d05b
--- /dev/null
+++ b/doc/forum.osdev.org_viewtopic.php_f=2_t=33362.txt
@@ -0,0 +1,1015 @@
+ #[1]Feed - OSDev.org [2]Feed - News [3]Feed - All forums [4]Feed - New
+ Topics [5]Feed - Active Topics [6]Feed - Forum - Announcements, Test
+ Requests, & Job openings [7]Feed - Topic - BOOTBOOT Multi-platform
+ Micro-kernel Loader
+
+OSDev.org
+
+ The Place to Start for Operating System Developers
+ [8]* Login [9] * Register [10]The OSDev.org Wiki - Got a question?
+ Search this first! [11]* FAQ [12] * Search
+ It is currently Sat Jan 13, 2024 5:46 pm
+
+ [13]View unanswered posts | [14]View active topics
+
+ [15]Board index » [16]Operating System Development » [17]Announcements,
+ Test Requests, & Job openings
+
+ All times are UTC - 6 hours
+
+[18]BOOTBOOT Multi-platform Micro-kernel Loader
+
+ Moderators: [19]AJ, [20]01000101, [21]carbonBased, [22]Candy,
+ [23]pcmattman, [24]JAAman, [25]Octocontrabass, [26]klange, [27]sortie,
+ [28]kmcguire, [29]thepowersgang, [30]chase, [31]Combuster, [32]Owen
+[33]Post new topic [34] Reply to topic Page 1 of 3
+ [ 39 posts ] [35]Go to page 1, [36]2, [37]3 [38]Next
+ [39]Print view [40]Previous topic | [41]Next topic
+ Author Message
+ bzt
+ Post subject: BOOTBOOT Multi-platform Micro-kernel Loader
+ [42]Post Posted: Fri Dec 07, 2018 7:34 pm
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ [43]BOOTBOOT Protocol
+ Unlike any existing boot loaders, this loader is not one big bloated
+ system. Quite the contrary, it's a set of several independent, very
+ thin implementations, all providing the same C/C++ compatible,
+ higher-half 64 bit environment on their corresponding platforms. By
+ very thin I mean really lightweight, no more than a few kilobytes each:
+ boot.bin (512 bytes), bootboot.bin (11k), bootboot.img (30k),
+ bootboot.efi (93k)
+ It is ideal for hobby OS developers, as it's easy to use and it's very
+ flexible. It's much easier to dealt with than GRUB, and also unlike
+ with Multiboot you won't need any long mode Assembly trampoline code
+ with dirty GDT and paging tricks in your kernel.
+ BOOTBOOT can load your higher half, 64 bit-only C/C++ kernel just as-is
+ without any hacks. The repository also contains full documentation in
+ MD and PDF formats, as well as small ANSI C mkboot utilities to help
+ you with the installation. It's a Free and Open Source Sotfware,
+ licensed under the terms of MIT license. If you want to use it as a
+ reference for your own boot loader, the PDF documentation has a
+ detailed description on which firmware interfaces have been used, and
+ also the sources are well commented.
+ The BOOTBOOT Protocol is very easy to integrate, as it has a totally
+ architecture agnostic interface. You just specify some object addresses
+ in your [44]linker script, and you're done. The information structure
+ is defined in a [45]C/C++ header file and can be used on all platforms.
+ It contains information such as boot date and time, timezone, frame
+ buffer dimension, platform independent memory map, initrd size,
+ pointers to detected system tables (efi, acpi, mp, smbios etc.). Unlike
+ other protocols, BOOTBOOT was written with forward-compatibility in
+ mind. That is, current implementations support static addresses for
+ those variables (Protocol Level 1), but it states that future versions
+ (Level 2) should read the symbol table of the kernel to find those
+ addresses. Kernels written for the Level 1 loaders will be able to boot
+ with the upcoming Level 2 loaders just out-of-the-box.
+ The loader is capable of loading monolithic kernels, but mainly focuses
+ on micro-kernels with an initrd. It can load the OS from several
+ different sources: from ROM, over serial line, from a GPT partition, or
+ from a file on a FAT16/32 GPT partition (usually ESP. To avoid
+ licensing issues with M$, it's limited to upper case 8+3 filenames).
+ The protocol also allows booting over network with TFTP, although the
+ reference implementations do not use that (not yet :-) ).
+ Current implementations support kernels in ELF64 and PE32+ formats for
+ the AArch64 and x86_64 architectures. As for the initrd, they support
+ - statically linked executables (for monolithic kernels and statically
+ linked micro-kernels like Minix)
+ - cpio (all variants: old hp, newc, and crc too. The latter is used by
+ the Linux kernel btw.)
+ - tar (POSIX ustar, a very beginner friendly format)
+ - SFS (both Brendan's and BenLunt's versions)
+ - James Molloy's initrd (I assume you're already familiar with his
+ tutorial)
+ - FS/Z (my operating system's native file system format)
+ - any archive or file system format, provided your kernel file is
+ contiguous and is the first executable in the initrd.
+ The initrd can be gzip compressed, or optionally encrypted (FS/Z only
+ feature).
+ The repository contains an example [46]hello world kernel that
+ demonstrates how to write strings and boxes on the frame buffer in an
+ architecture independent way using PSF2 fonts. You are free to use that
+ example kernel as a skeleton for starting your own kernel. Kernels
+ written in C++ are also supported, but you have to provide a small code
+ block at _start that calls your constructors (easiest way is to use a
+ linker script to create .text.init or .text.ctors sections or
+ .init_array table).
+ How to install
+ Please note BOOTBOOT is very flexible. What I describe here is just one
+ way, which I believe to be the most common use case for hobby OS
+ developers.
+ 1. create a disk image with GPT partitioning table ("dd if=/dev/zero
+ of=myimage.dd bs=1M count=256" and "fdisk myimage.dd")
+ 2. set the first partition's type to ESP, and format it with FAT16 or
+ FAT32 (fdisk's type 1, and use "mkfs.vfat -F x")
+ 3. mount that partition with a loop device ("sudo mount -o loop,user
+ myimage.dd somedir" or use "losetup"+"mount /dev/loop0")
+ 4. create a BOOTBOOT directory there ("mkdir somedir/BOOTBOOT")
+ 5. create an INITRD with your kernel in it (for example use "find . |
+ cpio -H hpodc -o | gzip >somedir/BOOTBOOT/INITRD", for monolithic
+ kernels, simply copy your kernel executable as INITRD).
+ 6. optionally create a text file named BOOTBOOT/CONFIG (will be parsed
+ by your kernel)
+ 7. copy bootboot.bin into that directory as BOOTBOOT/LOADER (I strongly
+ suggest to set the SYSTEM attribute for this file)
+ 8. unmount the disk image
+ 9. use the x86_64-bios/mkboot.c utility to install a (P)MBR sector on
+ your disk image ("./mkboot myimage.dd")
+ If you want more control, do the steps 1-6, and choose a loader
+ implementation for your platform and desired configuration (you can
+ also use multiple loaders in the same image to create multiplatform
+ bootable images). The documentation has detailed description of all of
+ these scenarios:
+ - Raspberry Pi 3 (AArch64)
+ - UEFI (x86_64)
+ - UEFI for embedded systems (x86_64, in ROM)
+ - GRUB Multiboot (x86_64)
+ - ISOLINUX / LILO / BOOTLIN / etc. (x86_64)
+ - Legacy BIOS boot with any arbitrary boot manager (x86_64, chainloaded
+ from VBR)
+ - Legacy BIOS boot with a single OS on a forward-compatible GPT disk
+ (x86_64, booted from MBR)
+ - Legacy BIOS for embedded systems (x86_64, in ROM)
+ - CDROM, in El Torito "no emulation" mode (x86_64, hybrid GPT/ISO9660
+ image)
+ For more information, read the documentation. Before you comment any
+ critism about this loader, please read the documentation. It's very
+ likely it can do what you think it can't do, as most features and
+ options are not mentioned in this brief introductory post.
+ Cheers,
+ bzt
+ [47]Top
+ [48] Profile
+
+ mihe
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [49]Post Posted: Sat Dec 15, 2018 3:33 am
+
+ Offline
+ Member
+ Member
+
+ Joined: Sun Oct 21, 2018 1:37 pm
+ Posts: 38
+ It looks very interesting, especially because I think I can find some
+ guidance for my project in some points where I a a bit stuck, or not
+ skilled enough to move forward comfortably, and you seem to cover.
+ Thanks for sharing this !
+ [50]Top
+ [51] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [52]Post Posted: Thu Feb 07, 2019 6:24 pm
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi All,
+ I proudly present to you the final release of BOOTBOOT Protocol.
+ I've finished co-processor (SSE, Neon) initialization and SMP support
+ on all platforms. With those the feature set is now complete, meaning
+ from now on I'll only commit bugfixes (if any) and ports for new
+ platforms. Specification is now frozen, no further modification on the
+ specification will take place.
+ Multi Processing was tricky to achive without an interface, but finally
+ I have decided to use the simplest method: the same kernel is started
+ on all cores, only with different stacks. BIOS platform uses LAPIC IPI
+ + SIPI (up to 256 cores) and PIT for sleeping. UEFI utilizes the newer
+ PI EFI_MP_SERVICES_PROTOCOL (up to 1024 cores). If there's a need, I
+ was thinking about implementing a fallback to the older
+ FirmwareMPService Protocol (but I couldn't test it, so I skipped). And
+ last but not least, on RPi, well SMP is just working out-of-the-box
+ (with fixed 4 cores) :-)
+ The bootboot structure had to be changed a bit, few fields were
+ rearranged and bootboot.numcores came in (up to 65535 cores). Otherwise
+ the structure is the same, 64 bytes architecture independent info, 64
+ bytes platform specific pointers (which already included ACPI and MP
+ pointers), and the rest is the platform independent memory map.
+ Naturally I have updated the PDF documentation as well, and I've
+ created an OSDev wiki page for [53]BOOTBOOT. Happy OS development and I
+ hope my loader will be useful to you too!
+ Cheers,
+ bzt
+ [54]Top
+ [55] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [56]Post Posted: Thu Apr 09, 2020 5:02 am
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi All,
+ Lots and lots (and lots) of testing on real hardware. I'd like to say
+ thanks to all the testers! Testing the multicore support under UEFI was
+ extremely helpful.
+ Some minor modifications had to be made: instead of PIT, the BIOS
+ version now uses the PS/2 port oscillator for delays. Also minor fixes
+ in Multiboot and Linux boot protocol support, they both work perfectly
+ now.
+ On Raspberry Pi, model 3 was working already, but now model 4 support
+ has been added too. Since the firmware code changed, multicore support
+ had to be changed a bit too, but now SMP works with the latest firmware
+ as well.
+ Furthermore, I've added [57]sample bootable images and a very simple
+ image creator tool, that can generate hybrid GPT/ISO9660 images with
+ your inird. I've also provided a Makefile with several rules for
+ testing (booting the images from ROM, via BIOS, via GRUB, from UEFI
+ CDROM etc. etc. etc.)
+ Cheers,
+ bzt
+ [58]Top
+ [59] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [60]Post Posted: Mon Jun 15, 2020 8:48 pm
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi All,
+ New features (sort of). Protocol level 2 is now implemented in the
+ reference implementations (UEFI and Raspberry Pi, BIOS remained at
+ level 1). This means you are no longer tied to static link addresses,
+ you are free to move them around (in the higher half -1G to 0 range).
+ The loader will parse your ELF or PE kernel's symbols to find the
+ addresses where to map the data. The affected labels:
+ * mmio - virtual address of the MMIO area (on platforms that supports
+ that),
+ * fb - virtual address of the linear framebuffer,
+ * bootboot - the main information structure,
+ * environment - the arguments to your kernel in an UTF-8 string
+ * your kernel's segment (using Elf_Phdr->p_vaddr and
+ PE_hdr->code_base).
+
+ There can be one loadable segment (concatenated code, data and bss
+ sections) in the kernel. With level 2, the size limit for this is
+ raised to 16M (in comparition level 1 has a limit of 2M for info,
+ environment, code, data, bss and stack). That must be enough for
+ monolithic kernels too. You must be careful where you put these,
+ because these might overlap, and there's absolutely no checks (it is
+ perfectly valid for a kernel to request mapping of bootboot struct and
+ the environment string into the middle of its bss section for example.)
+ The repo contains a simple, dependency-free image creator tool, mkimg.
+ With that now you can create ESP FAT partition images and hybrid,
+ bootable GPT disk / CDROM / DVD images. This means all disk generation
+ related issues can be solved using this single file utility, no third
+ party tools needed. Just like the loaders, you are free to use this
+ tool with your project.
+ And last but not least, besides of the C example kernel, now there's a
+ Rust example kernel that you can use as a skeleton for your own kernel.
+ Cheers,
+ bzt
+ [61]Top
+ [62] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [63]Post Posted: Thu Jun 18, 2020 4:06 am
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi All,
+ I've replaced the quick and dirty mkimg tool with a proper, fully
+ featured mkbootimg. This one is also dependency-free, with precompiled
+ single portable executables available for Windows, MacOSX and Linux.
+ It receives a JSON configuration file as input, describing the disk you
+ wish to create, and then it saves the resulting disk image. For
+ example:
+ Code:
+ {
+ "diskguid": "00000000-0000-0000-0000-000000000000",
+ "disksize": 128,
+ "align": 1024,
+ "config": "initrd.dir/sys/config",
+ "initrd": { "type": "tar", "gzip": true, "directory": "initrd.dir"
+ },
+ "iso9660": 1,
+ "partitions": [
+ { "type": "boot", "size": 16 },
+ { "type": "ntfs", "size": 16, "name": "Win Exchange" },
+ { "type": "ext4", "size": 16, "name": "Linux Exchange" },
+ { "type": "00000000-0000-0000-0000-000000000000", "size": 32,
+ "name": "MyOS usr", "file": "usrpart.bin" },
+ { "type": "00000000-0000-0000-0000-000000000000", "size": 32,
+ "name": "MyOS var", "file": "varpart.bin" }
+ ]
+ }
+ Numbers are in Megabytes, except "align", which is in Kilobytes (align
+ 0 means sector alignment for partitions). This tool can create:
+ * A compressed initrd image from a directory (currently supports cpio
+ and tar, but easily expandable)
+ * An ESP FAT boot partition with all the necessary files (including
+ the newly created initrd) and boot code in VBR
+ * An MBR / GPT / ISO9660 hybrid partitioning table with the boot
+ partition on it
+ * When creating a hybrid image, it also ensures that the root
+ directory, the fat table, and the clusters on the boot partition
+ are all 2048 bytes aligned
+ * Optionally it can add any number of partitions (well, up to 248),
+ and it can fill them up using partition images
+
+ As a bonus, it also checks your kernel for BOOTBOOT compatibility,
+ gives detailed error messages, and determines the architecture from
+ your executable. It has all the binaries included, so no additional
+ files needed (this includes the Raspberry Pi firmware files too, along
+ with the Broadcom licence).
+ Creating multiarch images also possible simply by using an array:
+ Code:
+ "initrd": { "type": "tar", "gzip": true, "directory": [
+ "initrd.x86", "initrd.arm" ] },
+ This will create two initrds, one for each arch and it will put both
+ loaders for them into the boot partition (the code is written in a way
+ that it can support many architectures, however there's only loader for
+ x86_64 and AArch64, so right now it is limited to two).
+ The generated images were tested with: FAT16/32: fsck.vfat, TianoCore
+ UEFI; GPT: fdisk and gdisk's verify function. All green. :-)
+ Hope this will be useful to some of you,
+ bzt
+ [64]Top
+ [65] Profile
+
+ Korona
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [66]Post Posted: Thu Jun 18, 2020 8:28 am
+
+ Offline
+ Member
+ Member
+
+ Joined: Thu May 17, 2007 1:27 pm
+ Posts: 999
+ bzt wrote:
+ There can be one loadable segment (concatenated code, data and bss
+ sections) in the kernel. With level 2, the size limit for this is
+ raised to 16M (in comparition level 1 has a limit of 2M for info,
+ environment, code, data, bss and stack). That must be enough for
+ monolithic kernels too. You must be careful where you put these,
+ because these might overlap, and there's absolutely no checks (it is
+ perfectly valid for a kernel to request mapping of bootboot struct and
+ the environment string into the middle of its bss section for example.)
+ Out of curiosity, why did you pick this design? Do you map that segment
+ as RWX? That prevents many useful sanity checking ("security") features
+ from working, in particular WP and NX. WP and NX have probably caught
+ more memory bugs in Managarm than any other measures combined. (I mean
+ sure, one can enable it retroactively by some linker script hacks but
+ that seems unnecessarily clunky for something that just amounts to
+ setting two bits in the bootloader).
+ _________________
+ [67]managarm: Microkernel-based OS capable of running a Wayland desktop
+ (Discord: [68]https://discord.gg/7WB6Ur3). My OS-dev projects:
+ [[69]mlibc: Portable C library for managarm, qword, Linux, Sigma, ...]
+ [[70]LAI: AML interpreter] [[71]xbstrap: Build system for OS
+ distributions].
+ [72]Top
+ [73] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [74]Post Posted: Thu Jun 18, 2020 10:58 am
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi,
+ Thanks for checking out! The answer is in the documentation, but thanks
+ for asking!
+ Korona wrote:
+ Out of curiosity, why did you pick this design? Do you map that segment
+ as RWX?
+ It uses one boot segment for several reasons:
+ First, for simplicity. This is also required by many other boot loaders
+ (all that works with raw binaries this is actually a must otherwise you
+ can't convert ELFs to raws).
+ Second, BOOTBOOT can load PE32+ kernels too, and PE doesn't have the
+ concept of multiple, configurable load segments (there's a segment
+ pointer for code and one for the data in the header, that's it).
+ Third, there's no point in overcomplicating because your kernel will
+ switch away from identity mapping and will use its paging tables as
+ soon as possible anyway.
+ Fourth, BOOTBOOT is a multiplatform loader, and it provides the same
+ environment on all platforms. It cannot and should not rely on specific
+ CPU features, it tries to keep it as minimal as possible so that it can
+ support more platforms. (For example AArch64 has WNX bit too, but x86
+ doesn't. If BOOTBOOT were about to utilize that, then it couldn't load
+ kernels on x86; not with the same environment that is).
+ The Multiboot specification is way too x86 related, and you simply
+ can't use that on other platforms. As a result, loaders on other
+ platforms create their own, unofficial and incompatible versions of the
+ Multiboot spec ([75]read this for example). I put a lot of effort in
+ the BOOTBOOT Specification so this can never happen to it. As it
+ focuses on the smallest common denominator among platforms, it's
+ environment should be available on all platforms, no need for tweaking
+ the spec.
+ Korona wrote:
+ That prevents many useful sanity checking ("security") features from
+ working, in particular WP and NX.
+ No, not really. My kernel, which is loaded using BOOTBOOT does take
+ advantage of both WP and NX security bits (and on AArch64 WNX too), so
+ it is doable just fine. From the BOOTBOOT User's Manual, in section
+ "Machine State":
+ Quote:
+ If a kernel wants to separate it's code on a read-only segment and data
+ on a non-executable segment for security, it
+ can override the page translation tables as soon as it gains control.
+ BOOTBOOT Protocol does only
+ handle one loadable segment for simplicity (called boot in the example
+ linker script, see Appendix).
+ Providing memory security is not a job for a bootloader. Your kernel
+ will drop identity paging and will use it's own tables anyway. It will
+ drop them for sure by the time it creates its first process. So why
+ should the loader complicate things? I like simple. This is similar how
+ GDT works (with Grub too). It is set up because it's needed, but your
+ kernel should set a known GDT according its needs as soon as possible
+ anyway.
+ In short, the bootloader's job is not to provide full functionality,
+ rather to provide the bare minimum to get the system going. For
+ example, BOOTBOOT allocates only 1k stack for your kernel per core,
+ because it doesn't want to tell you how you should organize your
+ memory. 1k is not enough for your kernel that's for sure, but it is
+ surely enough to set up paging and stacks the way your kernel wants
+ them, and that's about it.
+ Cheers,
+ bzt
+ [76]Top
+ [77] Profile
+
+ PeterX
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [78]Post Posted: Thu Jun 18, 2020 12:19 pm
+
+ Offline
+ Member
+ Member
+
+ Joined: Fri Nov 22, 2019 5:46 am
+ Posts: 590
+ Great job!
+ But why do you call it "micro-kernel" loader? It's seems like
+ unnecessary modesty to me. You could load nearly any kernel, don't you?
+ And what platforms is it available for so far? If I understood it
+ correctly: Legacy-BIOS PCs, UEFI PCs, RaspPi 3 and 4. Correct?
+ Greetings
+ Peter
+ [79]Top
+ [80] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [81]Post Posted: Thu Jun 18, 2020 7:36 pm
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ PeterX wrote:
+ Great job!
+ Thanks!
+ PeterX wrote:
+ But why do you call it "micro-kernel" loader? It's seems like
+ unnecessary modesty to me. You could load nearly any kernel, don't you?
+ Well, yes, it can load statically linked images, so it can load
+ monolithic kernels too. I call it micro-kernel loader because it has a
+ neat feature that no other boot loader: it loads an initrd into the
+ memory with a bunch of files, then it locates the kernel amongst them
+ (so the kernel is not a separate file as with GRUB, just a regular file
+ inside the initrd). This suits primarily the needs of a micro-kernel,
+ which requires to load several files on boot before it could access the
+ disks.
+ PeterX wrote:
+ And what platforms is it available for so far? If I understood it
+ correctly: Legacy-BIOS PCs, UEFI PCs, RaspPi 3 and 4. Correct?
+ Yes, for disks, USB storages and SD cards. Plus it can also boot from a
+ CDROM via El Torito (both legacy BIOS and UEFI), and from ROM (via BIOS
+ Boot Specification and under UEFI as Option ROM, this is useful for
+ embedded systems); you can load it as a Linux kernel (using the
+ Linux/x86 boot protocol, e.g. qemu -kernel), and last but not least,
+ via GRUB, because it supports Multiboot too. Check out
+ [82]https://gitlab.com/bztsrc/bootboot/tree/master/images, along with
+ the example images there's a Makefile with lots of qemu commands, one
+ for each boot option.
+ In the future if I could get decent documentation and my hands on a
+ board to test with, then I would like to support more. Beageboard is
+ definitely on the bucket list, for example. I was also thinking about
+ UltraSparc64, but as it's market is shrinking rapidly I don't think it
+ worth the effort any more. Making it to work with Macs also a
+ possibility (so far I had only one roadblock, I don't know how to get
+ the frame buffer address using UGA, but that's the only one thing.
+ Everything else works).
+ Greetings
+ Peter[/quote]
+ [83]Top
+ [84] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [85]Post Posted: Fri Jun 19, 2020 9:41 pm
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi All,
+ Just a little heads-up. I've upgraded the image creator:
+ * It's multilingual now and autodetects OS' language
+ * If initrd is given as an image file which is compressed, now that's
+ transparently uncompressed to look up the kernel inside
+ * New initrd formats has been added, it supports hpodc cpio, POSIX
+ ustar, James Molloy's initrd and FS/Z (in lack of an up-to-date
+ specification and with no available image creator I had to abandon
+ SFS. But if you somehow manage to create an image, you can include
+ it with the "file" directive and you should still be able to boot
+ from it.)
+ * Many JSON tags made optional, the tool now calculates as much
+ properties as it can. For example on a partition it's enough to
+ specify "type" and "file".
+ * You can also use the "directory" directive for partitions, meaning
+ you can create partition images from directories on-the-fly.
+ Currently supported: tar and FS/Z (easy to add new file system
+ drivers, see documentation). Could have added cpio and jamesm too,
+ but those play not well with 512 byte sectors.
+ * I've updated the FS API to inform it if the image is generated for
+ initrd or partition (this is needed for FS/Z, because it supports
+ gaps in files, which must be avoided in initrds)
+ * On platforms that supports it (that's basically all save Windows)
+ symlinks are also parsed and generated into initrds and partition
+ images. This depends on S_ISLNK macro and readlink() libc function.
+
+ Cheers,
+ bzt
+ [86]Top
+ [87] Profile
+
+ heemogoblin
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [88]Post Posted: Thu Jul 09, 2020 7:57 am
+
+ Offline
+
+ Joined: Sat Jun 27, 2020 8:00 am
+ Posts: 13
+ Dear All,
+ I am somewhat new to OS development and programming but am quite
+ competent with the theory and also the implementation of an OS. Since I
+ want my OS to make use of modern features I have decided to build it
+ for UEFI firmware and x86_64 architecture. Despite being able to write
+ a UEFI bootloader, I could not find any way to compile it and get it to
+ call my kernel_main. Then I decided to use a premade bootloader, and
+ have settled on your BOOTBOOT as it directly takes me to 64 bit mode
+ and wrks with UEFI. I have looked at the example kernel and have
+ compiled it to get myself an elf kernel.
+ Now here is the problem: I don't know how to boot it in virtualbox. To
+ be more specific here are some details:
+ - I have my kernel elf (the0s.x86_64.elf) in my Documents/OS/The \OS/
+ folder.
+ - I have downloaded all of the bootboot code and have it ready.
+ - I am interested in using the bootboot.efi loader for UEFI systems.
+ - I have tried straight-up creating a .img with disk utility and
+ partitioning it but that has problems:
+ - Whenever I make one, I can only edit one of its partitions.
+ - I can only place the bootboot efi code to the system partition and
+ unfortunately the other partition for my kernel is blocked. I have
+ tried many workarounds, none work.
+ - .imgs to virtualbox are floppy controllers and it is 2020.
+ - I compiled the mkbootimg and have checked my kernel. It is OK.
+ However I have no clue how to use that to create a .iso with uefi
+ compatibility and my kernel .elf at Documents/OS/The \OS/.
+ - I am quite confused about the config file. It says that the
+ kernel=sys/config - does that mean the kernel is at sys/config/<name>
+ or is the kernel called config and is at sys/ direcotry? Also it is in
+ a specially named partition?
+ I would ideally like please some instructions to create a .iso ideally
+ or .vmdk with UEFI booting and my kernel on it so I can test out my OS.
+ Any way will do, as long as it can run on ubuntu and will give me a
+ vmdk or .iso virtualbox will boot.
+ Also could you tell me if I can pass an EFI_SystemTable or a pointer to
+ one to my kernel entry point? I'd prefer to get my time via the Runtime
+ services GetTime function.
+ Apologies for being so naive, but I shall be incredibly grateful if you
+ could help me. Thanks in advance!
+ [89]Top
+ [90] Profile
+
+ Octocontrabass
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [91]Post Posted: Sat Jul 11, 2020 10:14 pm
+
+ Offline
+ Member
+ Member
+
+ Joined: Mon Mar 25, 2013 7:01 pm
+ Posts: 4978
+ You can use VBoxManage to convert raw disk images to a format
+ VirtualBox supports. [92]Here is the documentation.
+ I don't see why you're not able to access more than one partition on
+ your disk image, though.
+ [93]Top
+ [94] Profile
+
+ bzt
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [95]Post Posted: Sun Jul 12, 2020 5:17 am
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Thu Oct 13, 2016 4:55 pm
+ Posts: 1584
+ Hi,
+ Yes, @Octoronstabass is right, you can access more partitions.
+ heemogoblin wrote:
+ Dear All,
+ I am somewhat new to OS development and programming but am quite
+ competent with the theory and also the implementation of an OS. Since I
+ want my OS to make use of modern features I have decided to build it
+ for UEFI firmware and x86_64 architecture. Despite being able to write
+ a UEFI bootloader, I could not find any way to compile it and get it to
+ call my kernel_main. Then I decided to use a premade bootloader, and
+ have settled on your BOOTBOOT as it directly takes me to 64 bit mode
+ and wrks with UEFI. I have looked at the example kernel and have
+ compiled it to get myself an elf kernel.
+ Now here is the problem: I don't know how to boot it in virtualbox. To
+ be more specific here are some details:
+ You create an image, then you configure your VB machine to boot with
+ UEFI: "Detials" > "System" > "Motherboard" click "Enable EFI (special
+ OSes only)".
+ I'd recommend to use mkbootimg, that's what it is for. But if you want
+ to make it by hand, here are my answers.
+ heemogoblin wrote:
+ - I have my kernel elf (the0s.x86_64.elf) in my Documents/OS/The \OS/
+ folder.
+ Move it into an initrd folder. Your kernel will be loaded as part of
+ the initrd along with other files you want/need on boot.
+ heemogoblin wrote:
+ - I have downloaded all of the bootboot code and have it ready.
+ Good.
+ heemogoblin wrote:
+ - I am interested in using the bootboot.efi loader for UEFI systems.
+ For that, you'll need the following files:
+ EFI/BOOT/BOOTX64.EFI - move bootboot.efi here
+ BOOTBOOT/INITRD - the initrd image with your kernel in it, can be a tar
+ or cpio archive, optionally gzip compressed.
+ BOOTBOOT/CONFIG - optional, a configuration that will be passed to your
+ kernel. The loader uses only two keys if given, "screen=WxH" and
+ "kernel=elf_filename_inside_the_initrd" all the others are for your
+ kernel.
+ heemogoblin wrote:
+ - I have tried straight-up creating a .img with disk utility and
+ partitioning it but that has problems:
+ - Whenever I make one, I can only edit one of its partitions.
+ - I can only place the bootboot efi code to the system partition and
+ unfortunately the other partition for my kernel is blocked. I have
+ tried many workarounds, none work.
+ Not sure what disk utility you're using, but you should create a GPT
+ disk, with a partition that is FAT formatted and copy the three files
+ above to that system partition. Change the type to EFI System Partition
+ (this is important, otherwise EFI won't recognize it). The BOOTBOOT
+ User's Manual Appendix has an example how to use fdisk and mkfs.vfat
+ for this.
+ heemogoblin wrote:
+ - .imgs to virtualbox are floppy controllers and it is 2020.
+ I don't know where you get that, .img files are just images. For
+ example Raspberry OS contains an SD card image. My mkbootimg tool
+ creates a hybrid CDROM / disk image by that extension.
+ heemogoblin wrote:
+ - I compiled the mkbootimg and have checked my kernel. It is OK.
+ However I have no clue how to use that to create a .iso with uefi
+ compatibility and my kernel .elf at Documents/OS/The \OS/.
+ If you have compiled mkbootimg, then you don't need the boot loader
+ files, as it has them already (data.c). It is well documented, and
+ example configurations are provided. Basically you give it two
+ arguments:
+ Code:
+ ./mkbootimg config.json output.img
+ The configuration is described in detail in the README (there's an
+ example json in it), there's an example json in the source directory,
+ and in the [96]images directory you can find the actual json I've used
+ to create the example disk images, as well as a Makefile on how to
+ invoke it. If you want it to generate a hybrid ISO9660 image, that can
+ be used on CDROMs, then in the mkbootimg json configuration, use
+ "iso9660=true". Here's my mkbootimg.json:
+ Code:
+ {
+ "disksize": 128,
+ "config": "./config",
+ "initrd": { "type": "cpio", "gzip": true, "directory": "initrd" },
+ "iso9660": true,
+ "partitions": [
+ { "type": "boot", "size": 16 }
+ ]
+ }
+ This instructs mkbootimg that load the BOOTBOOT configuration from the
+ file "./config", create an initrd in gzipped cpio format from the
+ contents of the directory "initrd" (copy the0s.x86_64.elf there). Make
+ the image 128M in size and CDROM compatible, and generate one ESP
+ partition only (if you need it to generate more GPT records, just add
+ more elements to the "partitions" array, and you can specify a
+ partition image too with "file").
+ There's no need to create a filesystem on the boot partition, nor to
+ copy files there, the mkbootimg will take care all of that for you.
+ heemogoblin wrote:
+ - I am quite confused about the config file. It says that the
+ kernel=sys/config - does that mean the kernel is at sys/config/<name>
+ or is the kernel called config and is at sys/ direcotry?
+ I don't know where you get "kernel=sys/config". The "kernel" is the
+ name of your kernel inside the initrd image (under the specified initrd
+ directory). If you use mkbootimg, you'll have two config files:
+ * the json - describes the disk image you want to create
+ * BOOTBOOT config - this will be copied to the ESP partition, and it
+ is going to be parsed by the loader and your kernel during boot
+
+ In the latter you can specify the name of your kernel inside the initrd
+ archive with "kernel=the0s.x86_64.elf", but that's not necessary if
+ your elf kernel is the first executable in the archive.
+ heemogoblin wrote:
+ Also it is in a specially named partition?
+ Yes, the ESP is given a fixed name, "EFI System Partition".
+ heemogoblin wrote:
+ I would ideally like please some instructions to create a .iso ideally
+ or .vmdk with UEFI booting and my kernel on it so I can test out my OS.
+ Any way will do, as long as it can run on ubuntu and will give me a
+ vmdk or .iso virtualbox will boot.
+ The mkbootimg generates a disk image file. With "iso9660=true" it is
+ going to be a hybrid image, which you can simply rename to ".iso" and
+ it will work. For vmdk I'm not sure, I use vdi for VirtualBox. For
+ that, use the following command:
+ Code:
+ VBoxManage convertfromraw yourimage.img yourimage.vdi
+ Because this will generate a random UUID for the vdi, and VirtualBox is
+ extremely picky about UUIDs matching its configuration, I'd also
+ recommend to use the following:
+ Code:
+ BoxManage internalcommands sethduuid yourimage.vdi (some fix UUID)
+ heemogoblin wrote:
+ Also could you tell me if I can pass an EFI_SystemTable or a pointer to
+ one to my kernel entry point? I'd prefer to get my time via the Runtime
+ services GetTime function.
+ Again, described in great detail in the BOOTBOOT User's Manual. The
+ protocol maps an informational structure for your kernel, which
+ contains both the EFI_SystemTable pointer and both the time (which is
+ queried by the EFI GetTime service under UEFI).
+ heemogoblin wrote:
+ Apologies for being so naive, but I shall be incredibly grateful if you
+ could help me. Thanks in advance!
+ You should read the documentation first :-) Both the READMEs and pdf
+ have all the answers for your questions. But sure, ask and I'll try to
+ answer.
+ Cheers,
+ bzt
+ [97]Top
+ [98] Profile
+
+ zaval
+ Post subject: Re: BOOTBOOT Multi-platform Micro-kernel Loader
+ [99]Post Posted: Sun Jul 12, 2020 4:03 pm
+
+ Offline
+ Member
+ Member
+ User avatar
+
+ Joined: Fri Feb 17, 2017 4:01 pm
+ Posts: 633
+ Location: Ukraine, Bachmut
+ Quote:
+ Despite being able to write a UEFI bootloader, I could not find any way
+ to compile it and get it to call my kernel_main. Then I decided to use
+ a premade bootloader, and have settled on your BOOTBOOT as it directly
+ takes me to 64 bit mode and wrks with UEFI. I have looked at the
+ example kernel and have compiled it to get myself an elf kernel.
+ does your religion allow you to use MSVC? if so, that's so easy to
+ compile your OS Loader with it as compiling "hello world". if it
+ doesn't, then *shrugs.
+ just for the note, despite bzt scares you, that you are required to
+ mark a FAT partition as ESP and use only GPT, it's not true. you can
+ create MBR with an ordinary FAT partition and be sure - it will be
+ recognized by UEFI. since you are only at the start, I'd go this way
+ (it's easier and maybe you'd have less troubles), actually, I do
+ exactly this way - I created a small .vhd with VBox - thanks god its
+ vhds are liked by diskpart (unlike qemu's). and created there a FAT
+ partition. UEFI recognizes the disk, FAT formatted volume, and, of
+ course, lets me start my OSL. either from the shell or from the Boot
+ Manager menu or, finally, by creating a Load Option with the latter, -
+ this way. Just don't forget to follow the guidelines and put your OSL
+ in \efi\<YourNameAsAnOsVendor> directory, each OSL in its own directory
+ (for the same architecture, I don't know why, but UEFI whimsically
+ demands this, despite it distinguishes images well by their paths,
+ which, of course, are different for two OSLs even lying in the same
+ directory).
+ Of course, when you create such a disk, vhd in my case, for an easy
+ access with diskpart, you can create 2 partitions or more. and then
+ your OSL may access your OS boot volume (where your OS resides) either
+ by using UEFI simple file system protocol and friends, if this is a FAT
+ volume (because, see, bzt, FAT is a required part by the standard, for
+ easening interoperability and osdevers lives :D and not for what you
+ fantasize) or using block I/O protocols given to you by UEFI for
+ reading disk sectors and then making FS related parsing in the OSL by
+ your own.
+ and at the end, again and again - on this stubborn placement in
+ \efi\boot\bootx64.efi. this is not a normal way of putting one's OSL.
+ it's just a last resort in an attempt to start something by the Boot
+ Manager on non-removable storages. if there is something else on the
+ same disk, this thing won't be even touched. I have no idea why people
+ don't look farther than this resort point. it is only somewhat and
+ questionably good for removable storages, when you are going to install
+ something and flash this storage for a one shot. even then, it's not
+ necessary, and could mess up with something else, also blindly
+ demanding itself to be placed there (and then when you put that other
+ thing there, it overwrites the previous one and you find yoursefl in a
+ mess). every UEFI has a "load from file" option - you better place your
+ stuff in a personalized place and direct Boot Manager to it. it's more
+ to bzt with his bootboot. the first time user directs the Boot Manager
+ to load your bootboot, then, at the start, bootboot checks how it was
+ started (by analyzing BootCurrent variable) and if it's not from its
+ own Load Option, which is the case for the first start, asks a user if
+ they want to install bootboot to this machine. on "yes", you just
+ create a Load Option for bootboot by using SetVariable(), and that's
+ it! this is how it should have been done.
+ _________________
+ [100]ANT - NT-like OS for x64 and arm64.
+ [101]efify - UEFI for a couple of boards (mips and arm). suspended due
+ to lost of all the target park boards (russians destroyed our town).
+ [102]Top
+ [103] Profile
+
+ Display posts from previous: [All posts] Sort by [Post time]
+ [Ascending_] Go
+ [104]Post new topic [105] Reply to topic Page 1 of 3
+ [ 39 posts ] [106]Go to page 1, [107]2, [108]3 [109]Next
+
+ [110]Board index » [111]Operating System Development »
+ [112]Announcements, Test Requests, & Job openings
+
+ All times are UTC - 6 hours
+
+Who is online
+
+ Users browsing this forum: No registered users and 1 guest
+ You cannot post new topics in this forum
+ You cannot reply to topics in this forum
+ You cannot edit your posts in this forum
+ You cannot delete your posts in this forum
+ You cannot post attachments in this forum
+ Search for: ____________________ Go
+ Jump to: [ Announcements, Test Requests, & Job openings] Go
+
+ Powered by [113]phpBB © 2000, 2002, 2005, 2007 phpBB Group
+
+References
+
+ Visible links:
+ 1. https://forum.osdev.org/feed.php
+ 2. https://forum.osdev.org/feed.php?mode=news
+ 3. https://forum.osdev.org/feed.php?mode=forums
+ 4. https://forum.osdev.org/feed.php?mode=topics
+ 5. https://forum.osdev.org/feed.php?mode=topics_active
+ 6. https://forum.osdev.org/feed.php?f=2
+ 7. https://forum.osdev.org/feed.php?f=2&t=33362
+ 8. https://forum.osdev.org/./ucp.php?mode=login&sid=3552323bd691ba1e0995756313969b5b
+ 9. https://forum.osdev.org/./ucp.php?mode=register&sid=3552323bd691ba1e0995756313969b5b
+ 10. http://wiki.osdev.org/
+ 11. https://forum.osdev.org/./faq.php?sid=3552323bd691ba1e0995756313969b5b
+ 12. https://forum.osdev.org/./search.php?sid=3552323bd691ba1e0995756313969b5b
+ 13. https://forum.osdev.org/./search.php?search_id=unanswered&sid=3552323bd691ba1e0995756313969b5b
+ 14. https://forum.osdev.org/./search.php?search_id=active_topics&sid=3552323bd691ba1e0995756313969b5b
+ 15. https://forum.osdev.org/./index.php?sid=3552323bd691ba1e0995756313969b5b
+ 16. https://forum.osdev.org/./viewforum.php?f=16&sid=3552323bd691ba1e0995756313969b5b
+ 17. https://forum.osdev.org/./viewforum.php?f=2&sid=3552323bd691ba1e0995756313969b5b
+ 18. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&start=0&sid=3552323bd691ba1e0995756313969b5b
+ 19. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=1950&sid=3552323bd691ba1e0995756313969b5b
+ 20. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=3731&sid=3552323bd691ba1e0995756313969b5b
+ 21. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=155&sid=3552323bd691ba1e0995756313969b5b
+ 22. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=1902&sid=3552323bd691ba1e0995756313969b5b
+ 23. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=2477&sid=3552323bd691ba1e0995756313969b5b
+ 24. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=67&sid=3552323bd691ba1e0995756313969b5b
+ 25. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=14234&sid=3552323bd691ba1e0995756313969b5b
+ 26. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=11616&sid=3552323bd691ba1e0995756313969b5b
+ 27. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=12891&sid=3552323bd691ba1e0995756313969b5b
+ 28. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=117&sid=3552323bd691ba1e0995756313969b5b
+ 29. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=4287&sid=3552323bd691ba1e0995756313969b5b
+ 30. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=2&sid=3552323bd691ba1e0995756313969b5b
+ 31. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=1906&sid=3552323bd691ba1e0995756313969b5b
+ 32. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=4866&sid=3552323bd691ba1e0995756313969b5b
+ 33. https://forum.osdev.org/./posting.php?mode=post&f=2&sid=3552323bd691ba1e0995756313969b5b
+ 34. https://forum.osdev.org/./posting.php?mode=reply&f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b
+ 35. https://forum.osdev.org/viewtopic.php?f=2&t=33362
+ 36. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b&start=15
+ 37. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b&start=30
+ 38. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b&start=15
+ 39. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&start=0&sid=3552323bd691ba1e0995756313969b5b&view=print
+ 40. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&view=previous&sid=3552323bd691ba1e0995756313969b5b
+ 41. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&view=next&sid=3552323bd691ba1e0995756313969b5b
+ 42. https://forum.osdev.org/./viewtopic.php?p=287331&sid=3552323bd691ba1e0995756313969b5b#p287331
+ 43. https://gitlab.com/bztsrc/bootboot
+ 44. https://gitlab.com/bztsrc/bootboot/blob/master/mykernel/link.ld
+ 45. https://gitlab.com/bztsrc/bootboot/blob/master/bootboot.h
+ 46. https://gitlab.com/bztsrc/bootboot/tree/master/mykernel
+ 47. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 48. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 49. https://forum.osdev.org/./viewtopic.php?p=287447&sid=3552323bd691ba1e0995756313969b5b#p287447
+ 50. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 51. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=18898&sid=3552323bd691ba1e0995756313969b5b
+ 52. https://forum.osdev.org/./viewtopic.php?p=288396&sid=3552323bd691ba1e0995756313969b5b#p288396
+ 53. https://wiki.osdev.org/BOOTBOOT
+ 54. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 55. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 56. https://forum.osdev.org/./viewtopic.php?p=305109&sid=3552323bd691ba1e0995756313969b5b#p305109
+ 57. https://gitlab.com/bztsrc/bootboot/-/tree/master/images
+ 58. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 59. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 60. https://forum.osdev.org/./viewtopic.php?p=306460&sid=3552323bd691ba1e0995756313969b5b#p306460
+ 61. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 62. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 63. https://forum.osdev.org/./viewtopic.php?p=306501&sid=3552323bd691ba1e0995756313969b5b#p306501
+ 64. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 65. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 66. https://forum.osdev.org/./viewtopic.php?p=306504&sid=3552323bd691ba1e0995756313969b5b#p306504
+ 67. https://github.com/managarm/managarm
+ 68. https://discord.gg/7WB6Ur3
+ 69. https://github.com/managarm/mlibc
+ 70. https://github.com/qword-os/lai
+ 71. https://github.com/managarm/xbstrap
+ 72. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 73. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=3647&sid=3552323bd691ba1e0995756313969b5b
+ 74. https://forum.osdev.org/./viewtopic.php?p=306507&sid=3552323bd691ba1e0995756313969b5b#p306507
+ 75. https://github.com/jncronin/rpi-boot/blob/master/MULTIBOOT-ARM
+ 76. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 77. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 78. https://forum.osdev.org/./viewtopic.php?p=306511&sid=3552323bd691ba1e0995756313969b5b#p306511
+ 79. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 80. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=25322&sid=3552323bd691ba1e0995756313969b5b
+ 81. https://forum.osdev.org/./viewtopic.php?p=306521&sid=3552323bd691ba1e0995756313969b5b#p306521
+ 82. https://gitlab.com/bztsrc/bootboot/tree/master/images
+ 83. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 84. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 85. https://forum.osdev.org/./viewtopic.php?p=306532&sid=3552323bd691ba1e0995756313969b5b#p306532
+ 86. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 87. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 88. https://forum.osdev.org/./viewtopic.php?p=307287&sid=3552323bd691ba1e0995756313969b5b#p307287
+ 89. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 90. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=25855&sid=3552323bd691ba1e0995756313969b5b
+ 91. https://forum.osdev.org/./viewtopic.php?p=307379&sid=3552323bd691ba1e0995756313969b5b#p307379
+ 92. https://www.virtualbox.org/manual/ch08.html#vboxmanage-convertfromraw
+ 93. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 94. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=14234&sid=3552323bd691ba1e0995756313969b5b
+ 95. https://forum.osdev.org/./viewtopic.php?p=307390&sid=3552323bd691ba1e0995756313969b5b#p307390
+ 96. https://gitlab.com/bztsrc/bootboot/tree/master/images
+ 97. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 98. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17273&sid=3552323bd691ba1e0995756313969b5b
+ 99. https://forum.osdev.org/./viewtopic.php?p=307402&sid=3552323bd691ba1e0995756313969b5b#p307402
+ 100. https://ant-upptech.sourceforge.io/?subject=osdev
+ 101. https://efify.sourceforge.io/
+ 102. https://forum.osdev.org/viewtopic.php?f=2&t=33362#wrapheader
+ 103. https://forum.osdev.org/./memberlist.php?mode=viewprofile&u=17546&sid=3552323bd691ba1e0995756313969b5b
+ 104. https://forum.osdev.org/./posting.php?mode=post&f=2&sid=3552323bd691ba1e0995756313969b5b
+ 105. https://forum.osdev.org/./posting.php?mode=reply&f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b
+ 106. https://forum.osdev.org/viewtopic.php?f=2&t=33362
+ 107. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b&start=15
+ 108. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b&start=30
+ 109. https://forum.osdev.org/./viewtopic.php?f=2&t=33362&sid=3552323bd691ba1e0995756313969b5b&start=15
+ 110. https://forum.osdev.org/./index.php?sid=3552323bd691ba1e0995756313969b5b
+ 111. https://forum.osdev.org/./viewforum.php?f=16&sid=3552323bd691ba1e0995756313969b5b
+ 112. https://forum.osdev.org/./viewforum.php?f=2&sid=3552323bd691ba1e0995756313969b5b
+ 113. http://www.phpbb.com/
+
+ Hidden links:
+ 115. https://forum.osdev.org/./index.php?sid=3552323bd691ba1e0995756313969b5b