From 6285517ef774027b4be2295aeecf4cfda0d9b994 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Mon, 27 May 2019 12:48:10 -0700 Subject: [PATCH] Rename Popcorn to jsix. See README.md for more information. --- LICENSE.md | 23 ++++++++++--------- README.md | 18 ++++++++++----- .../{popcorn.elf-gdb.py => jsix.elf-gdb.py} | 0 modules.yaml | 4 ++-- qemu.sh | 8 +++---- scripts/templates/build.ninja.j2 | 20 ++++++++-------- scripts/templates/exe.boot.j2 | 2 +- scripts/templates/target.host.j2 | 2 +- scripts/templates/target.user.j2 | 2 +- src/boot/console.cpp | 2 +- src/boot/guids.inc | 2 +- src/boot/main.cpp | 10 ++++---- src/include/kernel_args.h | 2 +- src/kernel/boot.s | 2 +- src/kernel/main.cpp | 6 ++--- src/kernel/memory_bootstrap.cpp | 22 +++++++++--------- src/libraries/initrd/include/initrd/initrd.h | 2 +- 17 files changed, 67 insertions(+), 60 deletions(-) rename assets/debugging/{popcorn.elf-gdb.py => jsix.elf-gdb.py} (100%) diff --git a/LICENSE.md b/LICENSE.md index 89c4b28..bed35d9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,8 +1,8 @@ -# Popcorn +# jsix -Popcorn itself is released under the terms of the MIT license: +jsix itself is released under the terms of the MIT license: -> Copyright © 2018 Justin C. Miller, https://devjustinian.com +> Copyright (c) 2018 Justin C. Miller, https://devjustinian.com > > > Permission is hereby granted, free of charge, to any person obtaining a copy @@ -25,11 +25,11 @@ Popcorn itself is released under the terms of the MIT license: # Included works -Popcorn includes and/or is derived from a number of other works, listed here. +jsix includes and/or is derived from a number of other works, listed here. ## Catch2 -Popcorn uses [Catch2](https://github.com/catchorg/Catch2) for testing. Catch2 is +jsix uses [Catch2](https://github.com/catchorg/Catch2) for testing. Catch2 is released under the terms of the Boost Software license: > Boost Software License - Version 1.0 - August 17th, 2003 @@ -58,7 +58,7 @@ released under the terms of the Boost Software license: ## cpptoml -Popcorn uses the [cpptoml](https://github.com/skystrife/cpptoml) library for +jsix uses the [cpptoml](https://github.com/skystrife/cpptoml) library for parsing TOML configuration files. cpptoml is released under the terms of the MIT license: @@ -83,8 +83,9 @@ MIT license: ## printf -Popcorn uses 's tiny [printf](https://github.com/mpaland/printf) library for its -`*printf()` functions, which is also released under the terms of the MIT license: +jsix uses Marco Paland's tiny [printf](https://github.com/mpaland/printf) +library for its `*printf()` functions, which is also released under the terms +of the MIT license: > The MIT License (MIT) > @@ -110,14 +111,14 @@ Popcorn uses 's tiny [printf](https://github.com/mpaland/printf) library for its ## GNU-EFI -Popcorn's UEFI bootloader initially used +jsix's UEFI bootloader initially used [GNU-EFI](https://gnu-efi.sourceforge.net), and still uses one file (the linker script for the bootloader) from that project. GNU-EFI claims to be released under the BSD license. Again, I could not find its specific license file, so I am reproducing a generic 3-clause BSD license (the most restrictive, so as not to assume any extra rights that may not actually be granted) for it here: -> Copyright © Nigel Croxon +> Copyright (c) Nigel Croxon > > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: @@ -146,5 +147,5 @@ to assume any extra rights that may not actually be granted) for it here: ## Intel EFI Application Toolkit -Popcorn's UEFI loader uses code from Intel's EFI Application toolkit. Relevant +jsix's UEFI loader uses code from Intel's EFI Application toolkit. Relevant code includes license statements at the top of each file. diff --git a/README.md b/README.md index 7460911..8e167ee 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# popcorn: A toy OS kernel +# jsix: A toy OS kernel -**popcorn** is the kernel for the hobby OS that I am currently building. It's +**jsix** is the kernel for the hobby OS that I am currently building. It's far from finished, or even being usable. Instead, it's a sandbox for me to play with kernel-level code and explore architectures. @@ -25,9 +25,15 @@ The design goals of the project are: temporarily) in some places to allow me to play around with the related hardware. +A note on the name: This kernel was originally named Popcorn, but I have since +discovered that the Popcorn Linux project is also developing a kernel with that +name, started around the same time as this project. So I've renamed this kernel +jsix (Always styled _jsix_ or `j6`, never capitalized) as an homage to L4, xv6, +and my wonderful wife. + ## Building -Popcorn uses the [Ninja][] build tool, and generates the build files for it +jsix uses the [Ninja][] build tool, and generates the build files for it with a custom tool called [Bonnibel][]. Bonnibel requires [Python 3][] and can be downloaded with `pip`: @@ -51,13 +57,13 @@ Requrirements: If you have `clang` and `curl` installed, runing the `scripts/build_sysroot_clang.sh` script will download and build a nasm/binutils/LLVM toolchain configured for building -Popcorn host binaries. +jsix host binaries. -### Building and running Popcorn +### Building and running jsix Once the toolchain has been set up, running Bonnibel's `pb` command will set up the build configuration, and `ninja -C build` will actually run the build. If you -have `qemu-system-x86_64` installed, the `qemu.sh` script will to run Popcorn +have `qemu-system-x86_64` installed, the `qemu.sh` script will to run jsix in QEMU `-nographic` mode. I personally run this either from a real debian amd64 testing/buster machine or diff --git a/assets/debugging/popcorn.elf-gdb.py b/assets/debugging/jsix.elf-gdb.py similarity index 100% rename from assets/debugging/popcorn.elf-gdb.py rename to assets/debugging/jsix.elf-gdb.py diff --git a/modules.yaml b/modules.yaml index 590e897..607a824 100644 --- a/modules.yaml +++ b/modules.yaml @@ -1,8 +1,8 @@ -name: Popcorn +name: jsix templates: scripts/templates modules: kernel: - output: popcorn.elf + output: jsix.elf target: host deps: - elf diff --git a/qemu.sh b/qemu.sh index cfca43d..2172729 100755 --- a/qemu.sh +++ b/qemu.sh @@ -35,13 +35,13 @@ fi if [[ -n $TMUX ]]; then if [[ -n $debug ]]; then - tmux split-window "gdb ${build}/popcorn.elf" & + tmux split-window "gdb ${build}/jsix.elf" & else tmux split-window -l 10 "sleep 1; telnet localhost 45454" & fi elif [[ $DESKTOP_SESSION = "i3" ]]; then if [[ -n $debug ]]; then - i3-msg exec i3-sensible-terminal -- -e "gdb ${PWD}/${build}/popcorn.elf" & + i3-msg exec i3-sensible-terminal -- -e "gdb ${PWD}/${build}/jsix.elf" & else i3-msg exec i3-sensible-terminal -- -e 'telnet localhost 45454' & fi @@ -50,12 +50,12 @@ fi exec qemu-system-x86_64 \ -drive "if=pflash,format=raw,readonly,file=${assets}/ovmf/x64/ovmf_code.fd" \ -drive "if=pflash,format=raw,file=${build}/${flash_name}.fd" \ - -drive "format=raw,file=${build}/popcorn.img" \ + -drive "format=raw,file=${build}/jsix.img" \ -monitor telnet:localhost:45454,server,nowait \ -smp 4 \ -m 512 \ -d mmu,int,guest_errors \ - -D popcorn.log \ + -D jsix.log \ -cpu Broadwell \ -M q35 \ -no-reboot \ diff --git a/scripts/templates/build.ninja.j2 b/scripts/templates/build.ninja.j2 index 26444ff..61d7088 100644 --- a/scripts/templates/build.ninja.j2 +++ b/scripts/templates/build.ninja.j2 @@ -50,16 +50,16 @@ build $builddir/ovmf_vars.fd : cp $srcroot/assets/ovmf/x64/ovmf_vars.fd build $builddir/ovmf_vars_d.fd : cp $srcroot/assets/ovmf/x64/ovmf_vars_d.fd name = ovmf_vars_d.fd -build $builddir/popcorn.elf | $builddir/popcorn.elf.debug : strip $builddir/host/popcorn.elf +build $builddir/jsix.elf | $builddir/jsix.elf.debug : strip $builddir/host/jsix.elf name = kernel -build $builddir/popcorn.dump : dump $builddir/host/popcorn.elf +build $builddir/jsix.dump : dump $builddir/host/jsix.elf name = kernel -build $builddir/popcorn.elf-gdb.py : cp ${srcroot}/assets/debugging/popcorn.elf-gdb.py +build $builddir/jsix.elf-gdb.py : cp ${srcroot}/assets/debugging/jsix.elf-gdb.py name = kernel debug python scripts -build $builddir/fatroot/popcorn.elf : cp $builddir/popcorn.elf +build $builddir/fatroot/jsix.elf : cp $builddir/jsix.elf name = kernel to FAT image build $builddir/fatroot/efi/boot/bootx64.efi : cp $builddir/boot/boot.efi @@ -69,18 +69,18 @@ build $builddir/fatroot/initrd.img : makerd ${srcroot}/assets/initrd.toml | $ ${builddir}/native/makerd $ ${builddir}/user/nulldrv -build $builddir/popcorn.img : makefat | $ +build $builddir/jsix.img : makefat | $ $builddir/fatroot/initrd.img $ - $builddir/fatroot/popcorn.elf $ + $builddir/fatroot/jsix.elf $ $builddir/fatroot/efi/boot/bootx64.efi - name = popcorn.img + name = jsix.img default $ $builddir/ovmf_vars.fd $ $builddir/ovmf_vars_d.fd $ - $builddir/popcorn.dump $ - $builddir/popcorn.elf-gdb.py $ - $builddir/popcorn.img + $builddir/jsix.dump $ + $builddir/jsix.elf-gdb.py $ + $builddir/jsix.img {% endblock %} # vim: ft=ninja et ts=4 sts=4 sw=4 diff --git a/scripts/templates/exe.boot.j2 b/scripts/templates/exe.boot.j2 index 7d69764..bb1e9b5 100644 --- a/scripts/templates/exe.boot.j2 +++ b/scripts/templates/exe.boot.j2 @@ -3,7 +3,7 @@ {{ super() }} ccflags = $ccflags $ - -DKERNEL_FILENAME=L\"popcorn.elf\" $ + -DKERNEL_FILENAME=L\"jsix.elf\" $ -DGNU_EFI_USE_MS_ABI $ -DHAVE_USE_MS_ABI $ -DEFI_DEBUG=0 $ diff --git a/scripts/templates/target.host.j2 b/scripts/templates/target.host.j2 index 413b1a7..e7cdf08 100644 --- a/scripts/templates/target.host.j2 +++ b/scripts/templates/target.host.j2 @@ -22,7 +22,7 @@ ccflags = $ccflags $ -g $ -mcmodel=large $ -D__ELF__ $ - -D__POPCORN__ $ + -D__JSIX__ $ -isystem${srcroot}/sysroot/include $ --sysroot="${srcroot}/sysroot" diff --git a/scripts/templates/target.user.j2 b/scripts/templates/target.user.j2 index a31e8dd..8a9a7af 100644 --- a/scripts/templates/target.user.j2 +++ b/scripts/templates/target.user.j2 @@ -21,7 +21,7 @@ ccflags = $ccflags $ -g $ -mcmodel=large $ -D__ELF__ $ - -D__POPCORN__ $ + -D__JSIX__ $ -isystem${srcroot}/sysroot/include $ --sysroot="${srcroot}/sysroot" diff --git a/src/boot/console.cpp b/src/boot/console.cpp index 19d2525..84add27 100644 --- a/src/boot/console.cpp +++ b/src/boot/console.cpp @@ -40,7 +40,7 @@ console::initialize(const wchar_t *version) CHECK_EFI_STATUS_OR_RETURN(status, "ClearScreen"); m_out->SetAttribute(m_out, EFI_LIGHTCYAN); - m_out->OutputString(m_out, (wchar_t *)L"Popcorn loader "); + m_out->OutputString(m_out, (wchar_t *)L"jsix loader "); m_out->SetAttribute(m_out, EFI_LIGHTMAGENTA); m_out->OutputString(m_out, (wchar_t *)version); diff --git a/src/boot/guids.inc b/src/boot/guids.inc index d925f5a..2a3c4ee 100644 --- a/src/boot/guids.inc +++ b/src/boot/guids.inc @@ -6,6 +6,6 @@ GUID(0x964e5b22,0x6459,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b, guid_simp GUID(0x09576e91,0x6d3f,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b, guid_device_path); GUID(0x8b843e20,0x8132,0x4852,0x90,0xcc,0x55,0x1a,0x4e,0x4a,0x7f,0x1c, guid_device_path_to_text); -GUID(0x10d0669c,0x9ec6,0x4268,0xbc,0x48,0xff,0x74,0x75,0x21,0xfe,0x07, guid_popcorn_vendor); +GUID(0x10d0669c,0x9ec6,0x4268,0xbc,0x48,0xff,0x74,0x75,0x21,0xfe,0x07, guid_jsix_vendor); // vim: ft=c diff --git a/src/boot/main.cpp b/src/boot/main.cpp index 52519bf..af1a5cb 100644 --- a/src/boot/main.cpp +++ b/src/boot/main.cpp @@ -51,15 +51,15 @@ detect_debug_mode(EFI_RUNTIME_SERVICES *run, kernel_args *header) { uint8_t debug = 0; UINTN var_size = sizeof(debug); -#ifdef __POPCORN_SET_DEBUG_UEFI_VAR__ - debug = __POPCORN_SET_DEBUG_UEFI_VAR__; +#ifdef __JSIX_SET_DEBUG_UEFI_VAR__ + debug = __JSIX_SET_DEBUG_UEFI_VAR__; uint32_t attrs = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS; status = run->SetVariable( var_name, - &guid_popcorn_vendor, + &guid_jsix_vendor, attrs, var_size, &debug); @@ -68,14 +68,14 @@ detect_debug_mode(EFI_RUNTIME_SERVICES *run, kernel_args *header) { status = run->GetVariable( var_name, - &guid_popcorn_vendor, + &guid_jsix_vendor, nullptr, &var_size, &debug); CHECK_EFI_STATUS_OR_RETURN(status, "detect_debug_mode::GetVariable"); if (debug) - header->flags |= POPCORN_FLAG_DEBUG; + header->flags |= JSIX_FLAG_DEBUG; return EFI_SUCCESS; } diff --git a/src/include/kernel_args.h b/src/include/kernel_args.h index f7300a6..959b2b1 100644 --- a/src/include/kernel_args.h +++ b/src/include/kernel_args.h @@ -7,7 +7,7 @@ #define DATA_HEADER_MAGIC 0x600dda7a #define DATA_HEADER_VERSION 1 -#define POPCORN_FLAG_DEBUG 0x00000001 +#define JSIX_FLAG_DEBUG 0x00000001 #pragma pack(push, 1) struct kernel_args { diff --git a/src/kernel/boot.s b/src/kernel/boot.s index 2fbc4da..336728d 100644 --- a/src/kernel/boot.s +++ b/src/kernel/boot.s @@ -1,4 +1,4 @@ -MAGIC equ 0x600db007 ; Popcorn OS header magic number +MAGIC equ 0x600db007 ; jsix OS header magic number section .header align 4 diff --git a/src/kernel/main.cpp b/src/kernel/main.cpp index b999451..565f07b 100644 --- a/src/kernel/main.cpp +++ b/src/kernel/main.cpp @@ -37,7 +37,7 @@ init_console() console *cons = new (&g_console) console(com1); cons->set_color(0x21, 0x00); - cons->puts("Popcorn OS "); + cons->puts("jsix OS "); cons->set_color(0x08, 0x00); cons->puts(GIT_VERSION " booting...\n"); @@ -47,7 +47,7 @@ init_console() void kernel_main(kernel_args *header) { - bool waiting = header && (header->flags && POPCORN_FLAG_DEBUG); + bool waiting = header && (header->flags && JSIX_FLAG_DEBUG); while (waiting); kutil::assert_set_callback(__kernel_assert); @@ -71,7 +71,7 @@ kernel_main(kernel_args *header) init_console(); - log::debug(logs::boot, " Popcorn header is at: %016lx", header); + log::debug(logs::boot, " jsix header is at: %016lx", header); log::debug(logs::boot, " Framebuffer is at: %016lx", header->frame_buffer); log::debug(logs::boot, " Kernel data is at: %016lx", header->data); log::debug(logs::boot, " Memory map is at: %016lx", header->memory_map); diff --git a/src/kernel/memory_bootstrap.cpp b/src/kernel/memory_bootstrap.cpp index c47dca9..4b1eac2 100644 --- a/src/kernel/memory_bootstrap.cpp +++ b/src/kernel/memory_bootstrap.cpp @@ -47,12 +47,12 @@ enum class efi_memory_type : uint32_t efi_max, - popcorn_kernel = 0x80000000, - popcorn_data, - popcorn_initrd, - popcorn_scratch, + jsix_kernel = 0x80000000, + jsix_data, + jsix_initrd, + jsix_scratch, - popcorn_max + jsix_max }; struct efi_memory_descriptor @@ -123,9 +123,9 @@ public: void add_used_frames(kutil::vm_space &vm) { for (auto *desc : map) { - if (desc->type == efi_memory_type::popcorn_data || - desc->type == efi_memory_type::popcorn_initrd || - desc->type == efi_memory_type::popcorn_kernel) + if (desc->type == efi_memory_type::jsix_data || + desc->type == efi_memory_type::jsix_initrd || + desc->type == efi_memory_type::jsix_kernel) { uintptr_t virt_addr = desc->physical_start + kernel_offset; vm.commit(virt_addr, desc->pages * frame_size); @@ -135,9 +135,9 @@ public: void page_in_kernel(page_manager &pm, page_table *pml4) { for (auto *desc : map) { - if (desc->type == efi_memory_type::popcorn_kernel || - desc->type == efi_memory_type::popcorn_data || - desc->type == efi_memory_type::popcorn_initrd) + if (desc->type == efi_memory_type::jsix_kernel || + desc->type == efi_memory_type::jsix_data || + desc->type == efi_memory_type::jsix_initrd) { uintptr_t virt_addr = desc->physical_start + kernel_offset; pm.page_in(pml4, desc->physical_start, virt_addr, desc->pages); diff --git a/src/libraries/initrd/include/initrd/initrd.h b/src/libraries/initrd/include/initrd/initrd.h index 504c42d..5a48844 100644 --- a/src/libraries/initrd/include/initrd/initrd.h +++ b/src/libraries/initrd/include/initrd/initrd.h @@ -1,7 +1,7 @@ #pragma once /// \file initrd.h /// Definitions defining the simple inital ramdisk file format used by the -/// popcorn kernel. +/// jsix kernel. #include #include "kutil/vector.h"