diff --git a/.gitignore b/.gitignore index 7b2de6ff..be4dcf7b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ tools/* !tools/*.cpp !tools/*.cfg doxygen-doc -initrd.tar.gz +initrd.tar .dccache *.log *.log.* diff --git a/Drivers b/Drivers index b8ba6cfb..60391c03 160000 --- a/Drivers +++ b/Drivers @@ -1 +1 @@ -Subproject commit b8ba6cfb6049aa385c8d663f787640d77a13f01d +Subproject commit 60391c032a7e37db0adf0365b75cb5ca1fb683b8 diff --git a/Fennix Drivers.code-workspace b/Fennix Drivers.code-workspace index 922597e8..9a9b9141 100644 --- a/Fennix Drivers.code-workspace +++ b/Fennix Drivers.code-workspace @@ -15,6 +15,7 @@ "CFIEN", "cmdret", "cmpb", + "driverinfo", "ECTRL", "EEPROM", "Fennix", diff --git a/Fennix Kernel.code-workspace b/Fennix Kernel.code-workspace index 2d95946a..bfb5c897 100644 --- a/Fennix Kernel.code-workspace +++ b/Fennix Kernel.code-workspace @@ -8,6 +8,25 @@ "debug.allowBreakpointsEverywhere": true, "files.associations": { "*.su": "tsv", + "thread": "cpp", + "bitset": "cpp", + "initializer_list": "cpp", + "semaphore": "cpp", + "memory": "cpp", + "limits": "cpp", + "climits": "cpp", + "iterator": "cpp", + "ranges": "cpp", + "cassert": "cpp", + "concepts": "cpp", + "cctype": "cpp", + "tuple": "cpp", + "streambuf": "cpp", + "system_error": "cpp", + "coroutine": "cpp", + "static_vector": "cpp", + "string_view": "cpp", + "compare": "cpp", "limine.h": "c", "types.h": "c", "binfo.h": "c", @@ -55,7 +74,31 @@ "sched.h": "c", "mman.h": "c", "string.h": "c", - "macro.hpp": "c" + "macro.hpp": "c", + "stddef.h": "c", + "cfloat": "c", + "type_traits": "cpp", + "stdlib.h": "c", + "new": "cpp", + "ostream": "cpp", + "iostream": "cpp", + "istream": "cpp", + "ios": "cpp", + "locale": "cpp", + "unwind.h": "c", + "memory.h": "c", + "physical.hpp": "c", + "swap_pt.hpp": "c", + "brk.hpp": "c", + "bitmap.hpp": "c", + "lock.hpp": "c", + "virtual.hpp": "c", + "table.hpp": "c", + "vma.hpp": "c", + "abi.h": "c", + "kstack.hpp": "c", + "stack.hpp": "c", + "optional": "cpp" }, "cSpell.words": [ "AABBCC", @@ -149,6 +192,7 @@ "ELFMAG", "ELFOSABI", "EMMINTRIN", + "endregion", "Ensoniq", "EVTSEL", "EXECFN", @@ -173,6 +217,7 @@ "fonthdr", "Framebuffer", "FSGSBASE", + "fsmi", "fxrstor", "fxsave", "Gamepad", @@ -189,6 +234,7 @@ "ICRLO", "IDIV", "idtd", + "IFHLNK", "infloop", "inportb", "inportl", @@ -206,12 +252,15 @@ "isdelim", "ishld", "ishst", + "itimerspec", "itrfb", "JMPREL", "KAPI", "KAPIPCI", "kcalloc", "kcon", + "kdentry", + "kdirent", "kernelctl", "kfree", "klog", @@ -224,10 +273,12 @@ "LFLR", "lgdt", "liballoc", + "LIBLIST", "lidt", "limine", "LMSLE", "LOPROC", + "lsacpi", "LSTAR", "MADT", "MADTIO", @@ -266,6 +317,7 @@ "MTRRCAP", "multiboot", "MWAIT", + "newfstatat", "NIDENT", "NOBITS", "nullfd", @@ -273,9 +325,11 @@ "objptr", "OEMID", "Ofast", + "okstat", "oldfd", "OPENVOS", "OPTMZ", + "OSABI", "OSFXSR", "OSXMMEXCPT", "OSXSAVE", @@ -315,6 +369,7 @@ "Prefetchable", "PREINIT", "PROCBASED", + "PROGBITS", "PTMX", "ptys", "pushfl", @@ -335,6 +390,7 @@ "RELSZ", "Rodata", "RPCI", + "rpmalloc", "RRGGBB", "RSDP", "RSDT", @@ -353,7 +409,9 @@ "shoff", "showbuf", "shstrndx", + "shstrtab", "sidt", + "SIGCOMP", "sigsetsize", "SIVR", "SMAP", @@ -404,6 +462,7 @@ "UNMAP", "Unmaskable", "Unreserving", + "unseek", "Unswap", "unsynchronized", "UPDT", @@ -454,6 +513,20 @@ "zettabyte" ], "editor.tabCompletion": "on", - "diffEditor.codeLens": true + "diffEditor.codeLens": true, + "editor.quickSuggestionsDelay": 100, + "zenMode.hideLineNumbers": false, + "zenMode.hideActivityBar": false, + "zenMode.hideStatusBar": true, + "zenMode.centerLayout": true, + "zenMode.fullScreen": true, + "zenMode.restore": true, + "zenMode.silentNotifications": true, + "window.commandCenter": false, + "window.density.editorTabHeight": "default", + "editor.cursorBlinking": "blink", + "editor.cursorSmoothCaretAnimation": "on", + "editor.cursorStyle": "line", + "editor.cursorWidth": 2 } } diff --git a/Fennix Userspace.code-workspace b/Fennix Userspace.code-workspace index 23faac29..515b7db5 100644 --- a/Fennix Userspace.code-workspace +++ b/Fennix Userspace.code-workspace @@ -8,6 +8,9 @@ "debug.allowBreakpointsEverywhere": true, "files.associations": { "*.su": "tsv", + "thread": "cpp", + "bitset": "cpp", + "initializer_list": "cpp", "fex.hpp": "c", "types.h": "c", "dlfcn.h": "c", @@ -44,7 +47,11 @@ "pty.h": "c", "string.h": "c", "time.h": "c", - "reboot.h": "c" + "reboot.h": "c", + "*.in": "c", + "signal.h": "c", + "alltypes.h": "c", + "pr44328.C": "cpp" }, "cSpell.words": [ "auxv", diff --git a/Kernel b/Kernel index 5fd8d3b3..19f2a78d 160000 --- a/Kernel +++ b/Kernel @@ -1 +1 @@ -Subproject commit 5fd8d3b3a5c8d691d26ec1db39ef65449a8a8d14 +Subproject commit 19f2a78d357f48ec2c2cf2bd46ac35408b3965ec diff --git a/Makefile b/Makefile index 09dc5c2f..248bb185 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,11 @@ QEMUFLAGS := -display gtk ifeq ($(OSARCH), amd64) QEMUFLAGS += -device vmware-svga -M q35 \ -usb \ - -usbdevice mouse \ + -device qemu-xhci,id=xhci \ + -device usb-mouse,bus=xhci.0,pcap=mousex.pcap \ + -device usb-kbd,bus=xhci.0,pcap=kbdx.pcap \ + -device usb-mouse,pcap=mouse.pcap \ + -device usb-kbd,pcap=kbd.pcap \ -net user \ -netdev user,id=usernet0 \ -device e1000,netdev=usernet0,mac=00:69:96:00:42:00 \ @@ -23,7 +27,7 @@ QEMUFLAGS += -device vmware-svga -M q35 \ -serial file:serial.log \ -serial file:profiler.log \ -serial file:serial3.dmp \ - -serial file:serial4.dmp \ + -serial stdio \ -parallel file:parallel.log \ -device ahci,id=ahci \ -drive id=bootdsk,file=$(OSNAME).iso,format=raw,if=none \ @@ -39,7 +43,11 @@ QEMUFLAGS += -device vmware-svga -M q35 \ else ifeq ($(OSARCH), i386) QEMUFLAGS += -M q35 \ -usb \ - -usbdevice mouse \ + -device qemu-xhci,id=xhci \ + -device usb-mouse,bus=xhci.0,pcap=mousex.pcap \ + -device usb-kbd,bus=xhci.0,pcap=kbdx.pcap \ + -device usb-mouse,pcap=mouse.pcap \ + -device usb-kbd,pcap=kbd.pcap \ -net user \ -netdev user,id=usernet0 \ -device e1000,netdev=usernet0,mac=00:69:96:00:42:00 \ @@ -47,7 +55,7 @@ QEMUFLAGS += -M q35 \ -serial file:serial.log \ -serial file:profiler.log \ -serial file:serial3.dmp \ - -serial file:serial4.dmp \ + -serial stdio \ -parallel file:parallel.log \ -hda $(OSNAME).iso \ -audiodev pa,id=pa1,server=/run/user/1000/pulse/native \ @@ -62,7 +70,7 @@ QEMUFLAGS += -M raspi3b \ -serial file:serial.log \ -serial file:profiler.log \ -serial file:serial3.dmp \ - -serial file:serial4.dmp \ + -serial stdio \ -kernel $(OSNAME).img \ -acpitable file=tools/SSDT1.dat endif @@ -131,9 +139,9 @@ endif ifeq ($(BUILD_USERSPACE), 1) cp -r Userspace/out/* initrd_tmp_data/ endif -# tar czf initrd.tar.gz -C initrd_tmp_data/ ./ --format=ustar - tar cf initrd.tar.gz -C initrd_tmp_data/ ./ --format=ustar - cp Kernel/fennix.elf initrd.tar.gz \ +# tar czf initrd.tar -C initrd_tmp_data/ ./ --format=ustar + tar cf initrd.tar -C initrd_tmp_data/ ./ --format=ustar + cp Kernel/fennix.elf initrd.tar \ iso_tmp_data/ ifeq ($(BOOTLOADER), lynx) cp tools/lynx.cfg Lynx/loader.bin Lynx/efi-loader.bin iso_tmp_data/ @@ -202,28 +210,28 @@ QEMUHWACCELERATION = QEMUMEMORY = -m 1G endif -vscode_debug_only: - rm -f serial.log profiler.log serial3.dmp serial4.dmp network.dmp parallel.log - $(QEMU) -S -gdb tcp::1234 -d int -no-reboot -no-shutdown $(QEMU_UEFI_BIOS) -m 512M $(QEMUFLAGS) $(QEMU_SMP_DBG) +clean_logs: + rm -f serial.log profiler.log serial3.dmp network.dmp parallel.log mouse.pcap kbd.pcap mousex.pcap kbdx.pcap + +vscode_debug_only: clean_logs + $(QEMU) -S -gdb tcp::1234 -d cpu_reset,int -no-reboot -no-shutdown $(QEMU_UEFI_BIOS) -m 512M $(QEMUFLAGS) $(QEMU_SMP_DBG) vscode_debug: build_lynx build_kernel build_userspace build_drivers build_image vscode_debug_only -qemu: qemu_vdisk - rm -f serial.log profiler.log serial3.dmp serial4.dmp network.dmp parallel.log +qemu: qemu_vdisk clean_logs touch serial.log parallel.log # x-terminal-emulator -e tail -f serial.log & # x-terminal-emulator -e tail -f parallel.log & $(QEMU) $(QEMU_UEFI_BIOS) -cpu host $(QEMUFLAGS) $(QEMUHWACCELERATION) $(QEMUMEMORY) $(QEMU_SMP) -qemubios: qemu_vdisk - rm -f serial.log profiler.log serial3.dmp serial4.dmp network.dmp parallel.log +qemubios: qemu_vdisk clean_logs $(QEMU) -cpu host $(QEMUFLAGS) $(QEMUHWACCELERATION) $(QEMUMEMORY) $(QEMU_SMP) run: build qemu -clean: +clean: clean_logs rm -rf doxygen-doc iso_tmp_data initrd_tmp_data - rm -f initrd.tar.gz $(OSNAME).iso $(OSNAME).img + rm -f initrd.tar $(OSNAME).iso $(OSNAME).img make -C Kernel clean make -C Lynx clean make -C Userspace clean diff --git a/Makefile.conf b/Makefile.conf index a7834794..53871661 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -40,7 +40,7 @@ QEMU_PATH = tools/cross/bin/qemu-system- # Set libc to use. Available options: # - internal - Use the internal libc # - musl - Use musl libc (linux syscalls) -USE_LIBC = internal +USE_LIBC = musl # Build all libraries as static libraries. USERSPACE_STATIC_LIBS = 0 @@ -53,7 +53,7 @@ USERSPACE_STATIC_LIBS = 0 -# Make releated variables +# Make related variables # ----------------------- # Do not change anything below this line unless # you know what you are doing. diff --git a/Userspace b/Userspace index 1b367294..961ddd0b 160000 --- a/Userspace +++ b/Userspace @@ -1 +1 @@ -Subproject commit 1b367294612eb0d18d15d042cad52a75ae6aa243 +Subproject commit 961ddd0bd8dec37743395d2b7f8b896132e87b1d diff --git a/initrd/etc/term b/initrd/etc/term new file mode 100644 index 00000000..f888959a --- /dev/null +++ b/initrd/etc/term @@ -0,0 +1,66 @@ +[general] +theme=vga + +[cursor] +color=255,255,255 +blink=true + +[vga] +color0=0,0,0:133,133,133 +color1=170,0,0:255,85,85 +color2=0,170,0:85,255,85 +color3=170,85,0:255,255,85 +color4=0,0,170:85,85,255 +color5=170,0,170:255,85,255 +color6=0,170,170:85,255,255 +color7=170,170,170:255,255,255 + +[breeze] +color0=35,38,39:127,140,141 +color1=237,21,21:192,57,43 +color2=17,209,22:28,220,154 +color3=246,116,0:253,188,75 +color4=29,153,243:61,174,233 +color5=155,89,182:142,68,173 +color6=26,188,156:22,160,133 +color7=252,252,252:255,255,255 + +[coolbreeze] +color0=20,30,40:90,100,110 +color1=180,40,40:150,30,30 +color2=40,180,40:70,200,60 +color3=180,120,40:220,170,60 +color4=40,90,180:80,130,200 +color5=150,60,150:120,40,140 +color6=30,170,170:20,140,140 +color7=210,210,210:190,190,190 + +[softlight] +color0=40,44,48:128,132,136 +color1=210,50,50:180,80,80 +color2=60,170,60:90,210,90 +color3=180,150,30:220,200,80 +color4=50,70,150:100,120,210 +color5=180,90,180:170,70,170 +color6=30,190,190:70,170,170 +color7=220,220,220:240,240,240 + +[calmsea] +color0=30,40,50:110,120,130 +color1=190,50,50:150,60,60 +color2=50,190,50:80,200,80 +color3=200,160,50:240,200,70 +color4=50,100,200:90,140,220 +color5=160,80,160:140,60,140 +color6=40,180,180:30,140,140 +color7=230,230,230:210,210,210 + +[warmember] +color0=40,30,20:120,100,80 +color1=210,80,60:180,60,50 +color2=70,200,60:100,220,70 +color3=190,130,30:230,180,60 +color4=60,120,200:100,140,230 +color5=170,70,160:140,50,130 +color6=40,200,200:30,170,170 +color7=220,220,220:200,200,200 diff --git a/initrd/include/.gitkeep b/initrd/include/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/initrd/tmp/chars.txt b/initrd/tmp/chars.txt deleted file mode 100644 index 883bc20c..00000000 --- a/initrd/tmp/chars.txt +++ /dev/null @@ -1,33 +0,0 @@ -Hello World! -Bună Lume! -¡Hola Mundo! -Привет, мир! -Selam Dünya! -「こんにちは世界」 -你好世界! -안녕하세요 월드! -مرحبا بالعالم! -Բարեւ աշխարհ! -Γειά σου Κόσμε! -Helló Világ! -Përshendetje Botë! - ------------------- - -ĂăÎîÂâȘșȚț - -ΩŁ€®Ŧ¥←↑↓→ØÞ -ƧЪŊĦ̛̛Ł˝ -«»©¢“‘”’µº×÷ - -ёЁъЪЧчШшЩщЭэ -ЯВЕРТЫУИОП -явертыуиоп -АСДФГХЙКЛ -асдфгхйкл -ЗЬЦЖБНМ -зьцжбнм - -顲³¼⅜±°¿ -ĞğÜü - diff --git a/initrd/tmp/pangrams.txt b/initrd/tmp/pangrams.txt new file mode 100644 index 00000000..3a541ad2 --- /dev/null +++ b/initrd/tmp/pangrams.txt @@ -0,0 +1,31 @@ +Code Language Pangram +ar Arabic صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطا +bs Bosnian Sva ljudska bića rađaju se slobodna i jednaka u dostojanstvu i pravima +cs Czech Příliš žluťoučký kůň úpěl ďábelské ódy +da Danish Høj bly gom vandt fræk sexquiz på wc +de German Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich +el Greek Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός Takhístè alôpèx vaphês psèménè gè, draskelízei ypér nòthroý kynós +es Spanish Benjamín pidió una bebida de kiwi y fresa; Noé, sin vergüenza, la más exquisita champaña del menú +et Estonian Põdur Zagrebi tšellomängija-följetonist Ciqo külmetas kehvas garaažis +fi Finnish Fahrenheit ja Celsius yrjösivät Åsan backgammon-peliin, Volkswagenissa, daiquirin ja ZX81:n yhteisvaikutuksesta +fr French Buvez de ce whisky que le patron juge fameux +he Hebrew שפן אכל קצת גזר בטעם חסה, ודי לְדַפדֵף הפתרונות שלי עֶזרָה הֲגָנָה +hi Hindi लाभो सुचना उद्योग परिवहन विनिमय बाटते काम अधिकार निर्माता विभाजनक्षमता सादगि हुआआदी विश्वास वहहर +id Indonesian Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar +it Italian Ma la volpe, col suo balzo, ha raggiunto il quieto Fido +ja Japanese いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす。 +ko Korean 키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다 +lt Lithuanian Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą +lv Latvian Muļķa hipiji mēģina brīvi nogaršot celofāna žņaudzējčūsku +nb Norwegian Vår sære Zulu fra badeøya spilte jo whist og quickstep i min taxi +nl Dutch Exact vijf voor twaalf had de psycholoog zijn quotum bereikt +pl Polish Jeżu klątw, spłódź Finom część gry hańb! +pt Portuguese Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português +ro Romanian Vând muzică de jazz și haine de bun-gust în New-York și Quebec la preț fix +ru Russian В чащах юга жил бы цитрус? Да, но фальшивый экземпляръ! +sk Slovak Kŕdeľ šťastných ďatľov učí pri ústí Váhu mĺkveho koňa obhrýzať kôru a žrať čerstvé mäso +sv Swedish Yxskaftbud, ge vår WC-zonmö IQ-hjälp +th Thai เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร +tr Turkish Pijamalı hasta yağız şoföre çabucak güvendi +vi Vietnamese Do bạch kim rất quý, sẽ để lắp vô xương +zh Chinese 視野無限廣,窗外有藍天 (traditional) 中国智造,慧及全球 (simplified) diff --git a/tools/Makefile b/tools/Makefile index 3eceb80c..52918303 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -20,28 +20,23 @@ do_ep: do_limine: git clone https://github.com/limine-bootloader/limine.git --branch=v6.x-branch-binary --depth=1 -clone_all: - git clone -b binutils-2_42-branch --single-branch https://github.com/Fennix-Project/binutils-gdb.git binutils-gdb - git clone -b releases/gcc-13 --single-branch https://github.com/Fennix-Project/gcc.git gcc +__clone_qemu: wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz tar xvJf qemu-${QEMU_VERSION}.tar.xz rm -f qemu-${QEMU_VERSION}.tar.xz mv qemu-${QEMU_VERSION} qemu + +__clone_all_no_qemu: + git clone -b binutils-2_42-branch --single-branch https://github.com/Fennix-Project/binutils-gdb.git binutils-gdb + git clone -b releases/gcc-13 --single-branch https://github.com/Fennix-Project/gcc.git gcc + cd gcc && $(shell ./contrib/download_prerequisites) mkdir -p cross - mkdir -p qemu mkdir -p build-binutils64 mkdir -p build-gcc64 mkdir -p build-binutils32 mkdir -p build-gcc32 -__clone_all_no_qemu: - git clone https://github.com/Fennix-Project/binutils-gdb.git binutils-gdb - git clone https://github.com/Fennix-Project/gcc.git gcc - mkdir -p cross - mkdir -p build-binutils64 - mkdir -p build-gcc64 - mkdir -p build-binutils32 - mkdir -p build-gcc32 +clone_all: __clone_qemu __clone_all_no_qemu do_qemu: cd qemu && \ diff --git a/tools/grub.cfg b/tools/grub.cfg index 778ba2ab..cb18ea92 100644 --- a/tools/grub.cfg +++ b/tools/grub.cfg @@ -7,9 +7,9 @@ menuentry "Fennix" { load_video clear echo "Loading kernel" - multiboot2 /fennix.elf --ioapicirq=1 --udl=true --simd=true + multiboot2 /fennix.elf --ioapicirq=1 --udl=true --simd=true --linux=true --init=/bin/init echo "Loading initrd" - module2 /initrd.tar.gz initrd + module2 /initrd.tar initrd echo "Booting..." boot } @@ -24,6 +24,14 @@ if [ ${grub_platform} == "efi" ]; then } fi +menuentry "System restart" { + reboot +} + +menuentry "System shutdown" { + halt +} + function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video diff --git a/tools/limine.cfg b/tools/limine.cfg index 91736b13..36decb2e 100644 --- a/tools/limine.cfg +++ b/tools/limine.cfg @@ -8,5 +8,5 @@ INTERFACE_BRANDING=Fennix KERNEL_CMDLINE=--ioapicirq=1 --udl=true --simd=true KERNEL_PATH=boot:///fennix.elf - MODULE_PATH=boot:///initrd.tar.gz + MODULE_PATH=boot:///initrd.tar MODULE_CMDLINE=initrd diff --git a/tools/lynx.cfg b/tools/lynx.cfg index b702ae48..3ab6a9bf 100644 --- a/tools/lynx.cfg +++ b/tools/lynx.cfg @@ -1,2 +1,2 @@ CMDLINE=debug -INITRD=initrd.tar.gz +INITRD=initrd.tar