From 28a748b43917d5cb64b32ef9ccb6eda8288a8773 Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 9 Mar 2019 21:39:23 +0100 Subject: update readme/notes --- README.md | 237 ++------------------------------------------------------------ 1 file changed, 4 insertions(+), 233 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 21d8ae2..f9b5d79 100644 --- a/README.md +++ b/README.md @@ -1,236 +1,7 @@ -Welcome to FoolOS -================= +# FOOL-OS -![FoolOS Logo](https://gitweb.softwarefools.com/?p=miguel/fool-os.git;a=blob_plain;f=img/logo.png;hb=HEAD) +Welcome to the git repository of the worlds most useless operating system. -Abstract --------- -Welcome to the Home of the worlds most useless operating system. +You can read more about this project on: -Quick-start ------------ -Simply boot from the __FoolOS.iso__ in your favourite emulator -or __dd__ to an USB stick and test on real hardware. - -Features --------- - -* Booting with Multiboot (e.g. GRUB 2) -* 32-bit protected mode -* Logging to COM1 -* Parsing ACPI (incomplete) and Multiboot Data -* Symmetrical Multiprocessing with LAPIC and IOAPIC -* APIC and PIT Timers -* Seperate GDT and IVT for each CPU -* Paging / Virtual Memory -* Ext2 RAM Disk -* Pipes -* Standard streams (stdin/stdout/stderr) -* Mouse and Keyboard support -* Multi-threading & Multitasking -* Kernel and Userspace Tasks -* CPU Private Memory -* Support for ELF binaries. -* IRQ Handling Framework -* Finegrained Spinlocks -* Superfast Task Scheduler -* PCI Bus scanning -* Ethernet E1000 PCI Driver -* VESA Framebuffer with fallback to a text-only terminal -* Composite Window Manager -* C-library for Userspace (Newlib) -* Simple Network Stack (ARP, IPv4, ICMP, UDP) -* Simple FoolShell -* Snake Game -* Ships with some useless userspace software - -_Please note that most features are only very rudimentary and mostly buggy._ - -Multiboot ---------- -The FoolOS Kernel is following the Multiboot Specification (0.6.96) -providing a multiboot header and the entry point _start(). - -This in turn calls the C function kernel_main(). - -Building --------- - -You should at least setup a gcc cross-compiler and setup newlib to -build FoolOS yourself. - -GCC CROSS-COMPILER (i686-elf) - - https://wiki.osdev.org/GCC_Cross-Compiler (18 AUG 2018) - ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gz - https://sunsite.icm.edu.pl/pub/gnu/binutils/binutils-2.31.1.tar.gz - -NEWLIB - - https://wiki.osdev.org/Porting_Newlib (18 AUG 2018) - ftp://sourceware.org/pub/newlib/newlib-3.0.0.20180802.tar.gz - https://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz - https://ftp.gnu.org/gnu/automake/automake-1.11.6.tar.gz - -Supported Platforms -------------------- -__TODO: update/recheck__ - -FoolOS was/is tested/developed on the following emulators/machines - -* bochs 2.6 (try compiled with: ./configure --enable-clgd54xx --enable-a20-pin --enable-debugger --enable-disasm --enable-e1000 --with-x --with-x11 --with-term --enable-smp) (add -lpthread to LIBS in the Makefile!) -* qemu 2.8.1 -* qemu 3.0.0 -* virtual box -* Acer Aspire 1810TZ (Notebook) -* Q6600 on Asus p5n32-e sli plus (Desktop PC) -* 4790K on Asus z97-pro gamer (Desktop PC) - -Todos ------ - -break out reusable parts. use typedefs - -two buffers for programms , never lock both. lock is syscall? -port as secondary user.. ? zlib libpng - - https://wiki.osdev.org/Text_Mode_Cursor -cnrom civis term -pipes! schedulig! DMA! splice (2) - -Autobuild via Jenkins (sanbboxed?) -streamline: binutils,gcc,newlib,ncurses,ncurses-examples.vim building -mesa3d, quake,doom, netwookring tcp/ip - -* PRIO: ringbuffers (spinlock on/off, interrupts on/off, read/write blocks of data); -* PRIO: Writing to ext2 RAM-image!!!! -* PRIO: Fix scheduler. use all cpus! / accounting/bookkeppiung x86: tsc /rdtscp? / load bareer / queues? -* PRIO: gcc toolchain -* PRIO: /dev/tty / function and arrow keys - -* PRIO: semaphores/ mutexes -* PRIO: return value / argv / env -* PRIO: create/remove pages on demand (sbrk, stack, load prog) -* PRIO: grow kernel memory! - -* PRIO: optimized Mouse & KB processing in seperate task. (Kb all chars and different layouts, arrow keys, ctrl-c etc) - -* NETWORKING: tcp/ip stack/ traceroute / arptables / sockets! / - vbox E1000! (remap) / virtio / NS2000 / ipxe network drivers / laptop acer card - -* TODO: check Kernel Stuff Reentrancy? multicpu? interrupt syscall processing? Cleanup syscalls -* TODO: GCC optimizations (break kernel?) / volatile keyword etc? -* TODO: gcc-foolos (Porting (ncurses, gcc, binutils, vim, apache...) -* TODO: why do we provide 2 versions of syscalls (underscore and no underscore?) for newlib (non underscore collide with standard!) -* TODO: flush open streams on exit as discussed in 7.21.3 : n1570, c11: https://port70.net/~nsz/c/c11/n1570.html#7.21.3 -* TODO: signals - -* EXTRA: fallback to pic/pit - -* EXTRA: switch to DMA where possible!? -* EXTRA: Unit Testing -* EXTRA: GUI / Window Manager (update\_rect, etc..) / double buffering / physical, virtual sizE? virtio ? / Cairo library/ xvfb? - /forum.osdev.org/viewtopic.php?t=10018&p=64358 / vsync -* EXTRA: qemu tcg , slower other cpus -* EXTRA: Crazy & Funny terminal effects while typing (idea) -* EXTRA: port to arm and berryboot / minicom? -* EXTRA: port doom/quake/mesa 3d -* EXTRA: ghc cross compiler / ghc port -* EXTRA: piper-os -* EXTRE: matrix desgin. star wars terminal etc.. - - -1.GCC & Binutils -================ - - * ref: GCC Cross Compiler - * ref: OS Specific Toolchain - * ref: Hosted GCC Cross Compiler - -2.Porting Newlib -================ - - * ref: Porting_Newlib - * Add fool-os specifics under ../newlib-foolos/newlib/libc/sys/foolos - * TODO: os specifics diff - * cd newlib-build - * ../newlib-foolos/configure --prefix=/usr --target=i686-foolos - * make all - * make DESTDIR=${SYSROOT} install (e.g. make DESTDIR=/home/miguel/temp/foolos/ install) - -3.Porting Software -=================== - - I get sources via: apt-get source zlib , etc.. - - * ref: Cross Porting Software - - * ncurses: ../ncurses-6.1/configure --host=i686-foolos --without-tests - --with-fallbacks="fool-term" --with-debug --prefix=/usr --with-termlib - - - ../ncurses-6.1/configure --host=i686-foolos --with-fallbacks="fool-term" --prefix=/usr --with-termlib --with-debug - - * ncurses-examples: ../ncurses-examples-20180127/configure --host=i686-foolos --prefix=/usr --with-ncurses - make DESTDIR=/home/miguel/temp/foolos/ install - - * vim: - vim_cv_memcpy_handles_overlap=no vim_cv_bcopy_handles_overlap=no vim_cv_memmove_handles_overlap=no vim_cv_stat_ignores_slash=no vim_cv_getcwd_broken=no vim_cv_tty_group=world vim_cv_tty_mode=0620 vim_cv_tgetent=zero vim_cv_terminfo=no vim_cv_toupper_broken=no ./configure --host=i686-foolos --prefix=/usr --with-tlib=tinfo - - set CFLAGS="-ggdb -O0" to get debug symbols - - * zlib-1.2.8 (via apt-get) - CC=i686-foolos-gcc ./configure --prefix=/usr - - * libpng1.6-1.6.28 (via apt-get) - - inside the dir: - - 1) add -foolos* to config.sub - 2) ./configure --prefix=/usr --host=i686-foolos - 3) make - 4) make DESTDIR=/home/miguel/temp/foolos/ install - - -Content -======= - -Third party software and content used some of which is: -(I have likely forgotten most of credit) - -grub - -newlib -ncurses -ncurses-examples -vim - -envypn fonts -solarized colors - - -Disclaimer -========== - -THIS IS A WORK IN PROGRESS. - -This is a simple and useless "operating system", with a very basic set -of features. It is the fruit of my fundamental explorations of the x86 -architecture and operating system design. - -Copyright M.Idziorek unless stated otherwise. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -NOTES -===== - -extract lines and comments (Does not work in all cases) - -$ pcregrep -M '(\/\*(.(?!(\*\/))|\n)*.*)|(^ *$)|(^ *\/\/)' +. -- cgit v1.2.3