A simple POSIX-based operating system for 64-bit computers
Go to file
2022-10-13 21:55:51 +02:00
apps init: Execute /bin/sym instead of /sys/config 2022-10-12 20:54:32 +02:00
initrd/sys Remove boot/font.psf from the initrd 2022-10-07 15:38:08 +02:00
kernel Almost there! 2022-10-13 21:55:51 +02:00
libs libc: Implement atexit() and _exit() 2022-10-12 20:41:55 +02:00
tools Make some shell scripts executable 2022-10-12 14:31:50 +02:00
.clang-format Ready. Set. Go! 2022-09-05 16:13:51 +02:00
.gdbconf Update .gdbconf to point to the non-stripped kernel executable 2022-10-12 10:17:49 +02:00
.gitignore Adjust build system to be more flexible and to work with the new toolchain 2022-10-02 12:44:32 +02:00
LICENSE Add LICENSE 2022-10-07 13:27:01 +00:00
luna.json Don't build such a small image 2022-09-26 17:55:16 +02:00
Makefile Rename SYS_version to SYS_getversion 2022-10-02 17:25:56 +02:00
README.md Update README.md 2022-10-12 19:07:28 +02:00

Luna

A simple kernel and userspace for the x86_64 platform, written mostly in C++.

Features

Not so much at the moment.

Setup

To build and run Luna, you will need to build a GCC Cross-Compiler and cross-binutils for x86_64-luna. (Yes, Luna is advanced enough that it can use its own OS-Specific Toolchain, instead of a bare metal target like x86_64-elf. It is the first of my OS projects to be able to do so. The patches for Binutils and GCC are binutils.patch and gcc.patch).

You should start by installing the required dependencies.

Then, run tools/setup.sh to build the toolchain.

This script will check whether you have the required versions of the toolchain already setup, and will skip building them if so. (This means that it is used by the build scripts to install the toolchain if it is missing before building, so you could skip running it manually.)

Please beware that building GCC and Binutils can take some time, depending on your machine.

Building

Yes, there is a Makefile sitting on the top level of the repository. It's tempting. But do not use it directly, since it depends on environment variables set by the build scripts.

There are a variety of scripts for building Luna.

tools/build.sh will build the kernel, libc and binaries.

tools/rebuild.sh will do a full rebuild of the kernel, libc and binaries.

tools/install.sh will install those to the system root and initial ramdisk.

tools/sync-libc.sh will install the libc headers to the system root, build libc and install it.

tools/build-iso.sh will build, install, and make an ISO disk image named Luna.iso.

tools/build-debug.sh will rebuild the kernel with debug symbols and optimizations disabled, install, and make an ISO image. This script should only be used when you are going to be running the system with a debugger (such as GDB).

tools/build-stable-iso.sh does the same thing as build-iso.sh, but configures the kernel so that the version does not show the commit hash (used for stable versions).

tools/rebuild-iso.sh will do a clean rebuild, install, and make an ISO disk image.

In most cases, you should just use build-iso.sh.

Running

You should have QEMU installed.

You can choose between 3 run scripts:

tools/run.sh is the one you should use in most cases. It will build (only files that have changed since last build), install, make an ISO image, and run Luna in QEMU.

tools/rebuild-and-run.sh will rebuild, install, make an ISO, and run Luna in QEMU.

tools/debug.sh will run Luna in QEMU with a port open for GDB to connect to. (run tools/build-debug.sh, tools/gdb.sh, and then tools/debug.sh in a separate terminal for an optimal debugging experience)

Beware that running without hardware virtualization/with optimizations disabled may cause the kernel to behave differently, which is why I don't use it that often.

Essentially, since run.sh builds the toolchain if it hasn't been built, builds Luna if it hasn't been built, and runs it, you could just checkout this repo, run run.sh, and you're done. No need for the other scripts. Those are included for more fine-grained control/building step-by-step.

You can pass any arguments you want to the run scripts, and those will be forwarded to QEMU. Example: tools/run.sh -m 512M -net none -machine q35.

Prebuilt images

Prebuilt ISO images for every version can be found at pub.cloudapio.eu.

These images are built manually whenever I decide to make a new version, and thus don't reflect the latest changes on the main branch.

License

Luna is open-source and free software under the BSD-2 License.