diff --git a/.github/workflows/makefile.yml b/.github/workflows/makefile.yml index 31c6fab1..f75a8317 100644 --- a/.github/workflows/makefile.yml +++ b/.github/workflows/makefile.yml @@ -61,7 +61,7 @@ jobs: if: steps.cache-cross.outputs.cache-hit != 'true' run: make --quiet -C tools do_binutils64 - - name: Compile Binutils i686 + - name: Compile Binutils i386 if: steps.cache-cross.outputs.cache-hit != 'true' run: make --quiet -C tools do_binutils32 @@ -73,7 +73,7 @@ jobs: if: steps.cache-cross.outputs.cache-hit != 'true' run: make --quiet -C tools do_gcc64 - - name: Compile GCC i686 + - name: Compile GCC i386 if: steps.cache-cross.outputs.cache-hit != 'true' run: make --quiet -C tools do_gcc32 @@ -101,7 +101,7 @@ jobs: if: steps.cache-cross.outputs.cache-hit != 'true' run: | cd tools - rm -rf binutils-gdb gcc qemu build-binutilsamd64 build-binutilsi686 build-binutilsarm64 build-gccamd64 build-gcci686 build-gccarm64 build-toolchain-binutils64 build-toolchain-gcc64 build-toolchain-binutils32 build-toolchain-gcc32 + rm -rf binutils-gdb gcc qemu build-binutilsamd64 build-binutilsi386 build-binutilsarm64 build-gccamd64 build-gcci386 build-gccarm64 build-toolchain-binutils64 build-toolchain-gcc64 build-toolchain-binutils32 build-toolchain-gcc32 compilegnuefi: name: Build GNU-EFI @@ -248,7 +248,7 @@ jobs: path: Fennix-release.iso compile32: - name: Build i686 + name: Build i386 runs-on: ubuntu-latest needs: [buildcompiler, compilegnuefi] steps: @@ -281,7 +281,7 @@ jobs: key: ${{ runner.os }}-gnuefi-${{ hashFiles('Lynx/Makefile') }} - name: Configure Makefile.conf - run: sed -i 's/.*OSARCH = .*/OSARCH = i686/' ./Makefile.conf && cat Makefile.conf | grep OSARCH + run: sed -i 's/.*OSARCH = .*/OSARCH = i386/' ./Makefile.conf && cat Makefile.conf | grep OSARCH - name: Compile Debug and Release ISO run: | @@ -309,13 +309,13 @@ jobs: - name: Upload Artifact (Fennix-legacy-debug.iso) uses: actions/upload-artifact@v3.1.0 with: - name: Fennix-i686-debug + name: Fennix-i386-debug path: Fennix-legacy-debug.iso - name: Upload Artifact (Fennix-legacy-release.iso) uses: actions/upload-artifact@v3.1.0 with: - name: Fennix-i686-release + name: Fennix-i386-release path: Fennix-legacy-release.iso compilearm64: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d40e55db..8202cc9f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -54,7 +54,7 @@ compiler: - make --quiet -C tools do_toolchain_gcc64 - make --quiet -C tools do_toolchain_binutils32 - make --quiet -C tools do_toolchain_gcc32 - - cd tools && rm -rf binutils-gdb gcc qemu build-binutilsamd64 build-binutilsi686 build-binutilsarm64 build-gccamd64 build-gcci686 build-gccarm64 build-toolchain-binutils64 build-toolchain-gcc64 build-toolchain-binutils32 build-toolchain-gcc32 + - cd tools && rm -rf binutils-gdb gcc qemu build-binutilsamd64 build-binutilsi386 build-binutilsarm64 build-gccamd64 build-gcci386 build-gccarm64 build-toolchain-binutils64 build-toolchain-gcc64 build-toolchain-binutils32 build-toolchain-gcc32 artifacts: paths: @@ -111,7 +111,7 @@ build32: - make --quiet -C Userspace prepare - make --quiet -C Lynx prepare - make --quiet -C Kernel prepare - - sed -i 's/.*OSARCH = .*/OSARCH = i686/' ./Makefile.conf && cat Makefile.conf | grep OSARCH + - sed -i 's/.*OSARCH = .*/OSARCH = i386/' ./Makefile.conf && cat Makefile.conf | grep OSARCH - make build - mv Fennix.iso Fennix-debug.iso - make clean diff --git a/.vscode/settings.json b/.vscode/settings.json index b62d5ea9..d80107c7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,10 +13,10 @@ "**/tools/binutils-gdb/**": true, "**/tools/build-binutilsamd64/**": true, "**/tools/build-binutilsarm64/**": true, - "**/tools/build-binutilsi686/**": true, + "**/tools/build-binutilsi386/**": true, "**/tools/build-gccamd64/**": true, "**/tools/build-gccarm64/**": true, - "**/tools/build-gcci686/**": true, + "**/tools/build-gcci386/**": true, "**/tools/cross/**": true, "**/tools/gcc/**": true, "**/tools/limine/**": true, diff --git a/Drivers b/Drivers index 22a8a38a..a631029d 160000 --- a/Drivers +++ b/Drivers @@ -1 +1 @@ -Subproject commit 22a8a38a80b68c963d53a756b221f2aba69439ac +Subproject commit a631029d48d923e40be070c28f2df55694bd553e diff --git a/Fennix Kernel.code-workspace b/Fennix Kernel.code-workspace index f6927057..293244b9 100644 --- a/Fennix Kernel.code-workspace +++ b/Fennix Kernel.code-workspace @@ -28,7 +28,10 @@ "vector.hpp": "c", "string.hpp": "c", "nc.hpp": "c", - "vector": "c" + "vector": "c", + "task.hpp": "c", + "recovery.hpp": "c", + "symbols.hpp": "c" }, "cSpell.words": [ "AABBCC", @@ -52,6 +55,7 @@ "binfo", "biosdev", "BIST", + "BITALG", "BLOCKDEV", "BLOCKDEVICE", "BNDCFGS", @@ -118,6 +122,7 @@ "FFSMBIOS", "FFXSR", "filestatus", + "FMAPS", "fonthdr", "Framebuffer", "fxrstor", @@ -125,6 +130,7 @@ "Gameport", "geopbyte", "GETVERSION", + "GFNI", "haddpd", "headersize", "HIPROC", @@ -318,6 +324,8 @@ "UPDT", "UPID", "UTID", + "VAES", + "VBMI", "vectorize", "vfctprintf", "vfsdbg", @@ -326,8 +334,12 @@ "VMCS", "VMFUNC", "VMXE", + "VNNI", + "VNNIW", + "VPCLMULQDQ", "VPID", "VPOKE", + "VPOPCNTDQ", "weakrefalias", "Wignored", "Wmissing", diff --git a/Kernel b/Kernel index ab64b9f3..9e21c532 160000 --- a/Kernel +++ b/Kernel @@ -1 +1 @@ -Subproject commit ab64b9f3b050c26b08bbd7865768e36784157578 +Subproject commit 9e21c5326bbe7b85a361f1a449c153f136a8ebc3 diff --git a/Makefile b/Makefile index 03fc8b14..5669759d 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ QEMUFLAGS := -display gtk ifeq ($(OSARCH), amd64) QEMUHWACCELERATION = -machine q35 -enable-kvm QEMUMEMORY = -m 4G -else ifeq ($(OSARCH), i686) +else ifeq ($(OSARCH), i386) QEMUHWACCELERATION = -machine q35 -enable-kvm QEMUMEMORY = -m 4G else ifeq ($(OSARCH), aarch64) @@ -43,7 +43,7 @@ QEMUFLAGS += -device vmware-svga -M q35 \ -audiodev pa,id=pa1,server=/run/user/1000/pulse/native \ -machine pcspk-audiodev=pa1 \ -device AC97,audiodev=pa1 -else ifeq ($(OSARCH), i686) +else ifeq ($(OSARCH), i386) QEMUFLAGS += -M q35 \ -usb \ -usbdevice mouse \ diff --git a/Makefile.conf b/Makefile.conf index c1b99844..17507b83 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -7,7 +7,7 @@ TESTING = 0 # Operating system name. OSNAME = Fennix -# OS architecture: amd64, i686, aarch64 +# OS architecture: amd64, i386, aarch64 OSARCH = amd64 # Kernel version. @@ -51,8 +51,8 @@ MLIBC = 0 ifeq ($(OSARCH), amd64) COMPILER_ARCH = amd64-elf- QEMU_ARCH = x86_64 -else ifeq ($(OSARCH), i686) -COMPILER_ARCH = i686-elf- +else ifeq ($(OSARCH), i386) +COMPILER_ARCH = i386-elf- QEMU_ARCH = i386 else ifeq ($(OSARCH), aarch64) COMPILER_ARCH = aarch64-elf- @@ -61,8 +61,8 @@ endif ifeq ($(OSARCH), amd64) TC_COMPILER_ARCH = x86_64-fennix- -else ifeq ($(OSARCH), i686) -TC_COMPILER_ARCH = i686-fennix- +else ifeq ($(OSARCH), i386) +TC_COMPILER_ARCH = i386-fennix- else ifeq ($(OSARCH), aarch64) TC_COMPILER_ARCH = aarch64-fennix- endif diff --git a/Userspace b/Userspace index 0c10aac7..fc97b09d 160000 --- a/Userspace +++ b/Userspace @@ -1 +1 @@ -Subproject commit 0c10aac7dfff54209686b439726aa4e05c0e1773 +Subproject commit fc97b09d6ed2540fc53592a8ae0fa905beac3f28 diff --git a/tools/Makefile b/tools/Makefile index 26f65b65..155ee9fa 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -37,10 +37,10 @@ clone_all: mkdir -p cross mkdir -p qemu mkdir -p build-binutilsamd64 - mkdir -p build-binutilsi686 + mkdir -p build-binutilsi386 mkdir -p build-binutilsarm64 mkdir -p build-gccamd64 - mkdir -p build-gcci686 + mkdir -p build-gcci386 mkdir -p build-gccarm64 mkdir -p build-toolchain-binutils64 mkdir -p build-toolchain-gcc64 @@ -52,10 +52,10 @@ __clone_all_no_qemu: git clone https://github.com/Fennix-Project/gcc.git gcc mkdir -p cross mkdir -p build-binutilsamd64 - mkdir -p build-binutilsi686 + mkdir -p build-binutilsi386 mkdir -p build-binutilsarm64 mkdir -p build-gccamd64 - mkdir -p build-gcci686 + mkdir -p build-gcci386 mkdir -p build-gccarm64 mkdir -p build-toolchain-binutils64 mkdir -p build-toolchain-gcc64 @@ -73,8 +73,8 @@ do_binutils64: make all -j$(shell nproc) && make install do_binutils32: - cd build-binutilsi686 && \ - ../binutils-gdb/configure --target=i686-elf --prefix="$(CROSS_DIR)" --with-sysroot --disable-werror && \ + cd build-binutilsi386 && \ + ../binutils-gdb/configure --target=i386-elf --prefix="$(CROSS_DIR)" --with-sysroot --disable-werror && \ make all -j$(shell nproc) && make install do_binutilsarm64: @@ -88,8 +88,8 @@ do_gcc64: make all-gcc -j$(shell nproc) && make install-gcc -j$(shell nproc) do_gcc32: - cd build-gcci686 && \ - ../gcc/configure --target=i686-elf --prefix="$(CROSS_DIR)" --enable-languages=c,c++ --without-headers && \ + cd build-gcci386 && \ + ../gcc/configure --target=i386-elf --prefix="$(CROSS_DIR)" --enable-languages=c,c++ --without-headers && \ make all-gcc -j$(shell nproc) && make install-gcc -j$(shell nproc) do_gccarm64: @@ -117,12 +117,12 @@ do_toolchain_gcc64: do_toolchain_binutils32: cd build-toolchain-binutils32 && \ - ../binutils-gdb/configure --target=i686-fennix --prefix="$(CROSS_DIR)/toolchain" --with-sysroot --enable-shared --disable-werror && \ + ../binutils-gdb/configure --target=i386-fennix --prefix="$(CROSS_DIR)/toolchain" --with-sysroot --enable-shared --disable-werror && \ make all -j$(shell nproc) && make install do_toolchain_gcc32: cd build-toolchain-gcc32 && \ - ../gcc/configure --target=i686-fennix --prefix="$(CROSS_DIR)/toolchain" --enable-languages=c,c++ --enable-shared --without-headers && \ + ../gcc/configure --target=i386-fennix --prefix="$(CROSS_DIR)/toolchain" --enable-languages=c,c++ --enable-shared --without-headers && \ make all-gcc -j$(shell nproc) && \ make all-target-libgcc -j$(shell nproc) && \ make install-gcc -j$(shell nproc) && \ diff --git a/tools/website/index.html b/tools/website/index.html index 9a2adef6..09c8a634 100644 --- a/tools/website/index.html +++ b/tools/website/index.html @@ -12,11 +12,9 @@

Fennix

Operating System from scratch made in C and C++

- -
@@ -34,14 +32,10 @@
- GitHub Workflow Status + GitHub Workflow Status GitHub - GitHub repo size - GitHub Repo stars + GitHub repo size + GitHub Repo stars

About

@@ -49,20 +43,14 @@ - +
- Hello!
- This is my Operating System from scratch, my goal is to make a fully functional Operating System with a - GUI and a lot of features.
- I'm working on this project alone, but I'm open to any kind of help, if you want to help me, you can - contribute to the project on GitHub.
- I have a Discord server too →
+ Hello!
This is my Operating System from scratch, my goal is to make a fully functional Operating System with a GUI and a lot of features.
I'm working on this project alone, but I'm open to any kind of help, if you want to help + me, you can contribute to the project on GitHub.
I have a Discord server too →
@@ -71,21 +59,14 @@

Compiling Instructions

Requirements

- First of all, you need to install the required packages to build the cross-compiler, bootloader, OS, - etc.
+ First of all, you need to install the required packages to build the cross-compiler, bootloader, OS, etc. +

- • Ubuntu 22.04
- For cross-compiler:
- sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libzstd-dev libisl-dev autoconf m4 automake gettext gperf dejagnu guile-3.0 guile-3.0-dev expect tcl autogen tex-common sphinx-common git ssh diffutils patch -
- For bootloader:
- sudo apt-get install make gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 mingw-w64 -
- For QEMU you'll have to follow this page here
- For OS:
+ • Ubuntu 22.04
For cross-compiler:
+ sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libzstd-dev libisl-dev autoconf m4 automake gettext gperf dejagnu guile-3.0 guile-3.0-dev expect tcl autogen tex-common sphinx-common git ssh diffutils patch +
For bootloader:
+ sudo apt-get install make gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 mingw-w64 +
For QEMU you'll have to follow this page here
For OS:
sudo apt-get install xorriso mtools genisoimage ovmf nasm doxygen
@@ -94,10 +75,8 @@

Building The Cross-Compiler

The cross-compiler is used to compile the OS, the bootloader and the kernel.
-
- All you have to do is to write this command in the terminal:
- make tools
- You'll have to wait a while, but when it's done, you can jump to the next step.
+
All you have to do is to write this command in the terminal:
+ make tools
You'll have to wait a while, but when it's done, you can jump to the next step.
@@ -105,39 +84,27 @@ If you want to build different architecture, use other QEMU binary or change kernel name you can find in Makefile.conf file.

- DEBUG • If it's set to 1, the kernel will - be compiled in debug mode.
+ DEBUG • If it's set to 1, the kernel will be compiled in debug mode.
TESTING • Enable unit testing.
OSNAME • The name of the kernel. This can be anything.
- OSARCH • The architecture of the kernel. Supported values are: amd64 i686 aarch64.
+ OSARCH • The architecture of the kernel. Supported values are: amd64 i386 aarch64.
KERNEL_VERSION • The version of the kernel. This can be anything.
- BOOTLOADER • The bootloader to be used. If set to other, the bootloader will be Limine for 64-bit, - or with GRUB if 32-bit. lynx it's still under development.
- COMPILER_PATH • The path of the cross compiler. If you want to use - your own cross compiler, change it to the path of the compiler.
+ BOOTLOADER • The bootloader to be used. If set to other, the bootloader will be Limine for 64-bit, or + with GRUB if 32-bit. lynx it's still under development.
+ COMPILER_PATH • The path of the cross compiler. If you want to use your own cross compiler, change it to the path of the compiler.
LIMINE_FOLDER • The path of the Limine bootloader.
- QEMU_PATH • Qemu path. If you want to use the one you have installed - in your system, change it to /usr/bin/qemu-system- (do not include x86_64 or i386, it will be added - automatically)
- That's all you can change in this file.
+ QEMU_PATH • Qemu path. If you want to use the one you have installed in your system, change it to /usr/bin/qemu-system- (do not include x86_64 or i386, it will be added automatically) +
That's all you can change in this file.

Building The Operating System

The fun part!
-
- Now that you have the cross-compiler, you can build the OS.
- There are a few commands that you can use to compile the OS:
+
Now that you have the cross-compiler, you can build the OS.
There are a few commands that you can use to compile the OS:
make build • Builds the entire OS and creates an ISO image.
- make run • Same as make build but starts - the QEMU too.
+ make run • Same as make build but starts the QEMU too.
make clean • Clean all files (object files, ISO, etc...).
- make doxygen • Generate the documentation in directory doxygen-doc.
+ make doxygen • Generate the documentation in directory doxygen-doc.
@@ -145,12 +112,8 @@

Running With Other Virtual Machines


- • On VirtualBox and VMware, you can use the ISO image to run the OS.
- • HDD/SSD are not required.
- • The minimum RAM required is 4G. You can run with lower memory, but sometimes can cause issues - (I don't know why).
- • UEFI required. BIOS sometimes doesn't work properly.
- • Serial Port (COM1) is recommended.
+ • On VirtualBox and VMware, you can use the ISO image to run the OS.
• HDD/SSD are not required.
• The minimum RAM required is 4G. You can run with lower memory, but sometimes can cause issues (I don't know + why).
• UEFI required. BIOS sometimes doesn't work properly.
• Serial Port (COM1) is recommended.
@@ -158,8 +121,7 @@

Reporting Issues


- You can report bugs or crash issues to Issues + You can report bugs or crash issues to Issues tab.