Sinipelto
46a31b8efa
Merge pull request 'update main 21.11.23' ( #2 ) from Bananymous/banan-os:main into main
...
Reviewed-on: Sinipelto/banan-os#2
2023-11-21 14:58:13 +02:00
Bananymous
85a5e81224
BuildSystem: Check value of BANAN_UEFI_BOOT with `if ((...)); then`
2023-11-21 14:58:13 +02:00
Bananymous
7d4cdcd1fd
BuildSystem: Add missing bootloader install script
2023-11-21 14:58:13 +02:00
Sinipelto
d72db1f81c
BuildSystem: image sh
...
mount in build dir
Signed-off-by: Sinipelto <sinipelto@noreply.bananymous.com>
2023-11-20 14:12:35 +02:00
Sinipelto
6cfa56dcec
BuildSystem: image create sh
...
use banan build dir
Signed-off-by: Sinipelto <sinipelto@noreply.bananymous.com>
2023-11-20 14:11:29 +02:00
Sinipelto
f97922a2b5
Update script/image.sh
...
mount dir default value
Signed-off-by: Sinipelto <sinipelto@noreply.bananymous.com>
2023-11-20 13:28:53 +02:00
Sinipelto
566724d986
Update script/image-create.sh
...
custom mount dir
Signed-off-by: Sinipelto <sinipelto@noreply.bananymous.com>
2023-11-20 13:28:10 +02:00
Sinipelto
a7b1810aa2
Update script/image.sh
...
handle custom mount dir
Signed-off-by: Sinipelto <sinipelto@noreply.bananymous.com>
2023-11-20 13:24:15 +02:00
Sinipelto
a6a5c00763
Merge pull request 'update main' ( #1 ) from Bananymous/banan-os:main into main
...
Reviewed-on: Sinipelto/banan-os#1
2023-11-20 13:20:51 +02:00
Bananymous
f2397b775c
BuildSystem: Remove old bootloader target
...
And creating image now builds the bootloader
2023-11-20 00:56:06 +02:00
Bananymous
8b81406b81
Toolchain: Build full toolchain with one call to toolchain/build.sh
2023-11-20 00:56:06 +02:00
Bananymous
e2515c1109
Buildsystem: default bootloader is not my custom one
...
You can set BANAN_BOOTLOADER=GRUB to use grub instead. Image creation
does not convert disk image now automatically between bootloaders and
calling ./bos image-full is now required.
2023-11-18 17:18:03 +02:00
Bananymous
5293ae070d
Kernel: ProcFS inodes reflect processes ruid/rgid
...
setgid/setuid did not change the permissions of procfs inodes. This
made Shell launched by init not appear in meminfo.
2023-11-18 14:26:44 +02:00
Bananymous
6e2443ca72
Bootloader do some directory restructuring
2023-11-18 13:59:45 +02:00
Bananymous
a312d75bb2
Bootloader: Implement VESA video mode query and pass it to kernel
...
Kernel now gets framebuffer from bootloader. Framebuffer dimensions
and bpp are hardcoded in bootloader, but will probably be read from
config file at some point.
2023-11-17 22:45:35 +02:00
Bananymous
a554bd0fd8
Bootloader: Fix kernel memset to zero
2023-11-17 21:05:02 +02:00
Bananymous
f0d2a211ea
Bootloader add temporary initial command line
...
This will probably be read from some config file at some point
2023-11-17 20:38:38 +02:00
Bananymous
065eec430e
Kernel/Bootloader: banan-os can now be booted with my bootloader :D
2023-11-17 20:33:02 +02:00
Bananymous
5f4d81a502
Bootloader: Clear screen, better memcpy
...
Clear screen before jumping to kernel. Memcpy now uses ebx as offset
register, so only one register has to updated every loop
2023-11-17 20:31:42 +02:00
Bananymous
41065d2f9a
Kernel: Don't calculate divisor in a for loop in ext2 inodes
2023-11-17 19:02:01 +02:00
Bananymous
3daf3d53a3
Kernel: Serial now uses random size for some serial ports
...
If the serial port doesn't repond with a size, just use a random
one. There is no reason to ditch the whole output if you cannot
determine its size.
2023-11-17 18:56:02 +02:00
Bananymous
ec56e9c6f1
Kernel: Don't use multiboot2 explicitly. Parse it to common structure
...
This allows support of multiple different bootloaders
2023-11-17 18:54:59 +02:00
Bananymous
07ae1bbf34
Bootloader: Load kernel to memory and jump to it!
2023-11-17 16:36:29 +02:00
Bananymous
03b80ed113
Bootloader enter unreal mode at the start of stage2
2023-11-17 14:22:21 +02:00
Bananymous
407a7b80c5
Bootloader: Fix getting command line
2023-11-17 13:17:44 +02:00
Bananymous
8b4f169d0f
Bootloader: implement reading from inode
2023-11-17 13:17:44 +02:00
Bananymous
6f9b3ab5de
Bootloader: add support for indirect inode blocks
2023-11-16 13:34:21 +02:00
Bananymous
aa7a8124ce
Bootloader: Add helpers for printing n bit hexadecimal numbers
2023-11-16 13:30:01 +02:00
Bananymous
a9412aa741
Bootloader: Implement basic ext2 filesystem
...
This can search for files in an ext2 filesystem. Only 12 blocks
are currently supported.
Now only ELF loading is missing for loading the actual kernel!
2023-11-15 16:58:26 +02:00
Bananymous
8aab3a62cc
Bootloader: Build with cmake instead of custom script
2023-11-14 03:44:47 +02:00
Bananymous
b0b39c56ba
Bootloader: Split bootloader into multiple files
...
This cleans up the code since bootloader is starting to near 1k lines
2023-11-14 03:27:52 +02:00
Bananymous
055b1a2a1a
Bootloader move bootloader code from arch directory
...
The os itself only supports x86 so this won't matter. x86_64 and i386
use the same bootloader assembly.
2023-11-13 21:42:58 +02:00
Bananymous
d99ef11e48
Bootloader: installer now uses banan os elf headers intead of Linux's
2023-11-13 21:40:15 +02:00
Bananymous
732eb9da41
fixup
2023-11-13 21:39:48 +02:00
Bananymous
8faad47843
LibELF: Remove 2 32 bit types that don't exist
2023-11-13 21:39:39 +02:00
Bananymous
aa4f3046ff
Bootloader: Find root partition from GPT header
2023-11-13 18:55:48 +02:00
Bananymous
b4775fbe75
Bootloader: installer now patches GPT GUID's
2023-11-13 18:53:55 +02:00
Bananymous
8a5753b0fe
Bootloader: Add API to create GUID from string
2023-11-13 18:52:41 +02:00
Bananymous
1a75262b04
BuildSystem: add bootloader target
...
Use this target to run banan-os with custom bootloader
2023-11-12 01:50:30 +02:00
Bananymous
39801e51da
BuildSystem: add proper clean target
2023-11-12 01:14:42 +02:00
Bananymous
6e3f176457
ls: print link targets when listing files
2023-11-11 23:17:18 +02:00
Bananymous
447da99f0b
Kernel/LibC: Implement readlink and readlinkat
2023-11-11 23:16:52 +02:00
Bananymous
a3a287f5ca
Bootloader: Continue work on bootloader
...
Bootloader can now get the memory map and read cmdline from user.
Now 'just' video mode query, ext2 and ELF parsing are needed :D
2023-11-11 22:49:00 +02:00
Bananymous
c47f6a78bc
Bootloader: Start work on bootloader
...
I wrote a fast first stage bootloader and a installer to put it into
a disk image.
2023-11-09 22:42:47 +02:00
Bananymous
430a006acf
Toolchain: Fix typo when setting make flags
...
I defaultet MAKEFLAGS to -j which will launch processes in parallel
without any limit.
2023-11-09 21:57:45 +02:00
Bananymous
845ed66e5e
Toolchain: add em=gnu to gas. This allows using / in expressions
2023-11-09 21:43:13 +02:00
Bananymous
2191ca46bb
Kernel: Make TmpFS enforce max page count.
2023-11-07 16:13:21 +02:00
Bananymous
cec04a2858
Kernel: Remove now obsolete RamFS
...
Everything is using now the better TmpFS which uses physical pages
for page allocation instead of the static kmalloc memory.
2023-11-07 16:07:11 +02:00
Bananymous
b87351f6d5
Kernel: Make DevFS use the new and better TmpFS instead of RamFS
2023-11-07 16:05:05 +02:00
Bananymous
464737fbe9
Kernel: Add method to TmpFS for looping over all (cached) inodes
2023-11-07 16:04:34 +02:00
Bananymous
8b4f661acb
Kernel: Lock TmpFS in all its methods
2023-11-07 16:03:52 +02:00
Bananymous
27963febc0
Kernel: Implement symlinks to TmpFS
2023-11-07 15:59:50 +02:00
Bananymous
6d4b684219
Kernel: Make PS/2 keyboard wait until interrupts are enabled
2023-11-07 15:58:50 +02:00
Bananymous
670c787af3
BuildSystem: Fix temporary sysroot creation in toolchain compilation
2023-11-07 14:16:49 +02:00
Bananymous
a0fbf18d3b
meminfo: better format for files without permissions
2023-11-07 02:41:01 +02:00
Bananymous
1acc0abf2e
Kernel: Make unlinking from /proc always fail with EPERM
2023-11-07 02:40:27 +02:00
Bananymous
c20f773c5d
Kernel: /tmp is now TmpFS instead of RamFS
2023-11-07 02:36:22 +02:00
Bananymous
a46b2f43d9
Kernel: Make ProcFS use the new TmpFS internally
2023-11-07 02:35:44 +02:00
Bananymous
a20f8607de
Kernel: Implement TmpFS Inode unlinking and deletion
2023-11-06 21:49:12 +02:00
Bananymous
af330f7b8e
Kernel: TmpFS directory inodes now iterate over only valid entries
2023-11-06 21:41:51 +02:00
Bananymous
e33b3bcdff
Kernel: Fix TmpFS directory entry enumeration early return
2023-11-06 21:06:10 +02:00
Bananymous
181d139c7d
Kernel: Fix ext2 directory listing for big directories
2023-11-06 21:05:58 +02:00
Bananymous
639fd8804c
Kernel: Implement TmpFS directory listing
2023-11-06 21:05:58 +02:00
Bananymous
cbb2c37e00
Kernel: Implement TmpFS inode chmod
2023-11-06 20:11:34 +02:00
Bananymous
ab4f033385
Kernel: Cleanup TmpFS code and block access doesn't require allocs
...
TmpFS blocks are now accessed with a simple wrapper
2023-11-06 20:07:09 +02:00
Bananymous
1ed08f62d3
Kernel: TmpInode blocks are on demand allocated
2023-11-06 10:44:37 +02:00
Bananymous
8164c15b6c
Kernel: Implement read/write/truncate for TmpFileInode
2023-11-05 02:28:43 +02:00
Bananymous
f9bf47ab30
Kernel: Start work on proper TmpFS in Heap instead of kmalloc memory
2023-11-04 18:18:45 +02:00
Bananymous
e5ffadb109
Kernel: Add better APIs for fast page
2023-11-04 18:13:16 +02:00
Bananymous
061d10e635
BAN: Update bytespan -> span API
2023-11-04 18:12:46 +02:00
Bananymous
6d899aa6ce
BuildSystem: using sysroot doesn't need root privileges anymore!
...
Sysroot is now created with fakeroot. This allows root access to be
only needed for disk image creation, since it uses loopback devices.
2023-11-04 17:50:43 +02:00
Bananymous
120f7329b1
BAN: Update ASSERT api
...
its now much harder to mix < with <= and > with >=
2023-11-02 00:01:12 +02:00
Bananymous
4f25c20c97
Kernel: Canonicalize vaddr before using it
2023-10-30 19:20:17 +02:00
Bananymous
5e396851f4
Kernel: Remove unused externs in kernel.cpp
2023-10-30 19:09:31 +02:00
Bananymous
a44482639d
Kernel: Temporarily force FileBackedRegion mappings writable
...
Now that write-protect bit is enabled this is neccessary.
2023-10-30 19:08:33 +02:00
Bananymous
3bac19e518
Kernel: Add fast page to page table
...
Add "fast page" to KERNEL_OFFSET. This is always present in page
tables and only requires changing the page table entry to map. This
requires no interrupts since it should only be for very operations
like memcpy.
I used to map all temporary mappings to vaddr 0, but this is much
better. C++ standard always says that nullptr access is undefined
and this gets rid of it.
Fixed some bugs I found along the way
2023-10-30 19:02:09 +02:00
Bananymous
4dbe15aa0e
Kernel: Remove GeneralAllocator since it was not used
2023-10-30 18:13:17 +02:00
Bananymous
1c5985148c
Kernel: Allow offsetof with packed fields
...
This is not standard C++ but should be fine with my toolchain.
2023-10-30 17:51:18 +02:00
Bananymous
ce2461d0e8
Kernel: panic takes arguments as rvalue references
2023-10-30 16:22:02 +02:00
Bananymous
4e785a133c
Kernel: Fix ext2 small link deallocation
...
Also fix deallocation bug
2023-10-30 16:22:02 +02:00
Bananymous
26c7aee327
Kernel: only map kernel from g_kernel_start onwards
2023-10-30 16:22:02 +02:00
Bananymous
0405461742
BAN: Implement better ASSERT macros
...
Implement macros for all basic binary ops. These macros print failed
values when the fail.
2023-10-30 16:22:02 +02:00
Bananymous
8a10853ba7
Kernel: Enable Write Protect. This seems to be good for security
2023-10-30 12:23:22 +02:00
Bananymous
5d34cebeca
Kernel: Fix stack OOB detection
...
I now check both interrupt and normal stack to detect OOB. Processes
are killed if they encouner stack over/under flow.
2023-10-30 12:17:08 +02:00
Bananymous
3d899d2e44
Kernel/LibELF: Map pages always as RW so kernel can write to them
...
Kernel doesn't seem to require W permissions to a page without UEFI
so this had not been found earlier.
2023-10-30 12:14:12 +02:00
Bananymous
f72fdeeb59
BAN: String now uses union for its sso storage
...
This allows String to shrink by 8 bytes since Variant's 8 index is
no longer stored in here.
This required me to make Strings max size one bit less, but that
should still be fine. There should never be strings with size of
over half of the computer's address space.
2023-10-30 11:13:16 +02:00
Bananymous
382f9d9bb3
Userspace: Add quick test for global ctors and dtors
2023-10-30 11:11:10 +02:00
Bananymous
bc1d1bf919
LibC: implement and call __cxa_finalize() on exit()
...
This allows global destructors to be actually called
2023-10-30 11:10:08 +02:00
Bananymous
f05b9a6877
Kernel/LibC: Add crt* files to LibC and remove crt0 from kernel
...
There was no reason for libc get crt0 from kernel.
2023-10-30 11:06:13 +02:00
Bananymous
ea5ed3001e
Toolchain: Clone GCC and Binutils from git
...
This feels much cleaner than just downloading tar balls from
pregiven urls. Also patching works much better like this!
I added --disable-initfini-array since global constructors were
not called.
2023-10-30 11:02:57 +02:00
Bananymous
f312c3a4d7
Kernel: Fix ACPI DSDT address
...
Read x_dsdt address only if fadt's length contains it. Bochs seems
to have version 1 fadt without the x_* fields.
2023-10-29 21:35:11 +02:00
Bananymous
1af3ca19ab
BAN: Rewrite String with small string optimizations
...
String now holds a 15 byte sso buffer. I'm not sure what the size
should actually be but 15 will work for now. Maybe the sso buffer
should be contained in an union with one bit flag in size instead of
variant that uses extra 8 bytes for type index.
This patch buffs sizeof(String) from 24 bytes to 32 bytes on 64 bit.
I assume this is much better version than the old which had to make
allocation even for empty strings :D.
2023-10-29 03:11:13 +03:00
Bananymous
09fcc613c7
BAN: Add variant to ForwardList
...
I should be using the forward list more
2023-10-29 02:28:55 +03:00
Bananymous
3940f53231
BuildSystem: Add bos short hand for building with zsh completions :)
2023-10-28 22:23:29 +03:00
Bananymous
0757834176
Kernel: Rewrite a lot of ext2 code
...
This commit consists of multiple big changes
1. blocks for inodes are now allocated on demand
- reading from non allocated block will just return zeroes
- writing to non allocated block allocates it
2. code doesn't really use raw pointers anymore
- all casts to uint32_t or structures are now replaced with
spans. either as<T> or as_span<T> which both are bounds
checked
3. code doesn't depend on random macros for accessing indirect blocks
- i added some recursive functions which take care of this :)
2023-10-28 22:13:28 +03:00
Bananymous
3bffbe330d
BAN: Update ByteSpan API
...
Add ByteSpan::as_span<T> and const versions of as() and as_span()
require T to be const.
2023-10-28 22:10:47 +03:00
Bananymous
8d583c8b67
Kernel: Fix ext2 inode block allocation with triply indirect blocks
2023-10-28 16:53:00 +03:00
Bananymous
99bde9aa49
Kernel: Fix ext2 inode deletion cleanup
...
I now cleanup all blocks (including direct) in i_block array
2023-10-28 16:52:56 +03:00
Bananymous
98d702ac60
All: Remove read only from ext2 filesystem :)
2023-10-26 13:26:10 +03:00
Bananymous
1ec341e2dd
rm: add option to remove recursively
2023-10-26 02:32:49 +03:00
Bananymous
d09310f388
Kernel: Fix ext2 inode deletion
...
fsck now reports clean filesystem even after deleting files
2023-10-26 02:05:05 +03:00
Bananymous
126edea119
Userspace: implement basic rm command
2023-10-25 21:45:27 +03:00
Bananymous
74bfb930f2
Kernel/LibC: Add syscall and wrapper for unlink
2023-10-25 21:45:04 +03:00
Bananymous
091c5b6a66
BAN: Implement Ext2 file unlinking
...
Ext2 inodes can now be unlinked from directories and after last
inode closes (destructor gets called) we check if link count is 0
and cleanup the inode from filesystem
2023-10-25 21:43:36 +03:00
Bananymous
fda4a4ad24
BAN: ByteSpan can be sliced without specified size
...
This will give span with all remaining size after offset
2023-10-25 21:41:11 +03:00
Bananymous
8bb47aee02
Kernel/LibC/Userspace: Implement mkdir and creat
...
Touch now uses creat insteadd of open with O_CREAT flag
2023-10-25 21:07:26 +03:00
Bananymous
1f794e4ac0
Kernel: Implement directory creation for RamFS
2023-10-25 19:41:34 +03:00
Bananymous
e85f9ac6a1
Kernel: Implement Ext2 directory creation
2023-10-25 19:37:04 +03:00
Bananymous
6ee5576dcc
Kernel: Add Inode API for creating directories
2023-10-25 19:36:04 +03:00
Bananymous
b890e2fc14
Kernel: Ext2FS now uses Ext2Inodes as cached values
2023-10-25 19:34:00 +03:00
Bananymous
4f4b8ada8c
Kernel: Fix read offset of RamFileInode
2023-10-25 02:53:20 +03:00
Bananymous
9e4adc1264
cp: abort copy if write fails
2023-10-25 02:43:02 +03:00
Bananymous
7a54a088b4
Userspace: Add basic chmod command
2023-10-25 02:37:19 +03:00
Bananymous
15bb1804ef
Kernel/LibC: implement chmod syscall + libc wrapper
2023-10-25 02:35:37 +03:00
Bananymous
e8890062d6
Userspace: Implement basic cp
...
This does not support any meaningful command line arguments but
is a good start.
2023-10-25 00:07:25 +03:00
Bananymous
1e2c2fb973
Shell: Set get old termios earlier
...
I sourced the config file before getting old termios. Sourcing
updated the termios so old_termios was always in non canonical, non
echoing mode.
2023-10-24 19:10:53 +03:00
Bananymous
988a4e1cd8
BAN: Fix bug of size of splice after slice()
...
I have no idea what was I doing before :D
2023-10-24 17:23:45 +03:00
Bananymous
adbbdf73c4
meminfo: fix g++ warning for oob write
...
g++ doesn't realize that read can only return -1
2023-10-24 16:50:21 +03:00
Bananymous
e8d20bc653
BuildSystem: Fix bugs in new build system
...
I had not tested the new build system with clean toolchain build
but it seems to work now.
2023-10-24 16:48:46 +03:00
Bananymous
00ee86920a
Kernel: Add timeout to ACHI commands
...
ACHI commands can now fail from timeouts.
2023-10-24 11:56:25 +03:00
Bananymous
51ad27ea3c
BuildSystem: Match README.md with the new buildsystem
2023-10-24 11:56:00 +03:00
Bananymous
df69612bb1
BuildSystem: Rewrite whole build system structure
...
Now you have to use script/build.sh for building and running banan-os
2023-10-24 11:56:00 +03:00
Bananymous
5bfeb9f3ca
Kernel: Rewrite all read/write functions to use BAN::ByteSpan
...
This allows us to not work with raw pointers and use sized containers
for reading and writing.
2023-10-24 11:56:00 +03:00
Bananymous
db5c24b2a5
BAN: Implement ByteSpan
...
This is a span over exisiting containers/data types. I'm not too
happy with the constructors and assignment operators, but they will
work for now
2023-10-20 04:59:29 +03:00
Bananymous
781c950af6
BAN: add helper to cast Span<T> to Span<const T>
2023-10-20 04:59:08 +03:00
Bananymous
e2e5c31d54
Kernel: Map multiboot2 memory in PageTable initialization
...
It cannot be assumed that multiboot data lies between kernel_end
and 2 GiB mark, so I properly allocate virtual address space for it.
2023-10-17 01:15:08 +03:00
Bananymous
be3efb0b92
Kernel: Start using multiboot2 instead of multiboot
...
This allows better compatibility with (U)EFI and gives RSDP location
instead of me having to scan ram to find it.
2023-10-17 01:06:24 +03:00
Bananymous
792bb2df1c
Kernel: TTY doesn't panic if it doesn't find input device
2023-10-16 16:58:39 +03:00
Bananymous
e01928d186
Kernel: Fix device identification with all bits as ones
...
If device identification sends all ones, don't initialize the device.
2023-10-16 16:57:07 +03:00
Bananymous
48980b56ab
Kernel: ATABuses are but to compatibility mode if possible
...
I don't support native mode ata bus (irq sharing) so ata buses are
but to compatibility mode if possible.
2023-10-16 16:56:12 +03:00
Bananymous
b767317a7a
Kernel: Fix ATADevice naming
...
ATADevice now stores its name instead of using static buffer. Old
static buffer was changing on every name query. I just hadn't noticed
since virtual machine disks were always sda.
2023-10-16 16:52:15 +03:00
Bananymous
6f8fce94a0
Kernel: Fix PCI bugs
...
IO BarRegion used vaddr instead of the correct paddr. Add API for
memory region iobase query.
2023-10-16 16:50:49 +03:00
Bananymous
31aa157201
Kernel: Don't require framebuffer
...
Initializes virtual tty only if framebuffer is initialized
2023-10-16 01:44:54 +03:00
Bananymous
5977341610
Kernel: PCI checks if ethernet device is E1000 before initialization
...
I used to treat all ethernet deivices as E1000 but now it is actually
verified before initialization
2023-10-16 01:44:54 +03:00
Bananymous
76f17bd569
Kernel: PCIDevice stores its vendor id and device id
2023-10-16 01:44:54 +03:00
Bananymous
6b1b3d333c
BuildSystem: add cmake variable UEFI_BOOT
...
If this variable is defined in cmake, image will be build with esp
and booted with uefi.
2023-10-16 01:44:54 +03:00
Bananymous
cb65be3e33
Toolchain: Build grub with efi capabilities
2023-10-16 01:37:12 +03:00
Bananymous
dafc016293
Kernel: Clear TTY when setting as current
...
Actually this should replace from old buffer, but this works
for now.
2023-10-13 17:20:26 +03:00
Bananymous
c7b6fc950a
Kernel: Don't crash if header type != 0 in bar region creation
...
Also remove spammy debug printing
2023-10-13 16:32:32 +03:00
Bananymous
45a6783c3d
Kernel: Cleanup GDT code
2023-10-13 16:18:22 +03:00
Bananymous
6b180da4e8
Kernel: Separate scheduler execution and stack loading
...
Not sure if this is actually needed, but this allows actual
executing function to be in clean environment
2023-10-13 16:17:27 +03:00
Bananymous
cf4f5f64a5
Kernel: add NEVER_INLINE and make Interruptable not constructable
2023-10-13 16:17:27 +03:00
Bananymous
5630f64175
Kernel: Add 16 more irq handlers
...
IDT will now panic if trying to assing handler for non supported
irq.
2023-10-13 16:17:27 +03:00
Bananymous
1d61bccfc3
Kernel: Debug temporary debug print just to beginning when full
2023-10-13 12:43:52 +03:00
Bananymous
f842a9255f
Kernel: Allow getting ACPI headers with same signature
2023-10-13 11:24:21 +03:00
Bananymous
72f3c378dd
Kernel: Fix PhysicalRange mapping size
2023-10-13 03:45:01 +03:00
Bananymous
39be6ab099
Kernel: Add temporary terminal output before controlling terminal
...
Starting work on getting this boot on real hardware.
2023-10-13 03:31:36 +03:00
Bananymous
773dcdd3a2
Kernel: Check whether ELF address space can be loaded
...
Before reserving address space in SYS_EXEC verify that ELF address
space is actually loadable. For example when trying to execute the
kernel binary in userspace, binarys address space would overlap with
current kernel address space. Now kernel won't crash anymore and
will just send SIGKILL to the process calling exec*().
2023-10-12 22:59:36 +03:00
Bananymous
f0820e6f24
Shell: Fix parsing $ with unknown character
2023-10-12 22:24:27 +03:00
Bananymous
a2b5e71654
Kernel: Implement AHCI driver
...
SATA drives can now be used with banan-os. This allows much faster
disk access (writing 10 MiB from 30s to 1.5s). This can definitely
be optimized but the main slow down is probably the whole disk
structure in the os.
AHCI drive is now the default when running qemu.
2023-10-12 21:53:48 +03:00
Bananymous
d3e5c8e0aa
Kernel: Generalize ATA device and cleanup code
2023-10-12 21:35:25 +03:00
Bananymous
f4b901a646
Kernel: Add Timer::ns_since_boot()
2023-10-12 21:16:39 +03:00
Bananymous
790064d248
Kernel: Add vaddr/paddr conversion functions to DMARegion
2023-10-12 15:20:05 +03:00
Bananymous
ab8b77406d
Kernel: PCI can now get interrupts for devices
2023-10-11 22:18:58 +03:00
Bananymous
1b9e14a53b
Kernel: PCI cleanup PCI::Device API
2023-10-11 21:52:08 +03:00
Bananymous
d2cfc843e4
BAN: Optional can now be constructed from another Optional
...
Also fix bug in release_value() where we did not call the
destructor.
2023-10-11 20:10:06 +03:00
Bananymous
521513bed2
Kernel: make DMARegion::create static and fix mapping
2023-10-08 18:18:36 +03:00
Bananymous
400db176d1
Kernel: fix some math in physical ranges
...
I allocated 1 bitmap page per 8 data pages. Bitmap page can actually
store 8*PAGE_SIZE data pages.
Also properly set last bits in bitmap. I did not care about endianness
but now we set the bits on unsigned long longs instead of bytes.
2023-10-08 13:25:34 +03:00
Bananymous
211cad03ff
Kernel: Implement bare boness DMA Region
...
This does nothing but allocate contiguous physical and virtual memory
and map it as CacheDisable. Also memory is automatically freed RAII style.
2023-10-08 02:57:22 +03:00
Bananymous
8a9816d6e0
Kernel: Add API for getting contiguous physcial pages
...
This will be used to create DMA regions.
2023-10-08 02:57:22 +03:00
Bananymous
03d2bf4002
Kernel: Rework physical memory allocation
...
PhysicalRange is now much simpler bitmap. This makes expanding
PhysicalRange API much easier.
2023-10-08 02:50:23 +03:00
Bananymous
f071240b33
Kernel: Fix PCI BarRegion offsets
...
Calculations accidentally assumed bar registers are 8 byte instead
of 4.
2023-10-08 02:50:23 +03:00
Bananymous
27364f64a6
Kernel: Rework whole ATA driver structure
...
Make ATA driver more compatible when we are adding SATA support
2023-10-08 02:50:23 +03:00
Bananymous
bcf62c5f2e
Kernel: Rework interrupt mechanism
...
All interruptrable classes now inherit from Interruptable which
has methdo handle_irq which is called on a interrupt.
2023-10-05 18:53:45 +03:00
Bananymous
4d6322ff9c
BuildSystem: Don't strip kernel
2023-10-05 18:52:44 +03:00
Bananymous
2eef581737
BuildSystem: Try to set compiler only if it exists
2023-10-05 18:52:05 +03:00
Bananymous
7ce8e2d57b
cat: Use write() instead of puts to print file contents
...
This allows printing files that contain null bytes behave more like
you would expect
2023-10-04 22:16:19 +03:00
Bananymous
e780eaa45f
meminfo: Print allocated physical memory percentage
2023-10-03 10:39:27 +03:00
Bananymous
44cb0af64f
Shell: source $HOME/.shellrc if found on Shell startup
2023-10-03 10:39:27 +03:00
Bananymous
bb0989fdef
Shell: Implement sourcing scripts
2023-10-03 10:24:10 +03:00
Bananymous
f0b6844feb
meminfo: Add process command line to the output
2023-09-30 23:17:31 +03:00
Bananymous
b712c70c75
Kernel: Expose command line and environment to /proc
2023-09-30 23:01:33 +03:00
Bananymous
797ca65c66
Kernel: Add physical memory info to /proc/{pid}/meminfo
2023-09-30 22:11:45 +03:00
Bananymous
762b7a4276
Userspace: Add meminfo command that parses /proc/{pid}/meminfo
2023-09-30 21:20:53 +03:00
Bananymous
a511441f7e
Kernel: /proc/{pid}/meminfo now reports per process memory usage
2023-09-30 21:20:18 +03:00
Bananymous
cd61d710df
Kernel: Add procfs that contains only pids
2023-09-30 21:19:36 +03:00
Bananymous
f88ad7efcd
Kernel: All process' memory areas can report their virtual mem usage
2023-09-30 21:15:46 +03:00
Bananymous
38320018dc
LibC: Implement stpcpy since gcc seems to need it
...
gcc seems to optimize some calls to strcpy to stpcpy
2023-09-30 20:58:19 +03:00
Bananymous
d883d212b1
Kernel/LibC: dirent now contains file type
2023-09-30 20:46:57 +03:00
Bananymous
dedb2a2399
Kernel: RamInode verifies that you have not specified mode type
...
This is kinda weird behaviour, but it ensures the user cannot
create e.g. CharacterDevice with mode having IFLNK.
The Inode overrider is the only one setting the mode.
2023-09-30 20:46:57 +03:00
Bananymous
8604c55de8
Kernel: Add API for RamDirectoryInodes to delete containing inodes
2023-09-30 19:22:30 +03:00
Bananymous
e949e8550c
Kernel: Rework RamInode API
...
RamInode is now a general RamInode with no data. RamFileInode is now
a inode for regular files. This is much cleaner and more intuitive
since there is no reason for most non-regular inodes to hold data
Vector.
2023-09-30 19:22:30 +03:00
Bananymous
eb5c6cf736
BAN: Remove endianness functions from Math
...
There is now a Endianness.h for these. The functions were super slow.
2023-09-29 19:38:07 +03:00
Bananymous
94ce2c97be
Shell: Quick fix to not freeze for multiple seconds
...
When sync is writing to disk, it reserves whole disk to itself.
This commit makes Shell to read username only once from getpwuid().
We used to get username every time prompt was printed.
2023-09-29 19:20:48 +03:00
Bananymous
3f164c6b82
Userspace: Implement basic test for MAP_SHARED
2023-09-29 18:59:37 +03:00
Bananymous
f953f3d3ff
Kernel: Implement MAP_SHARED for regular files
...
Every inode holds a weak pointer to shared file data. This contains
physical addresses of pages for inode file data. Physical addresses
are allocated and read on demand.
When last shared mapping is unmapped. The inodes shared data is freed
and written to the inode.
2023-09-29 18:59:20 +03:00
Bananymous
9fc75fe445
Kernel: Don't write to stat_loc on SYS_WAIT if it is null
2023-09-29 18:31:44 +03:00
Bananymous
7a5bb6a56b
Userspace: Implement cat-mmap
...
This behaves exactly as cat, but uses mmap to read the file.
2023-09-29 17:24:55 +03:00
Bananymous
d54c6b7f6b
LibC: Fix mmap()
...
mmap() did not pass fildes to the syscall structure.
2023-09-29 17:24:21 +03:00
Bananymous
db5d6a7f80
Kernel: Implement MAP_PRIVATE file mappings
...
mmap() now supports mapping files with MAP_PRIVATE.
2023-09-29 17:23:42 +03:00
Bananymous
4a92f44cf6
Kernel: Implement new abstract MemoryRegion
...
MemoryBackedRegion now inherits from this and is used for private
anonymous mappigs. This will make shared mappings and file backed
mappings much easier to implement.
2023-09-29 16:18:23 +03:00
Bananymous
376b9f7272
LibC: mmap returns MAP_FAILED instead of NULL
2023-09-29 10:38:08 +03:00
Bananymous
7e9e4c47ae
LibELF: Optimize LoadableELF::clone() memory usage
...
We only clone mapped pages that have been marked as writeble.
Read/execute only pages will be exactly as in the file itself and
can be demand paged also :D
2023-09-29 02:05:12 +03:00
Bananymous
603fc200e6
Kernel: Add some sanity assertions/functions
2023-09-29 02:03:19 +03:00
Bananymous
c11e84b248
Kernel: Use the new on demand ELF structure
...
All executable files are now read from disk and paged on demand.
This was a big rewrite of the old ELF library but in the end
everything seems much cleaner, since all the old functionality was
not actually needed for execution.
I have to do some measurements, but I feel like memory usage dropped
quite a bit after this change.
2023-09-29 02:00:10 +03:00
Bananymous
be13120554
LibELF: Implement new ELF structure
...
This structure is used for demand pagable execution. It handles all
memory allocation and file reading.
2023-09-29 01:58:03 +03:00
Bananymous
9943edad5a
LibELF: Add types for native executable
2023-09-29 01:56:57 +03:00
Bananymous
f4049be975
Kernel: Fix off by one error when calculating pages in range
2023-09-29 01:56:15 +03:00
Bananymous
6cf7e01fe9
Kernel: Don't map interrupt stack as userspace accessable
2023-09-28 21:58:24 +03:00
Bananymous
b51d2f5295
Kernel: mmap regions are now demand paged
...
mmap will not actually take any memory unless you use the given
memory.
2023-09-28 21:07:14 +03:00
Bananymous
49d941ad65
LibC: Fix a bug in malloc
...
You could not allocate with size equal to one of the pool sizes.
2023-09-28 21:05:27 +03:00
Bananymous
a66c3bdae5
Kernel: Remove duplicate code in VirtualRange::create_to_vaddr_range
2023-09-28 13:59:49 +03:00
Bananymous
547eabb403
Kernel: Reboot will now always succeed
...
If acpi reset fails, we forcefully trigger a triple fault to restart
the system.
2023-09-28 13:53:03 +03:00
Bananymous
79851394b3
Kernel/LibC/Userspace: Add SYS_POWEROFF + cli tool
...
You can now shutdown/reboot banan-os with the poweroff cli tool.
Reboot doesn't seem to work on qemu.
2023-09-28 12:36:47 +03:00
Bananymous
fcdc922343
Kernel: Enter ACPI mode with lai
2023-09-28 12:30:27 +03:00
Bananymous
0b11d76576
LibC: Add errno for unknown error
2023-09-28 12:06:17 +03:00
Bananymous
f7097398ca
Kernel: Make tty overload correct has_data() function
...
This allows snake game to work again :)
2023-09-28 11:54:12 +03:00
Bananymous
85b1252b9e
Userspace: Use printf length modifiers when printing
2023-09-28 11:49:31 +03:00
Bananymous
1cd12b5f16
LibC: Implement length modifiers to printf
2023-09-28 11:42:57 +03:00
Bananymous
c84b66d078
Shell: String leading and trailing whitespace from commands
...
This fixes a bug of inserting empty argument if command had trailing
whitespace
2023-09-28 10:28:49 +03:00
Bananymous
27adb9486b
BAN: Update Endiannes API
...
Add functions to swap endiannes or convert host to big/little endian
This code should be very compiler friendly and should be optimized to
single bswap instruction on x86.
2023-09-28 01:22:14 +03:00
Bananymous
8d5369fafe
Kernel: Add some functionality to disable TTY input/output
...
Userspace programs can call tty_ctrl() to disable/enable tty from
handling input and displaying output.
This API is probably going to change in the future to ioctl calls
but I'm not sure how ioctl is used and what functionality should it
have. I decided to create whole new function and syscall for now.
Next I will expose framebuffer in /dev/fb0 and then I can start work
on graphical environment! :D
2023-09-27 15:44:05 +03:00
Bananymous
feafc57b63
Kernel: Disable DiskCache sync messages
2023-09-27 14:12:21 +03:00
Bananymous
f9b347f9d9
BuildSystem: Rework calling qemu
...
I change always manually the serial/graphical. When running cmake
you can define variable QEMU_ACCEL that will be used as accelerator.
Also ninja has the following targets for running qemu
1. qemu: Run graphical qemu environment
2. qemu-nographic: Run qemu without graphical screen. You should
select 'serial only' from grub menu.
3. qemu-debug: Run qemu without accelerator and interrupt
debugger.
2023-09-27 13:49:01 +03:00
Bananymous
6e1825d6b4
Kernel: Add missing TRY() to font loading
2023-09-27 00:49:53 +03:00
Bananymous
ec2baeb276
Sync: Add some argument parsing to sync(1)
...
You can specify --block to make the program wait until sync is
complete.
2023-09-27 00:37:23 +03:00
Bananymous
6cb8bda6e1
LibC: add syncsync() to unistd.h
...
This is my own WELL NAMED (:D) function that takes a paramemeter
to make the sync operation synchronous.
2023-09-27 00:35:36 +03:00
Bananymous
05e57801e7
Kernel: SYS_SYNC now schedules sync to happen soon
...
You can pass non-zero argument to the syscall to block until the
sync has finished.
2023-09-27 00:34:00 +03:00
Bananymous
b924c85669
Kernel: DiskCache now requires sync to be called from kernel thread
...
This disables the scenario where user interrupts sync operation
possibly leaving the syncing in invalid state.
2023-09-27 00:32:13 +03:00
Bananymous
09c1aa44d8
Kernel: Allow creationg of empty processes and manual registration
...
You can now create kernel processes without any threads, add the
needed threads and only then register the process and its threads
to the scheduler.
2023-09-27 00:29:45 +03:00
Bananymous
1d470fb5ba
Kernel: All syscalls now validate users pointers
...
We now validate pointers passed by the user, to forbid arbitary
memory read/write. Now the user is only allowed to pass in pointers
in their own mapped memory space (or null).
2023-09-25 22:07:12 +03:00
Bananymous
b4e4f7a6cc
Kernel: Print more detailed output on ISR
2023-09-25 20:33:07 +03:00
Bananymous
55d30a7cc3
Kernel: Ext2 inodes are now stored in cache
...
This allows faster inode access and ensures working inodes when
opened in multiple places.
2023-09-25 20:31:40 +03:00
Bananymous
b62186441b
BAN: Implement basic WeakPtr
...
This can be constructed from classes that inherit from Weakable
2023-09-25 19:43:10 +03:00
Bananymous
8caba1e774
Kernel: Ext2 filesystem now holds 10 preallocated block buffers
...
Inodes can query blocks from this buffer. This allows allocation of
blocks to not fail during normal operations. Also less stress on
kmalloc.
2023-09-25 14:32:25 +03:00
Bananymous
7bdb428938
Kernel: Fix ext2 block allocation
...
Redo ext2 block allocation. This is now much "cleaner" although
I'm not too fond of the macros.
2023-09-25 13:17:44 +03:00
Bananymous
3ea707c0e7
BuildSystem: Optimize image creation
...
We now use truncate to create disk image, since it doesn't require
writing zeroes to full disk. I also removed creation of third
partition as this was not currently used.
2023-09-25 13:15:55 +03:00
Bananymous
18d582c6ce
Kernel: Hacky kmalloc quick fix
...
Remove GeneralAllocator from kmalloc as it is not CriticalScope safe.
This requires increasing kmalloc memory.
2023-09-25 13:13:57 +03:00
Bananymous
8b2bb95b81
Kernel: VirtualRange doesn't store physical addresses of pages
...
This was unnecessarry allocation, since the page table allready
contains virtual address -> physical address mappings.
2023-09-24 01:29:34 +03:00
Bananymous
2ef496a24a
Kernel: all mapped ranges are now stored in one container
...
We just now have a flag if a mapping is unmappable
2023-09-23 23:45:26 +03:00
Bananymous
c0a89e8951
Kernel: Fully remove sys_alloc and sys_free
...
I could delete the whole FixedWidthAllocator as it was now obsolete.
GeneralAllocator is still used by kmalloc. Kmalloc cannot actually
use it since, GeneralAllocator depends on SpinLock and kmalloc runs
without interrupts.
2023-09-23 03:53:30 +03:00
Bananymous
fc953df281
Kernel/LibC: remove PATH resoltion from kernel
...
I have no idea why I had made PATH environment variable parsing
to be part of the kernel. Now the shell does the parsing and
environment syscall is no longer needed.
2023-09-23 03:08:14 +03:00
Bananymous
fe2dca16f0
Kernel/LibC: add flag to enable/disable sse support
...
SSE support is very experimental and causes GP. I decided to make
SSE not default until I get to fixing it :)
2023-09-23 02:28:25 +03:00
Bananymous
f662aa6da2
Kernel/LibC: userspace malloc now uses mmap to get memory
...
We could remove syscalls to allocate more memory. This was not
something the kernel should have done.
2023-09-23 02:26:23 +03:00
Bananymous
fee3677fb9
Kernel/LibC: add mmap for private anonymous mappings
...
This will be used by the userspace to get more memory. Currently
kernel handles all allocations, which is not preferable.
2023-09-22 23:01:14 +03:00
Bananymous
4818c6e3dd
BuildSystem: Add cmake target for debugging qemu
2023-09-22 17:20:35 +03:00
Bananymous
971eb737c1
BAN: Fix LinkedList::pop_back()
2023-09-22 17:20:35 +03:00
Bananymous
9a3286ad57
Kernel: Add constexpr conditional debug prints
2023-09-22 17:20:35 +03:00
Bananymous
c9e09b840e
Kernel: Add LAI as a dependency
...
I did not feel like implementing AML interpreter now, and wanted
everything AML has to offer. I will be writing my own AML interperter
at some point.
2023-09-22 17:20:35 +03:00
Bananymous
8136248a67
Kernel: Fix timer includes
2023-09-22 17:20:35 +03:00
Bananymous
0d67e46041
Kernel: Add config read/write api to PCI
2023-09-22 17:20:35 +03:00
Bananymous
bc1087f5a7
Kernel: Add pointer validation API to page table
2023-09-22 17:20:35 +03:00
Bananymous
3a9c6fc51a
General: remove linecount.sh
2023-09-22 17:20:35 +03:00
Bananymous
7774f56ab6
Kernel: PCI devices can now create region for BAR
...
This creates either MEM or IO region for read/write access to PCI
device.
2023-09-22 17:20:35 +03:00
Bananymous
14a608effd
1000th COMMIT: Kernel: Add basic E1000 driver
...
This driver is only capable to read mac address and enable and read
link status
2023-09-22 17:20:28 +03:00
Bananymous
5fae3cec2a
Kernel: Implement SYS_SYNC and add sync executable to userspace
...
You can (and have to) manually sync disk after writes to it.
2023-09-11 01:26:27 +03:00
Bananymous
b0c22b61ec
Kernel: Writes to disk are not synchronous anymore
...
Implement "proper" DiskCache syncing
2023-09-11 01:25:16 +03:00
Bananymous
82b049204d
Kernel: Print stack trace on isr
2023-09-11 01:20:55 +03:00
Bananymous
aa59142bfa
Kernel: Fix ext2 file write
2023-09-11 01:20:39 +03:00
Bananymous
c55bb77ff5
BuildSystem: remove install-usb.sh since it is not used
...
This was dangerous script since it rewrote /dev/sda
2023-09-10 01:20:44 +03:00
Bananymous
9b4e2e1e21
Kernel: Add basic dd command
...
This only supports if, of, bs, count and status=progress
2023-09-10 01:19:47 +03:00
Bananymous
202c38a65a
Kernel: Improve open() POSIX compatability
...
Also rename Process::sys_creat -> create_file since it is not
actually a syscall and only used by open as a healper.
2023-09-10 00:31:42 +03:00
Bananymous
720bc418a6
All: Clear lines with only whitspace in them
2023-09-10 00:31:42 +03:00
Bananymous
d77f455065
Kernel: Add basic ZeroDevice to /dev/zero
2023-09-10 00:31:42 +03:00
Bananymous
7e08f0fb66
Kernel: Start work on making inodes more thread safe
...
All inode operations are now locked and thread blocked
2023-09-10 00:31:42 +03:00
Bananymous
9e4a87021c
Kernel: Fix directory permissions
...
We did not care about X bit in directories and instead used only the
R bit for search/read.
2023-09-08 11:46:53 +03:00
Bananymous
5887f6bcaa
Kernel: Ext2 directories can allocate new blocks if needed
2023-09-08 10:29:26 +03:00
Bananymous
5d67559e33
Kernel: Fix bug in disk writing
...
I have used two weeks in locating a bug in my ext2 implementation
while the bug was actually in disk write. If you called write_sectors
on disk it would write the first sector_size bytes repeatedly to all
asked sectors and this corrupted the disk...
2023-09-08 02:43:08 +03:00
Bananymous
e631eb7a7a
Kernel: Fix possible out-of-bounds disk access in ext2
2023-09-08 02:42:53 +03:00
Bananymous
64ff4c232a
BuildSystem: Cleanup disk image creation
2023-09-08 02:41:39 +03:00
Bananymous
0ec4f970f7
LibC: fix fread implementation
...
fread() should read until either size*nitems bytes are read or eof
is reached.
2023-09-07 16:00:47 +03:00
Bananymous
afe95be42f
Shell: Clean exit on ^D and use getchar()
...
Use getchar() instead of fread(&ch, 1, sizeof(char), stdin). This
is much cleaner.
2023-09-07 15:51:05 +03:00
Bananymous
14ac1c9904
Init: use read instead of fread()
...
This allows actually correct behaviour. My fread implementation is
flawed. It should not return on '\n'
2023-09-07 15:47:59 +03:00
Bananymous
7c11ea3694
Kernel: Cleanup TTY::read()
2023-09-07 15:27:21 +03:00
Bananymous
c1fd341698
Kernel: TTY now reads input byte by byte
...
This allows correct behaviour for character streams / keyboard
handling. Serial input can now send working ^C :D
2023-09-07 15:06:27 +03:00
Bananymous
0deab1be51
Kernel: Remove bitmap debug printing from ext2 inode allocation
2023-09-06 01:25:09 +03:00
Bananymous
5a623adaa6
Kernel: Correct inode links count
2023-09-05 14:46:56 +03:00
Bananymous
4363118d9d
Snake render grid lines without extra space after last '#'
2023-09-05 14:35:53 +03:00
Bananymous
d613da4b6c
BuildSystem: Don't set permissions on image creation
...
This is already handled by *new* tar ball sysroot
2023-09-05 14:35:53 +03:00
Bananymous
f46f5b2050
Snake: Reorder apple generation/snake body update
...
If new apple was generated to heads previous position after update,
it would not render.
2023-09-05 14:30:30 +03:00
Bananymous
d9c4114b5f
Base: Add grub entries for serial-only boot
...
We can now fully boot with serial input and output :)
Qemu can be run with -nographic flag
2023-09-05 01:07:52 +03:00
Bananymous
ddd36af0f1
Kernel: Add /dev/tty symlink that targets the current tty
2023-09-05 01:07:52 +03:00
Bananymous
35fd30ee29
Kernel: Implement basic RamSymlinkInode
2023-09-05 01:07:52 +03:00
Bananymous
4a0652684c
Kernel: You can now read serial output from the /dev/ttyS*
2023-09-05 01:07:52 +03:00
Bananymous
33c81f00b7
Kernel: Receive interrupts for COM1 and COM2 input
...
The input has to still be attached to terminal
2023-09-04 22:07:40 +03:00
Bananymous
55714b90cd
Kernel: Rework whole Terminal structure
...
Serial monitors can now be used as a output. This requires editing
init code for the stdio opening. Serial input is not supported, so qemu
still needs graphical window for ps/2 keyboard.
2023-09-04 19:34:18 +03:00
Bananymous
9b47603a1d
Kernel: Make serial devices to their own class
2023-09-04 14:57:05 +03:00
Bananymous
2e2a913412
Userspace: Implement basic snake game :)
2023-09-04 14:30:45 +03:00
Bananymous
42b85dc33b
Kernel: Add ANSI support for hiding/showing cursor to TTY
2023-09-04 14:30:09 +03:00
Bananymous
a15ffcb071
LibC: add time() implementation
2023-09-04 13:52:58 +03:00
Bananymous
692b77fb8e
LibC: Add rand() and srand() implementation
...
This code is from the wikipedia page for Permuted congruential generator
2023-09-04 13:52:13 +03:00
Bananymous
044378cfa3
Kernel: Add basic nanosleep, only millisecond percision
2023-09-04 12:59:50 +03:00
Bananymous
f1d4d5f995
Kernel: Add basic support for O_NONBLOCK (only for tty)
2023-09-04 12:57:52 +03:00
Bananymous
19d0fb6fcd
Kernel: add basic fcntl() with couple of commands and no validation
2023-09-04 12:57:09 +03:00
Bananymous
7933265095
Kernel: Split ext2 implementation to multiple files
2023-09-01 15:10:23 +03:00
Bananymous
d810644018
Kernel: Start work on writable ext2 filesystem
2023-08-31 23:40:31 +03:00
Bananymous
a7bfc1c2ec
Kernel: Add missing ififo() to Inode::Mode
2023-08-31 21:38:31 +03:00
Bananymous
104b2740bc
BuildSystem: Add cmake target to validate main partition
2023-08-31 21:37:30 +03:00
Bananymous
65501837b7
Kernel: Stack trace dumping validates pointers before using them
2023-08-31 21:36:23 +03:00
Bananymous
3ed0a54847
Update README.md
2023-08-31 17:54:12 +03:00
Bananymous
cbd2519b9a
Kernel: better handle kernel errors
2023-08-29 00:13:21 +03:00
Bananymous
e8a73f9696
BuildSystem: use -a with rsync
...
This allows cmake to not rebuild whole project every time
2023-08-28 11:38:17 +03:00
Bananymous
1a0d114861
LibC: Don't undef needed values in inttypes.h
2023-08-24 15:48:14 +03:00
Bananymous
5c3497681e
BuildSystem: Add USES_TERMINAL when preparing sysroot
...
You were not able to enter sudo password on sysroot unpacking,
which caused ninja to hang
2023-08-23 20:48:40 +03:00
Bananymous
b05cf9ef09
BuildSystem: Base sysroot is now distributed as a tar ball
...
This allows file and directory permissions work as intended.
cmake is now filled with 'sudo' but with sudo timeout this should be
fine.
2023-08-23 10:38:21 +03:00
Bananymous
a74eb357a1
Shell: hostname is not parsed from /etc/hostname
2023-08-23 10:38:21 +03:00
Bananymous
8eb71084f0
Shell: use process groups more properly
2023-08-22 14:54:50 +03:00
Bananymous
ef1077fd7b
Kernel: kill() with negative pid actually matches pgid
2023-08-22 14:54:15 +03:00
Bananymous
f1ba5c7e0f
Kernel: Process keeps track if forked process has called exec*()
2023-08-22 14:53:46 +03:00
Bananymous
97ea4986af
Kernel/LibC: implement proper getpgid and setpgid
2023-08-22 14:53:12 +03:00
Bananymous
25c021c15b
Kernel: Add function to enumerate processes in session
2023-08-22 14:52:28 +03:00
Bananymous
2bf12a52d1
BAN: increase function size to 5 * sizeof(void*)
2023-08-22 14:52:03 +03:00
Bananymous
6ada36d3cb
Shell/init: We now use pgrp instead of pid and init open terminal
2023-08-22 11:37:04 +03:00
Bananymous
42b90ae76c
Kernel/LibC: Add {get,set}pgrp()
2023-08-22 11:36:33 +03:00
Bananymous
ccc61cb10c
Kernel: Barebones implementation sessions and process groups
2023-08-22 11:35:40 +03:00
Bananymous
be5b81740e
BAN: Add enum class Iteration for for_each loops
2023-08-22 11:30:53 +03:00
Bananymous
e7458ca10a
BAN: Function call is now const
2023-08-22 11:30:40 +03:00
Bananymous
b10168eb1c
LibC: make printf buffer only 128 bytes
...
Only reason for it to be big is if you want super large zero padding
for your number. This will eventually be handled without the buffer.
2023-08-18 16:49:27 +03:00
Bananymous
30463c9082
Id: Print username corresponding to uid/euid
...
Also print euid and egid if they differ from uid or gid.
2023-08-18 15:36:51 +03:00
Bananymous
dc7391dc89
BuildSystem: only apply stack usage warning to libc
2023-08-17 20:49:52 +03:00
Bananymous
eb98d70a0b
Shell: command execution and parsing support piped commands
...
There is still problems with "blocking" builtin commands (time),
return value, ...
2023-08-17 12:05:38 +03:00
Bananymous
dcd8374b89
LibC: add fileno() and fdopen()
...
fdopen() doesn't currently care about mode and will have same mode
as the underlying file descriptor.
2023-08-17 12:03:59 +03:00
Bananymous
8e4216215e
Kernel/LibC: add dup() syscall and function
2023-08-17 12:03:29 +03:00
Bananymous
5bd7099b96
Shell: add basic printf test
2023-08-16 10:49:34 +03:00
Bananymous
9a63d3b2da
LibC: printf handles nan and inf
2023-08-16 10:49:34 +03:00
Bananymous
bf02330db9
LibC: math.h defines is*() macros and uses builtins for values
2023-08-16 10:41:55 +03:00
Bananymous
5806a6484f
cat: use 1025 buffer. this allows reads to be 1024 byte
...
reading from disk currently returns ENOTSUP if buffer size is not
multiple of sector size.
2023-08-16 09:33:14 +03:00
Bananymous
0fa5401800
Shell: $? returns last return value
2023-08-15 09:17:46 +03:00
Bananymous
b30f4cbfb5
Userspace: Add basic whoami command
2023-08-15 09:03:51 +03:00
Bananymous
ba37183c9c
Shell: '\u' in PS1 is replaced with username corresponding to euid
2023-08-14 14:55:23 +03:00
Bananymous
2f298a1979
Shell: ^A moves cursor to the beginning of line
2023-08-14 12:26:22 +03:00
Bananymous
8c282a5d83
Kernel: O_SEARCH doesn't require any permissions
...
Except read permissions for all directories in the path
This allows us to stat e.g. device files for which we don't have
the permissions.
2023-08-11 12:26:07 +03:00
Bananymous
d34c0a5abe
LibC: cleanup fstatat
2023-08-11 12:25:15 +03:00
Bananymous
8f3348cf2b
Kernel: open() now validates file access mode
2023-08-11 11:53:38 +03:00
Bananymous
38c0bc7bae
Kernel: Remove unused syscall
2023-08-11 11:43:48 +03:00
Bananymous
313b00b11f
Userspace: implement basic stat
...
I tried to format the output pretty much how linux does, except for
uid and git -> name resolution which is not implemented
2023-08-11 10:30:50 +03:00
Bananymous
165a379c73
LibC: Fix S_IF* macros and add macros for access/type masks
2023-08-11 10:30:50 +03:00
Bananymous
a7f37236bf
Kernel: Zero initialize threads sse_storage
2023-08-11 00:26:43 +03:00
Bananymous
51532336b0
Kernel: Move structures in boot.S to .data section
2023-08-11 00:26:12 +03:00
Bananymous
03d4b47f63
Kernel: HPET is now used in legacy mode when PIC is forced
2023-08-10 22:01:30 +03:00
Bananymous
8b57edde6b
Kernel: Fix slave PIC
...
we dont mask interrupt 2 in PIC since it corresponds to the
slave PIC. Also cleanup PIC code :)
2023-08-10 21:52:31 +03:00
Bananymous
778778fede
Kernel: HPET doesn't use the legacy mapping anymore
2023-08-10 21:08:32 +03:00
Bananymous
f7449c4ab9
Kernel: APIC now uses MMIO namespace functions for mmio
2023-08-10 21:07:23 +03:00
Bananymous
fd2bcc9156
Kernel: IDT now sends EOI for every interrupt
...
EOI is sent before calling the interrupt handler. This should be fine
since all interrupts are processed with interrupts disabled
2023-08-09 09:57:02 +03:00
Bananymous
a5b1555725
Kernel: Validate HPET tick period
2023-08-09 09:50:38 +03:00
Bananymous
e74fdbc55b
Kernel: Remove get_unix_timestamp from SystemTimer
...
Kernel now uses the percise real_time() and time_since_boot()
2023-08-09 08:57:50 +03:00
Bananymous
008c777a9f
Kernel: Add PageTable::Flags::CacheDisable
...
Also fix multiple places where we were using uint8_t as page table
flags instead of PageTable::flags_t which we promoted to uint16_t
while back.
2023-08-06 23:59:30 +03:00
Bananymous
d8a9d4a24e
Kerne: SystemTimer can now output the current real time
2023-08-04 16:06:47 +03:00
Bananymous
bc0e1fa898
Kernel: Rename TimerHandler to SystemTimer
...
I changed SystemTimer to only handle the "best" supported timer
it can initialize.
2023-08-04 16:06:47 +03:00
Bananymous
17f1737c9a
Kernel: Add function to retrieve boot time as timespec
2023-08-04 16:06:47 +03:00
Bananymous
868444f043
Kernel: F11 now prints current time to debug output
...
This allows better timer percision and system freeze checks
2023-08-04 15:22:51 +03:00
Bananymous
fdae253695
Kernel: Add basic HPET support to replace PIT if exists
...
This works same way as the PIT implementation; calls Scheduler every
milli second.
2023-08-04 15:22:51 +03:00
Bananymous
d4adcff958
Kernel: Move sleep() implementation to TimerHandler
2023-08-04 15:15:00 +03:00
Bananymous
2c59c9a3cc
Kernel: Add more structures to ACPI
2023-08-04 15:13:47 +03:00
Bananymous
3a59a64355
Kernel: Implement basic MMIO functions
...
This is equivalent to IO.h except for memory mapped io instead of
IO ports
2023-08-04 15:12:29 +03:00
Bananymous
9363c1cdaf
Kernel: Move RTC to Timer directory
...
PIT ms counter seems to be off by multiple seconds/minute. I will
be probably changing to HPET for system time
2023-08-04 11:12:16 +03:00
Bananymous
198e6d7cf6
Kernel: Start work on abstracting Timers
2023-08-04 10:29:42 +03:00
Bananymous
07ee898f4f
Kernel: Remove unnecessary timer check from Scheduler
2023-08-04 10:29:42 +03:00
Bananymous
6feb8a99d2
BAN: UniqPtr can now be constructed from other convertible UniqPtr
2023-08-04 10:29:42 +03:00
Bananymous
e57c1fc9fc
Kernel: Threads are deleted sooner and cleaner
...
We now delete threads when
1. it is marked as Terminated and is the current thread
2. it tries to start execution in Terminated state
This allows us to never have thread executing in Terminated state
2023-08-04 10:29:42 +03:00
Bananymous
a11b5ae41f
Kernel: align userspace stacks
...
I was getting #GP on sse instructions
2023-08-03 18:09:48 +03:00
Bananymous
c67a7cec5b
LibC: fix typo
2023-08-02 22:10:12 +03:00
Bananymous
91f04ce250
Kernel: Change PageTable API
...
Getting free pages not reserves them, so you don't have to hold
the page table lock :)
2023-08-02 22:09:14 +03:00
Bananymous
926df2b276
Kernel: PageTable now supports reserved pages
...
You can now map pages as reserved, so that they will not be given
from get_free_page() or get_free_contiguous_pages().
2023-08-01 16:35:54 +03:00
Bananymous
9fe878bbec
Shell: Print if the process exited because of a signal
2023-08-01 14:24:36 +03:00
Bananymous
217dbca7b7
Kernel: Cleanup returns from any kind on interrupts
2023-08-01 14:23:50 +03:00
Bananymous
13852e865c
LibC: sys/wait.h now has proper exit status macros
...
We use the same format as basically every implementation
2023-08-01 10:32:04 +03:00
Bananymous
679d47131d
BuildSystem: Edit build flags regarding sse and warnings
2023-07-31 22:31:17 +03:00
Bananymous
8b1bccb79b
Kernel: store/load sse/mmx/fpu state on isr/irq/syscall
...
I haven't tested this yet but should be fine. This will be optimized
to only save state from threads that are using it
2023-07-31 22:28:57 +03:00
Bananymous
e86e755c51
Kernel: Generally improve signals
2023-07-31 22:28:18 +03:00
Bananymous
8ec6d4c9fc
LibC: we don't parse syscall arguments in unistd
...
We just call Kernel::syscall() with 5 arguments from the variadic function.
This was a necessary addition since the syscall() function
used over 2 KiB of stack space.
2023-07-31 22:24:11 +03:00
Bananymous
08cdf88586
Kernel: Cleanup signal trampoline
2023-07-30 15:58:35 +03:00
Bananymous
6f7d97cf94
Kernel: Remove is_in_syscall from Thread
2023-07-30 14:49:51 +03:00
Bananymous
5e434f5131
Kernel: Hardware exceptions now sends signals to userspace
2023-07-30 14:34:15 +03:00
Bananymous
a152d0aac5
Kernel: raise() now force sends signal
2023-07-30 14:17:07 +03:00
Bananymous
879706e6e9
Kernel: Signals are not queued anymore
...
Posix doesn't require signal queing if you don't use sigqueue() which
we don't support. Process also has its own pending signal mask.
2023-07-29 16:54:31 +03:00
Bananymous
00f1f30a08
Kernel: Userspace sets the foreground process and Shell handles ^C
2023-07-28 18:10:36 +03:00
Bananymous
a5813f9ba5
Kernel: TTY now sends SIGINT on ^C to foreground process
2023-07-28 18:10:09 +03:00
Bananymous
5652af3384
Kernel: Mark reading section from StorageDevice as terminate critical
2023-07-28 18:09:35 +03:00
Bananymous
22cd9af8cc
Kernel: Restructure process and thread termination
...
When we want to kill a process, we mark its threads as Terminating
or Terminated. If the thread is in critical section that has to be
finished, it will be in Terminating state until done. Once Scheduler
is trying to execute Terminated thread it will instead delete it.
Once processes last thread is marked Terminated, the processes will
turn it into a cleanup thread, that will allow blocks and memory
cleanup to be done.
2023-07-28 18:06:20 +03:00
Bananymous
a9cf9bceef
Kernel: Rewrite DiskCache
...
We now cache only clean pages since I don't want to think about
syncing the disk later.
2023-07-27 22:22:39 +03:00
Bananymous
6c0f864a6e
Kernel: Locks allow locking after locker is invalid
...
SpinLock and RecursiveSpinLock will now allow locking after the initial
locker is invalid. This allows us to kill threads even if they are holding
internal locks
2023-07-27 18:52:51 +03:00
Bananymous
e4509d9482
Kernel: DiskCache uses are now done without interrupts
...
This allows disk cache to not be invalid state after partial read/write
2023-07-27 18:52:51 +03:00
Bananymous
0f23e1f0f4
Kernel: Scheduler can now check if tid is valid
...
Tid can become invalid if the thread is already terminated
2023-07-27 18:34:06 +03:00
Bananymous
642a6aa4ad
Kernel: Process::exit() unblocks the whole lock before blocking
2023-07-24 22:29:59 +03:00
Bananymous
432c296b7b
Kernel: Implement SYS_GET_PID and SYS_TCSETPGID
...
we don't have consept of process groups yet
2023-07-24 22:29:59 +03:00
Bananymous
b576d373c4
Kernel: TTY now stores foreground process pid
...
this will be process pgid when we have process groups
2023-07-24 22:29:59 +03:00
Bananymous
522aa8e762
Kernel: add Thread::queue_signal()
2023-07-24 22:26:10 +03:00
Bananymous
146802fa4c
Kernel: Scheduler can now block threads based on tid
2023-07-24 22:24:21 +03:00
Bananymous
cc8af25d73
Kernel: remove Semaphore::is_blocked
...
this will not mean anything after semaphores can spuriously wake up
2023-07-24 22:23:13 +03:00
Bananymous
f5f4bf58ad
Kernel: add is_tty() to inode
2023-07-24 22:19:59 +03:00
Bananymous
3784da0d18
Kernel: you can now ask process if it is userspace process
2023-07-23 18:54:10 +03:00
Bananymous
9eb72f4392
Kernel: OpenFileDesctiptor can now return inode of fd
2023-07-23 18:52:33 +03:00
Bananymous
f7bf6d5e62
Kernel: Change signal kernel API
...
return rsp and rip are now stored per thread
2023-07-23 18:33:10 +03:00
Bananymous
adb14ba373
Kernel: Userspace signal handlers are now called one at a time
...
I added a syscall for telling the kernel when signal execution has
finished. We should send a random hash or id to the signal trampoline
that we would include in the syscall, so validity of signal exit can
be confirmed.
2023-07-23 13:34:53 +03:00
Bananymous
7391d91317
Kernel/LibC: add SYS_SIGNAL/signal()
2023-07-21 20:08:13 +03:00
Bananymous
2149cec29f
Kernel: Make signals more POSIX
2023-07-21 20:01:12 +03:00
Bananymous
ad756c36fc
Kernel/LibC: Add SYS_KILL/kill()
2023-07-21 19:27:38 +03:00
Bananymous
b56316e9da
Kernel: Scheduler now sends queued signals
2023-07-21 19:27:10 +03:00
Bananymous
a989c44211
Kernel: Make signals thread specific
2023-07-21 19:00:59 +03:00
Bananymous
217e5f81cc
Kernel: add default signal actions
2023-07-21 18:02:35 +03:00
Bananymous
5f2549b198
BuildSystem: Strip kernel. We will add the map once we use it
2023-07-21 15:47:31 +03:00
Bananymous
dcd4d0daeb
Kernel/LibC: Add bareboness signals
...
You can now call raise() to raise a signal. Signal handlers are
not yet supported, but the handling works :)
2023-07-21 15:45:02 +03:00
Bananymous
faf4220b38
Kernel: kernel memory takes now full pml4e
...
This allows flags to work properly
2023-07-21 13:47:05 +03:00
Bananymous
193ddaa2f6
Kernel: remove PAGE_FLAGS_MASK as that was not correct anymore
...
After I added NXE bit, the flags mask is no longer valid
2023-07-21 12:01:50 +03:00
Bananymous
46eb27883a
Kernel: Don't map kernel executable memory as writable
2023-07-21 11:17:39 +03:00
Bananymous
2db7cdb71e
Kernel: Syscalls now get the interrupt stack
2023-07-21 11:04:16 +03:00
Bananymous
5411c5aa4a
BAN: Fix function call in Optional
2023-07-21 10:57:46 +03:00
Bananymous
f8a1a10897
Kernel: add NullDevice to /dev/null
2023-07-20 00:06:22 +03:00
Bananymous
adbe13938e
Kernel: move Device.h to its own directory
2023-07-19 23:55:38 +03:00
Bananymous
4d5b14753d
Kernel: cleanup sys_exec()
...
We now scope everyting so desctructors get called
2023-07-19 23:20:39 +03:00
Bananymous
ba9fa00947
Kernel: fix memory leak in PageTable
...
PageTable used to leak 2 pages on creation and other two on deletion
2023-07-19 23:17:39 +03:00
Bananymous
98cedf155c
Kernel: FixedWidthAllocator creation can now fail
2023-07-19 18:07:24 +03:00
Bananymous
88e3998664
Kernel: VirtualRange creation can fail
2023-07-19 17:56:26 +03:00
Bananymous
c0c0bbc1bf
Kernel: SYS_FORK can now fail instead of panicing on error
2023-07-19 17:47:12 +03:00
Bananymous
650e1b4fc5
Kernel: Fix bug which made bochs unbootable
...
We could not boot if ATABus did not have valid primary device.
2023-07-13 15:53:09 +03:00
Bananymous
6c1ada8d0a
Kernel: Enable global bit on kernel pages
2023-07-13 15:23:25 +03:00
Bananymous
7d00c2670f
Kernel: Support execute disable bit
...
We will now map executable memory explicitly as executable.
2023-07-13 14:28:53 +03:00
Bananymous
bca7e9a1e8
Kernel: CPUID can detect wether cpu supports nxe bit
2023-07-13 14:24:58 +03:00
Bananymous
3748f0304f
Kernel: Fix multiple bugs with terminal
2023-07-13 13:09:52 +03:00
Bananymous
2576bdbd14
Kernel: Fix ATA disk and partition numbering
2023-07-13 12:12:47 +03:00
Bananymous
e341a36287
Init: Use the new pwd.h api for user parsing
2023-07-13 12:01:41 +03:00
Bananymous
bba09a3cd0
LibC: add getpwname() and getpwuid()
2023-07-13 12:01:16 +03:00
Bananymous
985df3532b
LibC: implement endpwent(), getpwent() and setpwent()
2023-07-13 11:22:09 +03:00
Bananymous
72041a52e8
Kernel: Ext2Inode::create_file actually sets the inode data
...
We used to just create inode without touching its memory.
2023-07-13 10:20:56 +03:00
Bananymous
891144dac1
BAN: Iterators are now single general type with CONST template
...
This allows us to use the same base class for iterator and
const_iterator which were practically the same code.
2023-07-12 13:35:21 +03:00
Bananymous
41e7b53903
BAN: add either_or and either_or_t
...
This allows you to select type depending on constexpr evaluatable
boolean
2023-07-12 13:34:31 +03:00
Bananymous
6b0920e8c0
BAN: Implement ConstIteratorDouble and add it to HashMap
...
This is same as IteratorDouble except it uses const_iterator and does
not return non-const references.
2023-07-12 11:41:05 +03:00
Bananymous
4285729d5c
BAN: Generalize HashMapIterator to IteratorDouble
...
This iterator should be able to iterate any container within container
with type iterator defined.
This also fixed bug if first entry in outer container is empty container.
2023-07-12 09:29:05 +03:00
Bananymous
a9c10d0751
Base: add empty directories with .gitkeep to base/
2023-07-11 08:02:28 +03:00
Bananymous
74c79c7eff
Kernel: Rewrite whole device structure
...
We now have DevFileSystem which is derived from RamFileSystem. All
devices are RamInodes. We don't have separate DeviceManager anymore.
To iterate over devices, you can loop througn every inode in devfs.
2023-07-10 23:17:14 +03:00
Bananymous
9174a89971
BAN: Add iterators to HashMap
2023-07-10 23:16:41 +03:00
Bananymous
5c94a583bc
Userspace: add basic 'touch' command
2023-07-10 16:38:15 +03:00
Bananymous
6e1fc2766f
tee: indent with tabs
2023-07-10 16:18:08 +03:00
Bananymous
d3bb00cb55
Userspace: Add basic tee command
2023-07-10 16:07:53 +03:00
Bananymous
5a5656b2d3
Kenrel: RamInode now implements truncate()
2023-07-10 16:07:09 +03:00
Bananymous
1a1e584cba
Kernel: OpenFileDescriptors can now store more than 8 bits of flags
2023-07-10 16:06:36 +03:00
Bananymous
65fa05f998
Kernel: add O_TRUNC
...
this is not supported by anything yet
2023-07-10 15:48:18 +03:00
Bananymous
2276fc95b8
Kernel: creat() mode now has to be access mode
...
We provide the S_IFREG in creat
2023-07-10 15:34:41 +03:00
Bananymous
1e173c178d
Kernel: Ext2 fill now return ENOTSUP on write
...
We used to crash the kernel
2023-07-10 15:34:25 +03:00
Bananymous
773747cf9c
Kernel: O_APPEND is now supported
2023-07-10 15:11:27 +03:00
Bananymous
4972284dde
Kernel: open() and openat() now take mode as parameter
...
O_CREAT now tries to create file if O_CREAT is specified
2023-07-10 15:08:54 +03:00
Bananymous
45789fda08
Kernel: You can now read/write to RamInodes
...
RamFS should be stored on physical pages and not in kmalloc, but
that will be implemented later :)
2023-07-10 14:09:35 +03:00
Bananymous
3b5bc63d1b
Kernel: Inode::create_file() now takes uid and gid as parameters
2023-07-10 13:32:10 +03:00
Bananymous
f1089e2b8a
Kernel: start work on ram file system
2023-07-10 13:26:14 +03:00
Bananymous
6d93c1eb92
LibC: add NAME_MAX to limits.h
...
This is defined to 255 which is _XOPEN_NAME_MAX, smallest value
for XOPEN compliance
2023-07-10 11:48:11 +03:00
Bananymous
363c325c79
Kenrel: Fix inode comparison
...
We should not compare rdevs
2023-07-10 11:48:11 +03:00
Bananymous
583504ebe0
Kernel: Inode rename directory functions
2023-07-10 11:48:11 +03:00
Bananymous
b354b77f8b
Kernel: Mark Ext2 classes final
2023-07-10 11:48:11 +03:00
Bananymous
74af46cb4a
BAN: RefPtr can be constructed from other types
2023-07-10 11:48:11 +03:00
Bananymous
19dab08275
Kernel: add more functionality to PCI
2023-07-09 23:04:11 +03:00
Bananymous
3840fbf957
Kernel: Edit lock scopes and make string copy able to fail
2023-07-07 23:12:19 +03:00
Bananymous
78c091f7f8
Kernel: Move open file descriptors to their own class
...
This simplifies code a lot :)
2023-07-07 23:11:37 +03:00
Bananymous
274ecbba78
LibC: limits.h now defined OPEN_MAX
2023-07-07 23:08:49 +03:00
Bananymous
683c2a68cd
Shell: $(...) expansion works now :)
2023-07-06 23:22:57 +03:00
Bananymous
ad98181069
Shell: you can call Shell -c ... to invoke the shell as interpreter
2023-07-06 23:22:49 +03:00
Bananymous
a549336530
Kernel/LibC: add basic dup2
2023-07-06 23:17:54 +03:00
Bananymous
4eb95c963d
Kernel/LibC: Add basic pipe() syscall and command
...
You can now create pipes :)
2023-07-06 22:16:26 +03:00
Bananymous
22caacd2a9
LibC: add read() and write() to unistd
2023-07-06 22:15:55 +03:00
Bananymous
af30d537da
Kernel: TTY now unblocks semaphore after read
...
This allows concurrent reads not fully reading the buffer not block
indefinately.
2023-07-06 21:32:34 +03:00
Bananymous
f1bd26fb92
Kernel: Add O_CLOEXEC
2023-07-06 20:00:33 +03:00
Bananymous
5c6bbcb62f
Kernel: Remove spammy process/thread exit printing
2023-07-06 10:34:46 +03:00
Bananymous
21bd87bb07
Userspace: Shell now has 'env' for printing environment
2023-07-06 10:32:43 +03:00
Bananymous
79450df04c
Userspace: Shell imporove 'time' command
2023-07-06 09:45:04 +03:00
Bananymous
7f8b7b811e
Userspace: Shell now has time builtin
2023-07-06 00:39:04 +03:00
Bananymous
3c068aa0ae
Kernel/LibC: add clock_gettime() for CLOCK_MONOTONIC
...
This gets the number of milliseconds since boot
2023-07-06 00:38:29 +03:00
Bananymous
86df258365
Kernel: rework the whole PageTable structure
...
We now have page table structure for kernel memory which is shared
between all processes.
2023-07-05 23:41:35 +03:00
Bananymous
d99e704728
LibC: Fix syscall SYS_READ and SYS_WRITE arguments
2023-06-19 10:38:29 +03:00
Bananymous
0d620f3e0f
Kernel: Rewrite and optimize DiskCache
...
DiskCache now consists of PageCaches which are caches of contiguous
sectors. This allows the disk cache to be ordered and faster traversal.
We seem to have a problem somewhere during reading. The stack gets
corrupted.
2023-06-19 10:31:47 +03:00
Bananymous
4dce0f9074
Userspace: u8sum fix error message
2023-06-19 10:31:23 +03:00
Bananymous
54f89cba33
Userspace: Shell now processes $ arguments
2023-06-19 01:39:24 +03:00
Bananymous
de88f60d1a
Userspace: Shell argument parsing now appriciates quotes
2023-06-19 01:07:00 +03:00
Bananymous
f7060970e6
Userspace: Shell argument parse now results in BAN::String
2023-06-19 00:34:44 +03:00
Bananymous
e7a98ac6cc
Userspace: Shell now sets SHELL environment variable
2023-06-18 23:35:51 +03:00
Bananymous
10544db52e
LibELF: We use BAN::Vector<uint8_t> as elf storage
...
This is made possible by the dynamic kmalloc
2023-06-18 23:29:23 +03:00
Bananymous
5e123031aa
Kernel: kmalloc has now somewhat dynamic storage
...
Allocations bigger than PAGE_SIZE and those not forced to be identity
mapped are now done on a GeneralAllocator. This allows us to use kmalloc
for big allocations; bigger than the fixed 1 MiB storage.
This is still a hack and the whole kmalloc will have to be rewritten at
some point, but for now this does the job :D
2023-06-18 23:27:00 +03:00
Bananymous
388f530edd
Kernel: Add GeneralAllocator::paddr_of
...
Yoy can now query physical address of a virtual address for general
allocator allocation
2023-06-18 23:25:51 +03:00
Bananymous
d354cccd37
Kernel: Add enum for ISR name to number
2023-06-18 23:24:27 +03:00
Bananymous
714305ef56
Kernel: General allocator takes first valid vaddr as parameter
2023-06-17 22:23:34 +03:00
Bananymous
f83ae1e9c6
Kernel: Move print during boot
2023-06-12 23:45:36 +03:00
Bananymous
c38e8de6b5
BAN: Optional can be constructed inplace
2023-06-12 23:45:36 +03:00
Bananymous
97638f7ade
BAN: Add operator-> and operator* to Optional
2023-06-12 22:25:14 +03:00
Bananymous
326a30d1af
Userspace: Add u8sum
...
This program caluculates the sum of bytes in file mod 256
2023-06-12 20:36:16 +03:00
Bananymous
32e1473c94
Kernel: Make disk IO blocking thread safe
...
This was causing a lot of deadlocks on vms without kvm accel
2023-06-12 18:57:47 +03:00
Bananymous
bf617036c7
Kernel: Rework syscall calling
...
I removed the intermediate function when calling syscalls. Now syscall
handler calls the current process automatically. Only exception is
sys_fork, since it needs a assembly trampoline for the new thread.
2023-06-12 14:16:48 +03:00
Bananymous
ce55422a24
Kernel: Remove Shell from kernel
...
This is now obsolete since we have a userspace Shell.
2023-06-12 02:04:52 +03:00
Bananymous
388cc7c3bb
Base: add home directories for root and user
2023-06-12 02:03:13 +03:00
Bananymous
37f9404d93
BuildSystem: every file except /home/* is now owned by root
2023-06-12 02:03:13 +03:00
Bananymous
38dff41e25
Userspace: Shell processes PS1 '\~' as cwd and implement cd
2023-06-12 02:03:13 +03:00
Bananymous
d360340b9e
Userspace: init now sets HOME environment variable and cd's into HOME
2023-06-12 02:02:52 +03:00
Bananymous
0f63cfa43f
Kernel/LibC: add SYS_{SET,GET}_PWD and chdir, getpwd
2023-06-12 02:02:52 +03:00
Bananymous
537780ee1e
Kernel: allocate thread stacks from 0x300000 onwards
...
I had a problem where thread stack was overlapping with elf loading
2023-06-12 01:02:19 +03:00
Bananymous
4ca99fcb4e
Kernel: Fix bug in elf loading
...
We were allocating one extra page
2023-06-12 00:59:19 +03:00
Bananymous
eb7ee13f43
Userspace: init now default logins as user
2023-06-12 00:46:07 +03:00
Bananymous
b2de706693
Userspace: Shell now uses PS1 as prompt if set
2023-06-12 00:45:47 +03:00
Bananymous
6a8180470d
Userspace: Add color to ls
2023-06-11 23:00:19 +03:00
Bananymous
12d56be5cc
Userspace: init now sets user and group ids before running their shell
2023-06-11 22:37:00 +03:00
Bananymous
bb4d81a4fa
Userspace: Add basic id that prints {,e}{uid,gid} of the current proc
2023-06-11 22:37:00 +03:00
Bananymous
b254ade69b
Kernel: Add SYS_GET_{,E}{UID,GID}
2023-06-11 22:37:00 +03:00
Bananymous
ef4ebaa969
Kernel: Add syscalls for set{,e,re}{uid,gid}
2023-06-11 22:37:00 +03:00
Bananymous
99f8133b91
LibC: gid_t and id_t are now signed types
...
I have no idea why I had made them unisigned
2023-06-11 22:37:00 +03:00
Bananymous
51eb44bf40
Kernel/Userspace: Add basic init process
...
This process parses /etc/passwd and promps login screen.
When an username is entered, it will launch that users shell
2023-06-11 22:37:00 +03:00
Bananymous
a0be415e09
BAN: Add basic Optional
2023-06-11 21:00:25 +03:00
Bananymous
071da18fa3
LibC: add strchrnul()
...
this is a gnu libc extension
2023-06-11 20:18:03 +03:00
Bananymous
c62e820bcf
Kernel: Add basic Credentials for the system
...
Now filesystem access/open, etc confirm that you have access for rwxs
2023-06-11 20:06:06 +03:00
Bananymous
46c34db6cb
Kernel: GeneralAllocator and FixedWidth allocator invalidate TLB caches
...
We were getting random exceptions when reallocating same addressess and
this fixes that problem :)
2023-06-11 15:57:48 +03:00
Bananymous
25a2a4879c
Userspace: add basic ls command
2023-06-11 03:38:44 +03:00
Bananymous
8be28012ee
LibC: Reorder some syscalls
2023-06-11 03:29:22 +03:00
Bananymous
5aed186827
Kernel: Add SYS_OPENAT
2023-06-11 03:29:22 +03:00
Bananymous
91f812e17f
Kernel: Exceptions will now enable interrupts before calling exit()
...
this allows scheduler verification on reschedule() not panic
2023-06-11 03:29:22 +03:00
Bananymous
f0b22c48b2
LibC: implement close
2023-06-11 03:29:22 +03:00
Bananymous
52c4eebd77
Kernel: Implement SYS_FSTAT
2023-06-11 03:29:22 +03:00
Bananymous
24f0d26fce
LibC: Implement basic dirent functionality
...
We don't currently support seeking
2023-06-11 03:29:22 +03:00
Bananymous
825ec221b7
Kernel: we don't panic anymore on unrecognized syscall
2023-06-11 00:18:48 +03:00
Bananymous
e31080bce3
Kernel: allow open() call with O_SEARCH
2023-06-11 00:18:34 +03:00
Bananymous
7a5d5cabad
Kernel: Add syscall for reading directory entries
2023-06-11 00:18:08 +03:00
Bananymous
f7de310889
LibC: add missing O_EXEC and O_SEARCH
2023-06-11 00:17:18 +03:00
Bananymous
e209ca7c82
Kernel: Rewrite directory listing so it can be integrated to libc
2023-06-11 00:17:18 +03:00
Bananymous
ee8de77a90
Userspace: fix return values of cat and echo
2023-06-10 17:34:10 +03:00
Bananymous
db49cbd6e2
Kernel: We now store the processes exit code
2023-06-10 17:31:56 +03:00
Bananymous
e001eecb7b
Userspace: add exit to shell
2023-06-09 01:51:23 +03:00
Bananymous
7f34d00c95
Userspace: add echo
2023-06-09 01:50:18 +03:00
Bananymous
2c18adbddd
Userspace: add ^L support for shell
2023-06-09 01:24:33 +03:00
Bananymous
97c7fc42d1
Kernel: SpinLocks now reschedule if they cannot aquire the lock
...
This allows us to not actually spin doing nothing while waiting for
another (not executing) to release the lock. This api won't probably
work when we get to SMP
2023-06-09 00:53:32 +03:00
Bananymous
7da0627f8e
Kernel: Process::exit() now uses the new Scheduler::reschedule()
...
We use this new function while waiting for all blocking threads to
resume execution
2023-06-09 00:49:19 +03:00
Bananymous
27cef23823
Kernel: Scheduler now has reschedule()
...
This can be called from anywhere and just causes the scheduler to
schedule the next thread. This is more efficient and verbose version
of Scheduler::set_current_thread_sleeping(0), since we don't have
to wake other threads or do other verifications.
2023-06-09 00:47:17 +03:00
Bananymous
b7fc2dc3d0
Kenrel: Rename Scheduler::reschedule -> Scheduler::timer_reschedule
2023-06-09 00:41:43 +03:00
Bananymous
8af390e0f6
Kernel: Big commit. Rewrite ELF loading code
...
We now load ELF files to VirtualRanges instead of using kmalloc.
We have only a fixed 1 MiB kmalloc for big allocations and this
allows loading files even when they don't fit in there.
This caused me to rewrite the whole ELF loading process since the
loaded ELF is not in memory mapped by every process.
Virtual ranges allow you to zero out the memory and to copy into
them from arbitary byte buffers.
2023-06-09 00:37:43 +03:00
Bananymous
96d6453ea8
Kernel: PageTableScope locks the PageTable before disabling interrupts
...
This allows replacing some PageTableScopes with PageTable::lock()
2023-06-09 00:34:41 +03:00
Bananymous
2b9900e56e
Kernel: get_free_contiguous_pages works with non-page aligned addresses
...
also fix bug in ordering
2023-06-06 02:03:23 +03:00
Bananymous
86f58f60cb
LibC: implement setenv, unsetenv, putenv
2023-06-05 22:51:02 +03:00
Bananymous
064ce568c2
Kernel: add basic support for environment variables
...
exec functions will search files from PATH
2023-06-05 22:51:02 +03:00
Bananymous
6aff459e1c
BAN: add StringView::contains(char)
2023-06-05 22:51:02 +03:00
Bananymous
0b1b4d8f7e
Kernel: exec now has better posix errors
2023-06-05 21:12:08 +03:00
Bananymous
3fc2c3529a
Shell: load old termios for process execution
2023-06-05 21:12:08 +03:00
Bananymous
b0e9ab0519
Kernel/LibC: pass environ pointer to process
2023-06-05 21:12:08 +03:00
Bananymous
668517a723
Kernel: TTY now actually flushes on ^D
2023-06-05 20:21:46 +03:00
Bananymous
649f08ec78
Kernel: verify that loaded elfs are executable
2023-06-05 19:29:32 +03:00
Bananymous
2f2c298c68
Shell: add bareboness utf8 support
...
This should work as long as TTY provides only valid utf8.
If the utf is invalid, assertion fails and the shell dies.
2023-06-05 18:55:22 +03:00
Bananymous
90e48970e6
Shell: we now support left/right arrows
2023-06-05 18:24:41 +03:00
Bananymous
480842a203
LibC: abort now prints 'abort()' and exits
...
we used to call assert in abort which then recursively called
abort again.
2023-06-05 18:23:19 +03:00
Bananymous
5425394880
Kernel: TTY now supports CSI s and u
...
These are commonly supported values to save and load cursor
position
2023-06-05 18:19:13 +03:00
Bananymous
a365813fa9
BuildSystem: disable nls from gcc
2023-06-05 17:55:47 +03:00
Bananymous
9d64dbd5c2
Kernel/LibC: add SYS_STAT and stat(), lstat()
2023-06-05 14:37:14 +03:00
Bananymous
30bb61a775
Base: revert bin and lib symlinks to relative paths
...
Absolute paths fucked up toolchain building and usespace linking,
since g++ was finding host libraries from /usr/lib.
2023-06-05 10:08:01 +03:00
Bananymous
1f36ed0cf9
Userspace: Start work on proper shell
2023-06-05 01:42:57 +03:00
Bananymous
d54c76f88a
Base: /lib and /bin are now absolute symlinks
2023-06-04 18:12:05 +03:00
Bananymous
cbb9f47ee5
LibC: add wait and waitpid
...
Note that wait() doesn't work since only waiting for specified
pid is supported. wait() will just return -1 and set errno to
ECHILD.
2023-06-04 18:00:52 +03:00
Bananymous
b68d5a5833
Kernel: Add SYS_WAIT
...
This syscall waits for a given pid.
2023-06-04 18:00:52 +03:00
Bananymous
94d2090777
Kernel: fork() now clones current thread
...
This is how posix specifies thread cloning during fork
2023-06-04 17:40:37 +03:00
Bananymous
e97585daf9
Kernel: Process FixedWidthAllocators come now in 4 sizes
2023-06-04 01:26:43 +03:00
Bananymous
924fc2118c
Kernel: Allocators are now stored in UniqPtr
...
This allows proper memory management, we had some memory leak
2023-06-04 01:25:57 +03:00
Bananymous
51f4c0c750
Kernel: make load_elf() its own function
2023-06-04 01:24:11 +03:00
Bananymous
37b93da650
Kernel: PhysicalRange maps its nodes to kernel vaddr space
...
This keeps the lower half of address space cleaner
2023-06-04 01:20:47 +03:00
Bananymous
35e739dcdd
Kernel: reorder process exit steps
2023-06-04 01:19:04 +03:00
Bananymous
8352392b38
Kernel: You can specify first vaddr for getting free pages
2023-06-04 01:15:48 +03:00
Bananymous
413f05bfca
BAN: Add UniqPtr
2023-06-04 00:39:20 +03:00
Bananymous
dc1aff58ed
Kernel: PAGE_FLAG_MASK is now only 0xF
...
We don't care currenly about anything but the last few bits
2023-06-03 20:08:13 +03:00
Bananymous
9f75d9cfe5
Kernel: PageTable now has debug_dump
...
This dumps all the mapped pages and their flags
2023-06-03 20:08:13 +03:00
Bananymous
a42af7e973
Kernel: boot.S is back to 2 MiB pages
...
bochs doesn't seem to support 1 GiB pages
2023-06-03 18:53:36 +03:00
Bananymous
2ce244d303
BAN: Errors now includes assert.h
2023-06-03 18:53:05 +03:00
Bananymous
a775a920d0
BuildSystem: remove sse and sse2 from userspace
2023-06-03 16:05:32 +03:00
Bananymous
4f84faf392
LibC: printf string persision works now
2023-06-03 15:07:02 +03:00
Bananymous
a4cb5d8360
Kernel: Inode/Device detection is done with overridden bool functions
2023-06-03 13:28:15 +03:00
Bananymous
da7f09cf82
Kernel: Heap will return 0 if no free page is available
2023-06-03 02:55:31 +03:00
Bananymous
0166af472b
Kernel: DiskCache will try to shrink_to_fit after cache cleanup
2023-06-03 02:55:22 +03:00
Bananymous
884d986bd6
Kernel: DiskCache won't crash when running out of kmalloc memory
2023-06-03 02:36:20 +03:00
Bananymous
59b807189f
Kernel: add basic disk cache
...
ATADevices now add disk cache to themselves
2023-06-03 02:23:14 +03:00
Bananymous
fb1c7015b1
Kernel: Shell 'memory' now prints heap memory usage
2023-06-03 02:22:18 +03:00
Bananymous
d4123f62b2
Update README.md
2023-06-02 18:43:30 +03:00
Bananymous
a3f410d1a1
Userspace: create_program creates proper cmake files again
2023-06-02 18:42:25 +03:00
Bananymous
1d19a4bffe
BuildSystem: all scripts have now bash shebang
...
I could not use the scripts on debian
2023-06-02 18:41:45 +03:00
Bananymous
271dd91292
BuildSystem: add rule to build libstdc++
...
We can now build libstdc++ and actually link with g++
2023-06-02 18:39:42 +03:00
Bananymous
9bd4d68f9c
Kernel: Shell ls and stat now properly show symlinks
2023-06-02 18:22:56 +03:00
Bananymous
3c3c7826ef
LibC: Add simple definition for realloc
...
The syscall just crashes the kernel currently. I will implement
this when needed
2023-06-02 17:56:13 +03:00
Bananymous
2207357b93
LibC: add __cxa_at_exit() for libc
2023-06-02 17:50:55 +03:00
Bananymous
3a69768eb0
LibC: remove select() declaration
...
This already comes from sys/select.h
2023-06-02 17:29:09 +03:00
Bananymous
afb29ff3ec
LibC: rename [[noreturn]] to __attribute__((__noreturn__))
...
This compiles with C compiler
2023-06-02 17:28:36 +03:00
Bananymous
e6f0f891a6
LibC: stdlib.h doesn't seem to typedef wchar_t without __need_wchar_t
2023-06-02 17:27:31 +03:00
Bananymous
36e5aa4683
LibC: fix INFINITY definition typo
2023-06-02 17:27:14 +03:00
Bananymous
7738050105
LibC: fix DIR typedef for C code
2023-06-02 17:26:38 +03:00
Bananymous
4bf11ec349
LibC: complex.h undefs I before defining it
2023-06-02 17:13:09 +03:00
Bananymous
d821012eed
LibC: mbstate_t is empty struct
2023-06-02 17:10:29 +03:00
Bananymous
35c6edd989
LibC: fix sig_atomic_t definition
2023-06-02 17:08:43 +03:00
Bananymous
633cb4f282
Kernel: VFS now has max link depth of 100
2023-06-02 12:50:40 +03:00
Bananymous
4d4d0e26a9
Kernel: Symlinks are now working
...
We still have to implement loop or depth detection
2023-06-02 11:43:46 +03:00
Bananymous
feea2d4024
BAN: Fix function call in Vector
2023-06-01 00:50:04 +03:00
Bananymous
0ffd2a5c1d
Kernel: Shell can now list symlinks
2023-06-01 00:25:53 +03:00
Bananymous
232fdcb82c
Kernel: add basic support for symlinks
2023-06-01 00:24:45 +03:00
Bananymous
0ccc23d544
Kernel: Shell opens standard files
2023-05-31 23:14:15 +03:00
Bananymous
789ca3db1a
BuildSystem: cmake creates /usr/bin
2023-05-31 23:13:53 +03:00
Bananymous
cb359a05dc
BuildSystem: link libraries when they change
...
This also fixed the need for manual linkin on firt build
2023-05-31 23:01:40 +03:00
Bananymous
14982c137a
Userspace: make test program link against libc on change
2023-05-31 22:36:47 +03:00
Bananymous
0acab11620
LibC: add execl
2023-05-31 22:36:26 +03:00
Bananymous
02f0239016
Kernel: Cleanup exec code
2023-05-31 22:36:05 +03:00
Bananymous
ab61b49aca
Kernel: Add SYS_EXEC syscall
2023-05-31 20:57:33 +03:00
Bananymous
4da1d6fd27
Kernel: Implement Process::exec()
2023-05-31 20:56:29 +03:00
Bananymous
909e847369
Kernel: Move userspace entry functions to Process instead of Thread
2023-05-31 19:31:10 +03:00
Bananymous
eafa09fecf
Kernel: boot.S maps GiB as single pdpte
2023-05-31 00:51:15 +03:00
Bananymous
8175348284
Kernel: Fix comment
2023-05-31 00:51:15 +03:00
Bananymous
b2832cb47a
Kernel: PageTable destructor works now
...
we are successfully booting higher half kernel now :)
2023-05-31 00:44:14 +03:00
Bananymous
9f499991c8
Kernel: PageTable::create_userspace() now works
2023-05-31 00:44:14 +03:00
Bananymous
9a416e8ae8
Kernel: kmalloc free error prints the pointer
2023-05-31 00:34:56 +03:00
Bananymous
911922c6a3
Kernel: RSDP location is now done with virtual addresses
2023-05-31 00:34:21 +03:00
Bananymous
1f2fd59ad5
Kernel: Physical range now calculates RAM with physical addresses
2023-05-31 00:33:44 +03:00
Bananymous
708d401d2c
Kernel: Heap gets multiboot pointer with P2V
2023-05-30 23:57:44 +03:00
Bananymous
ed0dcacab3
Kernel: Move V2P and P2V to Memory/Types.h
2023-05-30 23:57:03 +03:00
Bananymous
e86050f343
Kernel: PageTable::map_range_at maps correctly the last page
2023-05-30 23:56:07 +03:00
Bananymous
57f7da6ce1
Kernel: Booting with higher half kernel gets to Heap initialization
2023-05-30 22:21:12 +03:00
Bananymous
93e6455171
Kernel: start work on higher half kernel
2023-05-30 08:00:17 +03:00
Bananymous
8f38780197
Toolchain: lib gcc is wuild with mcmodel=large
2023-05-30 07:59:41 +03:00
Bananymous
341f7e41e5
LibC: Fix some headers to make gcc build again
2023-05-30 01:17:45 +03:00
Bananymous
265fe9c62e
Kernel: We now identity map full GiB in boot.S
...
The paging structure is pre-built so no unnecessary calculations are done
2023-05-30 00:08:52 +03:00
Bananymous
3b9d60d7cb
Kernel: Remove unused includes of CriticalScope
2023-05-29 21:15:55 +03:00
Bananymous
278b873e89
Kernel: Remove unnecessary usages of PageTableScope
...
This should be used as few times as possible since it calls 'cli'
2023-05-29 21:11:29 +03:00
Bananymous
e640344d7a
Kernel: Rename MMU to PageTable
...
This is more descriptive name for what it actually represents
2023-05-29 21:06:09 +03:00
Bananymous
7151bb86a8
Kernel/LibC: opening standard files is done in libc
2023-05-29 20:21:19 +03:00
Bananymous
2a34391b71
LibC: open() now just returns syscall(SYS_OPEN, ...)
...
errno is handled in syscall()
2023-05-29 20:19:17 +03:00
Bananymous
3d95cf02f3
Kernel: We can't lock the MMU lock in load()
...
It needs to be callable always by scheduler
2023-05-29 19:39:35 +03:00
Bananymous
dd3f34cb2c
Kernel: Make RecursiveSpinLock thread safe
...
also SpinLock is now implemented with gcc builtins
2023-05-29 19:38:09 +03:00
Bananymous
0c316ebfb2
Kernel: Add SYS_SLEEP
2023-05-28 22:34:48 +03:00
Bananymous
282bf24f65
Kernel: fork() now copies allocations through FixedWidthAllocator
2023-05-28 21:34:35 +03:00
Bananymous
f964f6be8d
Kernel: Move page macros to Types.h
2023-05-28 21:03:08 +03:00
Bananymous
0202ccec5f
Kernel: ISR will now crash userspace process instead of panicing kernel
2023-05-28 20:53:10 +03:00
Bananymous
636c308993
Kernel: fork() now copies allocation done through GeneralAllocator
2023-05-28 20:37:39 +03:00
Bananymous
6fdbe6f9c2
Kernel: Add bareboness fork() function
2023-05-28 18:08:49 +03:00
Bananymous
c19f4c019a
Kernel: Add invalidate() to MMU
2023-05-28 18:05:49 +03:00
Bananymous
83eb3dc0cb
Kernel: fix MMU::map_page_at()
...
We used to only reassign if flags changed
2023-05-28 17:57:05 +03:00
Bananymous
481c8406f3
LibC: fputs uses fputc instead of putc
2023-05-28 17:48:34 +03:00
Bananymous
0129619d9a
Kernel: Processes and Threads use VirtualRange memory allocations
2023-05-28 17:48:34 +03:00
Bananymous
e0479b291d
Kernel: Move PhysicalRange to its own file and add VirtualRange
2023-05-28 17:48:34 +03:00
Bananymous
b847d7dfd5
Kernel: MMU::get() is now MMU::kernel
...
MMU is can now be locked with RecursiveSpinLock.
Scheduler now has get_current_tid() that works before the Scheduler
is initialized. This allows RecursiveSpinLock usage early on.
2023-05-28 16:18:18 +03:00
Bananymous
245dff8027
Shell: we now link BAN (we can't use it though)
2023-05-26 22:31:21 +03:00
Bananymous
fed690a7f2
Kernel: Directory listing is working again
2023-05-26 22:31:21 +03:00
Bananymous
54d981120d
Kernel: kmalloc debug_dump is marked [[maybe_unused]]
2023-05-26 22:31:21 +03:00
Bananymous
f79250c4d4
LibC: Rewrite all the headers.
...
We now have more or less posix issue 2018 conforming libc headers.
This was a really time consuming and boring operation but it had to
be done.
Now we get to actually start implementing libc :)
2023-05-26 22:31:21 +03:00
Bananymous
78b62776d2
BAN: libban is now build into library dir
2023-05-26 22:31:21 +03:00
Bananymous
bda4614783
BAN: Errors.h can be included from userspace
2023-05-26 22:31:21 +03:00
Bananymous
0ab3332ad3
Userspace: Start work on shell
2023-05-26 22:31:21 +03:00
Bananymous
9e0abbc2f0
Kernel: Add bareboness possibility to set termios
2023-05-26 22:31:21 +03:00
Bananymous
496adb61a4
Buildsystem: Fix userspace link order
2023-05-26 22:31:21 +03:00
Bananymous
4a4a3bf184
Kernel/LibC: move file offset back to kernel
...
This makes keeping track of offsets easier and more proper
2023-05-26 22:31:21 +03:00
Bananymous
f33e78882e
Kernel: Add argc and argv to process entry
2023-05-16 00:27:49 +03:00
Bananymous
0ff067bdb7
Kernel: Add MMUScope
...
This disables interrupts and loads specified mmu for the
scope it lives in
2023-05-16 00:26:39 +03:00
Bananymous
31ac3260ed
Kernel: MMU keeps track of the current
2023-05-16 00:26:39 +03:00
Bananymous
d82c6c2337
LibC: fix bugs with printf
2023-05-15 22:47:08 +03:00
Bananymous
632b699475
BAN: add is_arithmetic and is_signed to Traits.h
2023-05-15 20:26:29 +03:00
Bananymous
85039020d3
Kernel: argc is passed as zero to userspace
2023-05-11 18:28:32 +03:00
Bananymous
1a0fdc5a44
LibC: printf now prints 0 as integer
2023-05-11 18:20:37 +03:00
Bananymous
fb1bab7c30
BuildSystem: add helper to create userspace programs
2023-05-11 18:10:06 +03:00
Bananymous
7eb43990ad
BuildSystem: userspace has cmake target
2023-05-11 16:19:53 +03:00
Bananymous
53f4b5a9da
LibC: add function declarations to sys/stat.h
2023-05-11 15:11:33 +03:00
Bananymous
1d4a6c3a42
LibC: add function declarations to dirent.h
2023-05-11 01:42:52 +03:00
Bananymous
40083e4aa1
LibC: add definitions to math.h
2023-05-11 01:40:42 +03:00
Bananymous
bd929bff07
LibC: add defines in stdio.h
2023-05-11 01:39:16 +03:00
Bananymous
cd4a0530fa
LibC: add function declarations to unistd.h
2023-05-11 00:34:03 +03:00
Bananymous
273fdd2235
LibC: add function declarations to string.h
2023-05-11 00:34:03 +03:00
Bananymous
b20f2e8d31
LibC: add function declarations to math.h
2023-05-11 00:34:03 +03:00
Bananymous
e756cde2b1
LibC: define all errnos and strerror{name,desk}_np
2023-05-11 00:34:03 +03:00
Bananymous
de18d3e64d
LibC: add function declarations to time.h
2023-05-11 00:34:03 +03:00
Bananymous
441999ba9f
LibC: add more types to sys/types.h
2023-05-11 00:33:53 +03:00
Bananymous
dd046b1ace
LibC: Add dummy signal.h
2023-05-10 23:20:27 +03:00
Bananymous
926aa238ab
LibC: add toupper, tolower in ctype.h
2023-05-10 23:13:56 +03:00
Bananymous
01fa521a03
LibC: Add dummy setjmp.h
2023-05-10 23:00:53 +03:00
Bananymous
f31da19266
LibC: Add dummy locale.h
2023-05-10 22:58:07 +03:00
Bananymous
48edc38817
LibC: implement printf conversions e, E, f, F
2023-05-10 22:36:03 +03:00
Bananymous
ac12132ac0
LibC: add math.h with floorl
2023-05-10 22:35:42 +03:00
Bananymous
13fabcc1f1
BAN: add pow, log2, log10, log in math
...
These are implemented using x86 floating point assembly
2023-05-10 19:03:33 +03:00
Bananymous
67005a80be
LibC: add working f modifier to printf
...
This is implementation will write out of bounds if the conversion
takes more than 1024 characters (either super large number or very
big percision).
Also we dont handle NaN and infinity cases
2023-05-10 15:43:42 +03:00
Bananymous
f43bfcb398
LibC: add better error string support
2023-05-10 02:22:31 +03:00
Bananymous
d5ce4c9d2c
LibC: add probably functional *printf
...
I wrote a general printf function that takes an putc function
pointer. We can use this to implement all the printf family
functions. I haven't done thorough testing with this, but it seems
to be functional for the most part
2023-05-10 02:00:28 +03:00
Bananymous
1cf7ef3de6
Kernel: Remove offset from OpenFileDescriptor
...
This is now handled on the libc side. There might be reasons to
have it in kernel side, but for simplicity's sake I'm moving it
to libc for now :)
2023-05-09 20:31:22 +03:00
Bananymous
5248a3fe48
LibC: Fix bug in *printf
2023-05-09 20:30:12 +03:00
Bananymous
812e61ca70
Kernel: Add barebones GeneralAllocator for >4096B
2023-05-08 22:10:49 +03:00
Bananymous
2d0a5a9e15
Kernel: FixedWidthAllocator operates on MMU
...
Instead of Process* we use MMU& in FixedWidthAllocator since it is
everything it actually needs :)
2023-05-08 00:06:56 +03:00
Bananymous
f32d594879
Kernel: We add FixedWidthAllocators on demand
...
On SYS_ALLOC we will add a new FixedWidthAllocator if the old ones
are already full or we don't have one with proper size. This allows
arbitary number of allocations as long as you have enough memory
available :)
Next I will be writing a general allocator for allocations larger
than 4096 bytes which should make SYS_ALLOC syscall complete :)
2023-05-07 23:57:01 +03:00
Bananymous
c2ad76fe4f
BAN: Error uses 64 bit error codes
2023-05-07 02:09:52 +03:00
Bananymous
10d9b72da1
LibC: syscall() now returns -1 on error and updates errno
2023-05-07 01:51:39 +03:00
Bananymous
2fe9af7165
Kernel/LibC: add free function for FixedWidthAllocator
...
I have to rework the syscall API and allocators in process. For
now this works well enough :)
2023-05-07 01:21:50 +03:00
Bananymous
0deda83d05
BuildSystem: linker -O2 doesn't do anything? hopefully
2023-05-06 19:58:08 +03:00
Bananymous
ff5bcd4416
Kernel: Add basic fixed width allocator for userspace
...
We have to move process stacks to the general heap and maybe map
kernel to higher half.
2023-05-06 19:58:08 +03:00
Bananymous
b65cd1d09b
Kernel: Invalid physical addresses from heap are specified now by 0
2023-05-06 17:34:22 +03:00
Bananymous
bc35a561d3
Kernel: GDT tss selector is now 16 bit value
2023-05-06 17:34:22 +03:00
Bananymous
06bc807e34
Kernel: MMU can now provide info about virtual address space
2023-05-06 17:34:22 +03:00
Bananymous
6262e41de1
Kernel: ISRs now print pid and tid
2023-05-06 00:10:15 +03:00
Bananymous
0cb53efa01
Kernel: 64 bit MMU now properly identity maps kernel
2023-05-05 14:19:28 +03:00
Bananymous
4e859bedbc
Kernel: TTY input process is now single instance
...
Process sends key events to the active (currently only) tty
2023-04-30 16:11:14 +03:00
Bananymous
f139fc2229
Kernel: namespace and function renames
...
MMU moved to namespace kernel
Kernel::Memory::Heap moved to just Kernel
MMU::map_{page,range} renamed to identity_map_{page,range}
Add MMU::get_page_flags
2023-04-28 14:48:38 +03:00
Bananymous
e48acbb03b
Kernel: Add set_tss_stack() to 32 bit
2023-04-28 14:44:23 +03:00
Bananymous
d1155c968e
Kernel: dprintln file name is now relative
...
This makes file names much shorter
2023-04-28 14:43:19 +03:00
Bananymous
88a2c60065
BAN: Add is_power_of_two to Math functions
2023-04-28 14:42:49 +03:00
Bananymous
5bfcf6783e
LibC: add proper stdlib.h header
...
Function declarations taken from the posix specifications
2023-04-27 15:14:03 +03:00
Bananymous
94f8a657f1
LibC: add link to posix stdio.h
2023-04-27 14:16:25 +03:00
Bananymous
7fac2a7526
Userspace: Simple stdio test
2023-04-25 14:50:26 +03:00
Bananymous
46dcf98fc1
Kernel: Scheduler updates tss stack on thread execution
2023-04-25 14:49:50 +03:00
Bananymous
58ce907327
Kernel: Usespace threads now have an interrupt stack
2023-04-25 14:49:18 +03:00
Bananymous
6ecc8cac0e
Kernel: TSS stack can be set after initialization
2023-04-25 14:48:12 +03:00
Bananymous
bd95f17426
Kernel: Stack pointer out of bounds now panics with a message
2023-04-25 13:40:55 +03:00
Bananymous
0718bea5a1
LibC: Fix some bugs
2023-04-25 13:27:01 +03:00
Bananymous
175f07cd2f
Kernel: Fix bug in Process::create_userspace()
...
We used to write more than we needed to. This could lead to unwanted
page faults
2023-04-25 13:21:28 +03:00
Bananymous
7b19d6e479
LibC: fread() now does a single syscall
2023-04-25 12:38:08 +03:00
Bananymous
77c83e5552
Kernel: Fix possible dead lock in Process::read()
2023-04-23 14:46:18 +03:00
Bananymous
b15deb420f
LibC: Write mostly functioning stdio
2023-04-23 14:32:37 +03:00
Bananymous
b38989d594
Kernel: Add ASSERTion to Process::exit()
...
This is just so I don't forget that exit can currently only
be called on the executing thread itself
2023-04-22 19:05:27 +03:00
Bananymous
79e6de325f
Kernel: Process can now load 32 bit elf files on i386
...
We are page faulting on process exit but I'm investigating
the reason.
2023-04-22 19:03:30 +03:00
Bananymous
163d2e4ba8
LibELF: Add 32 bit support
2023-04-22 19:00:18 +03:00
Bananymous
4f8f3ddc29
Kernel: Fix 32 bit MMU
2023-04-22 18:22:39 +03:00
Bananymous
82a1a29260
Kernel: More proper paging in Elf loading
2023-04-22 18:17:44 +03:00
Bananymous
8a5608df91
Kernel: d{print,warn,error}ln(...) now has a spinlock
2023-04-22 17:58:51 +03:00
Bananymous
3f1c0ec91b
Kernel: Process now frees up its pages on destruction
2023-04-22 16:54:46 +03:00
Bananymous
1406a75a92
Kernel: Cleanup process creation for userspace
2023-04-22 16:51:50 +03:00
Bananymous
8001493df3
Kernel: Fix some deadlocks in the Process
2023-04-22 16:19:57 +03:00
Bananymous
8c1f5bfe1e
Kernel: Remove obsolete userspace stuff from kernel
2023-04-22 15:38:45 +03:00
Bananymous
ec8b9640e2
Kernel: Usespace programs are now ran through ELF files
...
only 64 bit elf files are supported for now.
2023-04-22 15:35:32 +03:00
Bananymous
4ae1332a43
LibELF: Header printing can now be turned off
2023-04-22 15:34:09 +03:00
Bananymous
10c884bba4
LibELF: ELF now has methods for accessing more attributes
...
You can now access the program headers and the memory itself
2023-04-22 15:31:05 +03:00
Bananymous
c15f031c3f
LibC: puts() now just calls syscall(SYS_WRITE, ...)
2023-04-22 15:29:38 +03:00
Bananymous
1b4c744974
LibC: syscalls have now proper argument order
2023-04-22 15:29:15 +03:00
Bananymous
d9068eebb5
Kernel: kmalloc does not dump stack trace
...
dump_stack_trace() page faults and i dont feel like debugging this
now :)
2023-04-21 13:45:13 +03:00
Bananymous
3ad0d2328d
Kernel: Don't call 'cli' on interrupt
...
This is automatically done because we are using interrupt gates
in the IDT
2023-04-21 11:18:08 +03:00
Bananymous
3f2beb4547
Kernel: Fix syscall return value in 32 bit
2023-04-21 11:08:02 +03:00
Bananymous
be14a6c239
Kernel: Stack pointer is validated when updated
...
This allows us not to fail stack pointer when in syscall since
interrupts use their own stack
2023-04-21 10:40:24 +03:00
Bananymous
3aa0eeb4a3
Kernel: Add barebones per process virtual addresses
...
We now assign every (userspace) process its own MMU which we load
in scheduler. This allows every process to have separate virtual
address space.
This is very hackish implementations but it works for now
2023-04-20 00:45:41 +03:00
Bananymous
b3eeb6412f
Kernel: Add some bareboness functionality to map virtual addresses
2023-04-19 23:51:36 +03:00
Bananymous
d38470c8e2
Kernel: Rename MMU::{un,}allocate... to MMU::{un,}map
...
This is more appropriate name for the behaviour :D
2023-04-19 21:50:30 +03:00
Bananymous
a159c980ee
Kernel: kmalloc will always print debug on failed alloc
2023-04-19 18:05:01 +03:00
Bananymous
a993d997ad
LibELF: remove unused file
2023-04-19 17:32:12 +03:00
Bananymous
4475e3e184
Kernel: ATAController will fail to initialize in native mode
2023-04-19 17:29:36 +03:00
Bananymous
cf0320e47d
Kernel: PCI devices now report their prog_if
2023-04-19 16:43:05 +03:00
Bananymous
cd03a95128
Kernel: Shell fix file reading
...
We were reading 8 bytes at a time instead of the 1024 we were
supposed to :DD
2023-04-19 14:09:23 +03:00
Bananymous
51e299c7e3
Kernel: Shell now has exit() command
2023-04-19 12:53:09 +03:00
Bananymous
6f65453fd4
Kernel: Fix Process::exit() and where it is called from
...
cksum doesn't seem to work anymore on big files. I have to look
into this. It locks up after couple of seconds...
2023-04-19 12:52:21 +03:00
Bananymous
67e0c21e0f
Update README.md
...
Add cool badges :D
2023-04-19 00:46:42 +03:00
Bananymous
702016a6e3
LibC: exit() calls _fini()
2023-04-19 00:42:00 +03:00
Bananymous
d74ce4950c
Kernel: We now launch Shell again on boot
...
Adding this just before push :D
2023-04-19 00:41:24 +03:00
Bananymous
59a682c720
Kernel: init2 is now launched as a process instead of thread
...
Also only process can now add threads to scheduler. Nobody should
have raw access to scheduler and everything should be through
Process::current() or irqs (reschedules)
2023-04-19 00:39:06 +03:00
Bananymous
7bd4593748
Kernel: Process is not reference counted any more
...
This was not necessary and it made things needlessly complicated
2023-04-19 00:34:18 +03:00
Bananymous
c5b006bf19
BAN: Add {TRY,MUST}_REF for references
...
It is annoying that we have to have separate macros for these but
I can't find a way to cleanly return lvalue reference from statement
expression. Currently we cast the reference to pointer and return
unreference the pointer outside of the expression.
This feature will probably not be used any time soon, but atleas
it is implemented if I need it one day
2023-04-19 00:31:15 +03:00
Bananymous
115c44630d
BAN: TRY and MUST macros use rvalue references
2023-04-19 00:11:15 +03:00
Bananymous
1dc81abca4
BAN: Add specialization for ErrorOr<LValueReference>
...
ErrorOr can now return a reference :)
2023-04-18 22:02:47 +03:00
Bananymous
5aaf2128a8
BAN: Variant with reference now supports copy/assign
2023-04-18 20:21:23 +03:00
Bananymous
6aeac17072
BAN: Variant now works with references
...
References can be assigned with the set() method. Construction nor
assigment operators cannot be used with references to avoid ambiguity
with what assignment to reference does.
You can set the underlying reference with the set() method and access
it with the get() method.
The references are stored as pointers to the object under the hood
which means that size of a reference is sizeof pointer.
2023-04-18 19:53:34 +03:00
Bananymous
6d425182a2
BAN: Variant::set now copy/move assigns when possible
2023-04-18 19:10:22 +03:00
Bananymous
04ac23b67c
BAN: Variant now has variadic template types
2023-04-18 18:29:48 +03:00
Bananymous
5494e2c125
Kernel: Heap allows us to take free pages.
...
The API is kinda weird and will probably be reworked in near future
but this will work for now :)
2023-04-18 10:18:15 +03:00
Bananymous
aba82564f5
Kernel: Panic wont print stacktrace if it has already paniced
...
This prevents stack trace dump to panic and loop
2023-04-18 10:18:15 +03:00
Bananymous
93abee9c7c
Kernel: Map all ACPI tables on initialization
...
This makes their usage much easier and less error prone
They won't mapped be processes when we get to there, so this won't be
a problem
2023-04-18 10:18:15 +03:00
Bananymous
4034bef42e
Scripts: remove disk build from install-usb.sh
...
You can still use the install-usb.sh script from the build directory.
2023-04-18 10:18:15 +03:00
Bananymous
821d065eba
Kernel: Handle some Heap edge cases
2023-04-18 10:18:15 +03:00
Bananymous
2614437ba0
Kernel: Reorder boot initialization
...
We now create the TTY as soon as possible so we can show console
output without serial port.
2023-04-18 10:18:15 +03:00
Bananymous
1aac3a0425
Kernel: Heap implementation can now give free pages from all of RAM
2023-04-18 10:18:15 +03:00
Bananymous
a4568f9263
Kernel: Remove unused file
2023-04-18 10:18:15 +03:00
Bananymous
a180e72b6f
Kernel: Start working on heap
2023-04-18 10:18:15 +03:00
Bananymous
2de64b592d
Kernel: Kmalloc now has its memory statically allocated
...
We don't use the memory map given by bootloader since this automatically
maps the memory to a available space.
2023-04-18 10:18:15 +03:00
Bananymous
9c0f3dd996
Kernel: Move kmalloc and MMU to Memory directory
2023-04-18 10:18:15 +03:00
Bananymous
079df39ca8
LibELF: Start implementing elf library
2023-04-18 10:18:15 +03:00
Bananymous
60a99d1d23
Create LICENCE
2023-04-13 00:38:24 +03:00
Bananymous
fe87c08a02
LibC: add needed stubs to build executables with our compiler
2023-04-12 17:53:02 +03:00
Bananymous
8637959289
Kernel: We can create basic userspace processes
...
These are still allocated on the kernel memory
2023-04-12 17:52:36 +03:00
Bananymous
6be53668b9
Kernel: Scheduler can now terminate processes threads
2023-04-12 17:49:04 +03:00
Bananymous
d1b7249803
Kernel: Debug::dump_stack_trace now 'detects' repeating function
2023-04-12 01:32:41 +03:00
Bananymous
ff7c50c627
Kernel: kmalloc does not check for corruptiong unless it cannot allocate
...
We 'don't care' if kmalloc is corrupted unless it prevents us from
allocating memory. Scheduler should be catching stack overflows either
way and is much more efficient
2023-04-12 00:24:02 +03:00
Bananymous
12779cdef8
Kernel: Threads now use only 4 KiB stack :)
2023-04-12 00:22:08 +03:00
Bananymous
f5e676b2b7
Kernel: Fix TTY spinlock usage
2023-04-12 00:20:04 +03:00
Bananymous
8e5e5f819f
Kernel: Shell TTY_PRINT is now function instead of macro
...
This makes functions uses way less stack
2023-04-12 00:18:58 +03:00
Bananymous
370a958379
BuildSystem: GCC will now complain on functions with 1 KiB stack
2023-04-12 00:18:06 +03:00
Bananymous
0ee7da92a3
BAN: Variant now aligns its data properly
2023-04-12 00:17:45 +03:00
Bananymous
a0bd3dc54f
Kernel: kmalloc now detects corruption
...
Kmalloc checks if its nodes have corrupted. This was happening
because of stack overflow.
2023-04-11 23:36:46 +03:00
Bananymous
809eb2fe3e
Kernel: Mark Scheduler::start() as noreturn as appropriate
2023-04-11 23:33:20 +03:00
Bananymous
7010d8614f
Kernel: kernel doesn't allocate large blocks of data on stack
...
We used to allocate 1 KiB blocks on multiple places on stack. This
is a problem, since kernel stack shouldn't have to be too big
2023-04-11 23:31:58 +03:00
Bananymous
69f13f1896
Kernel: Scheduler will panic if it encounters stack overflow
2023-04-11 23:29:21 +03:00
Bananymous
bdaf7cddcb
Kernel: Process now locks the mutex while modifying open files
...
This allows processes to be actually removed from the list instead
of dead locking
2023-04-11 23:28:16 +03:00
Bananymous
8d6db168d6
Kernel: remove message from BAN::Error
...
We don't store the error message anymore in BAN::Error.
Instead we store a error code that can be mapped into a string.
This allows BAN::Error to only take 4 bytes instead of 128.
We should also make some kernel initialization just panic instead
of returning errors since they are required for succesfull boot
anyway.
2023-04-11 23:25:21 +03:00
Bananymous
2fabe1949c
BAN: Move RefPtr to its own file and create New.h
...
New.h contains definitions for placement new operators and
BAN::allocator and BAN::dealloctor
2023-04-10 21:07:25 +03:00
Bananymous
c660df14ec
BuildSystem: Fix header copying to sysroot
...
We used to copy all headers everytime to sysroot which caused
rebuild of the whole os. Now we use the cmake command
'copy_directory_if_different' which seemed to fix this issue :)
2023-04-10 21:07:25 +03:00
Bananymous
e704968f96
Kernel: Threads can now be terminated mid execution
2023-04-10 21:07:25 +03:00
Bananymous
32359df939
Kernel: Add small wait in ATA driver before reading/writing
...
This allows bochs to boot again
2023-04-10 21:07:25 +03:00
Bananymous
641ed23380
Kernel: Fix framepointers on started threads
2023-04-10 21:07:25 +03:00
Bananymous
9f977488fa
BuildSystem: cmake can now build out libc
...
I can't seem to get libc++ build to work...
2023-04-10 21:07:25 +03:00
Bananymous
ac0b22f9b9
LibC: remove old unused files
2023-04-07 02:26:44 +03:00
Bananymous
7752b02fb7
BuildSystem: remove now obsolete include directories from kernel build
2023-04-07 02:25:47 +03:00
Bananymous
7610670287
Add a screenshot to README
2023-04-06 21:01:27 +03:00
Bananymous
31a1b23fb7
General: Write basic README
2023-04-06 20:59:45 +03:00
Bananymous
91c8f9a596
Scripts: linecount does not count lines from toolchain/
2023-04-06 20:31:10 +03:00
Bananymous
f70cd3ea77
BuildSystem: Cleanup cmake code
...
The buildsystem is kind of a mess. I will be writingn build
instructions soon.
2023-04-06 20:31:10 +03:00
Bananymous
5db5ff069a
BuildSystem: you can now build the toolchain with cmake
2023-04-06 00:23:02 +03:00
Bananymous
b8d852ddb7
Update .gitignore
2023-04-06 00:02:47 +03:00
Bananymous
46eedbd1a4
BuildSystem: Create script for os specific toolchain
2023-04-06 00:02:13 +03:00
Bananymous
e760bafeeb
LibC: add stubs for a lot of functions
2023-04-05 23:58:40 +03:00
Bananymous
12351d5cb6
LibC: sys/types uses 'typedef' instead of 'using'
2023-04-05 15:03:24 +03:00
Bananymous
e84f613c4d
Kernel: Shell now somewhat functions again
...
I will not be fixing the shell implementation until I get to
userspace
2023-04-05 11:37:41 +03:00
Bananymous
5db4e5b4d5
Kernel: Fix TTY echo and canonical flag behaviour
2023-04-05 11:35:19 +03:00
Bananymous
b00dd8d68d
Kernel: Fix ansi control sequence cursor movement
2023-04-05 03:07:52 +03:00
Bananymous
abbbf7ec15
Kernel: Add tty to process and make termios modifiable
2023-04-05 02:53:28 +03:00
Bananymous
22c72d8c70
LibC: Add errno ENOTTY
2023-04-05 02:47:37 +03:00
Bananymous
d0b1457f30
Kernel: TTY now supports clearing
2023-04-05 02:04:18 +03:00
Bananymous
a423cd8bb3
Kernel: Add partial support for shell
...
We don't handle arrow keys, and the tty does not know how to clear
the screeen :D
2023-04-05 01:30:58 +03:00
Bananymous
db076058b9
Kernel: Process can now initialize stdio
...
This allows the use of the fds STD{IN,OUT,ERR}_FILENO
2023-04-05 01:10:25 +03:00
Bananymous
fe10ea85db
LibC: Add unistd.h with STD{IN,OUT,ERR}_FILENO definitions
2023-04-05 00:59:48 +03:00
Bananymous
a1100624bf
Kernel: Start work on making tty a file
...
TTY is now a file that you can read from/write to. I still have
to port shell to use this new interface
2023-04-05 00:56:09 +03:00
Bananymous
28e1497f88
Kernel: add virtual write function to inode
2023-04-03 20:29:07 +03:00
Bananymous
8d6111641e
Kernel: Fix keys in PS2Keymap
2023-04-03 20:25:23 +03:00
Bananymous
3ee20d1a84
Kernel: Fix typo
2023-04-03 19:56:55 +03:00
Bananymous
002c2d0aca
BuildSystem: remove non-existent file from kernel CMakeLists.txt
2023-04-03 19:02:25 +03:00
Bananymous
de9f109f2a
BAN: Add data() member function to Array
2023-04-03 17:00:52 +03:00
Bananymous
461a5774f8
Kernel: Device dev and rdev number is done more properly
...
Also hd* partitions are now 1 indexed instead of 0
2023-04-03 11:43:16 +03:00
Bananymous
914f718767
LibC: add device macros in sys/sysmacros.h
2023-04-03 10:59:15 +03:00
Bananymous
ebfd092075
Kernel: Cleaner partition parsing errors
2023-04-03 09:55:49 +03:00
Bananymous
e322826347
Kernel: Optimize scheduler idling
...
Now after each interrupt we will ask the scheduler to reschedule
if the current thread is the idle thread. This allows semaphore
unblocking to be practically instant when there is only one thread
executing.
Now disk reading is back to ~3 MB/s for single threaded process
2023-04-03 01:51:05 +03:00
Bananymous
3998c5f955
Kernel: ATA now uses irqs instead of polling
...
Reading is now much slower at ~500 kB/s it was around 3 MB/s.
This is probably mostly due semaphore blocking taking atleast
until next reschedule (1 ms itervals). This will be a problem
as long as we are using only single processor.
I could try to use {READ/WRITE}_MULTIPLE commands, but since
most of the disk reads are 2 sectors (inode block size) this
will at most double the speed.
Most efficient speed up would of course be caching disk access
data and inodes overall.
2023-04-03 00:03:38 +03:00
Bananymous
762d22ed28
Kernel: Move ATADevice to its own file from ATAController
...
The API is kinda weird since device reads/writes go from
ATADevice -> ATAController -> ATADevice
but this is for now atleast necessary since ATAController has(?)
to keep all devices from using the disks at the same time
2023-04-02 18:26:19 +03:00
Bananymous
f2362b2b78
Kernel: ATA controller waits now before read/write until disk is ready
...
Qemu used to freeze on disk writes but now it seems fine
2023-04-02 05:37:17 +03:00
Bananymous
471ac80420
BuildSystem: building for 32-bit works now
2023-04-02 05:03:17 +03:00
Bananymous
4a887fc706
Scipts: linecount doesn't count lines in build/
2023-04-02 04:09:54 +03:00
Bananymous
e49d3c7bfe
BuildSystem: We are now using cmake instead of plain make
...
I have been annoyed for a while since I had to build everything
when running the os since the buildsystem was really bad.
I wanted to rewrite the whole build system and changed to using cmake
:)
2023-04-02 04:07:27 +03:00
Bananymous
c5b83074ac
LibC: Combine string.h functions definitions to single file
2023-04-02 00:00:29 +03:00
Bananymous
79090c2648
Kernel: cleanup includes
...
I went quickly went through all files since I found some weird
includes :D
2023-04-01 02:14:49 +03:00
Bananymous
7a6b1c8e47
Kernel: Fix traversing back from mount points
2023-04-01 01:54:35 +03:00
Bananymous
8988ce2766
Kernel: Add inodes '.' and '..' to device manager
2023-04-01 01:33:04 +03:00
Bananymous
dcde2ae6b4
Kernel: Reads return 0 bytes read at the end of device
...
We used to not have any idea if we where already at the end of device.
Also fixed couple of copy-paste errors from read->write
2023-04-01 00:55:07 +03:00
Bananymous
c62849a783
Kernel: Shell cleanup cat command
2023-04-01 00:54:39 +03:00
Bananymous
f453e8e170
Kernel: Shell 'time' prints the time even if command fails
2023-04-01 00:30:33 +03:00
Bananymous
990887891e
Kernel: Process gets absolute paths for mount
2023-04-01 00:30:11 +03:00
Bananymous
5da801d12b
Kernel: fix ext2 failed creation memory leak
2023-04-01 00:22:03 +03:00
Bananymous
3a4557d417
Kernel: Cleanup ATA device initialization
2023-03-31 00:58:57 +03:00
Bananymous
26d9a3e253
Kernel: Move DeviceManager to its own file
2023-03-30 22:39:45 +03:00
Bananymous
eef3631a5a
Kernel: Improve locking in Process, VFS and ATAController
...
We used to block on all process access. This meant that shell
reading the keyboard input would block all VFS access making disk
accesses practically impossible. We now block only when it is
necessary :)
2023-03-30 22:02:16 +03:00
Bananymous
88ee35165f
Kernel: Thread is no longer RefCounted
...
This makes developement with Scheduler much easier against compiler
optimizations. I could now remove the pragma GCC optimize stuff.
2023-03-30 19:16:51 +03:00
Bananymous
c8f05b4a7a
Kernel: Add Semaphore to block threads
2023-03-30 18:46:33 +03:00
Bananymous
c32584cca0
BAN: LinkedList::remove now returns iterator to the element after
2023-03-30 18:46:19 +03:00
Bananymous
2995a36942
Kernel: root partition is now passed from the commandline
2023-03-30 18:46:19 +03:00
Bananymous
c1dbafc101
BAN: StringView::split(char, bool) is now thread safe
...
I had to duplicate some code, but this is better since I would like
to not use BAN::Function for something like this
2023-03-30 16:35:38 +03:00
Bananymous
3e8ab8271d
Kernel: Shell can now mount partitions
2023-03-30 15:06:41 +03:00
Bananymous
5b3a00c64f
Kernel: Inode::Mode is now a struct so we can have functions in it
2023-03-30 14:41:15 +03:00
Bananymous
0ce9fd8597
Kernel: StorageDevices and Controllers are now devices
2023-03-30 14:22:15 +03:00
Bananymous
c9badb5a1c
Kernel: Add IFBLK, IFLNK, IFSOCK to Inode::Mode
2023-03-30 13:15:46 +03:00
Bananymous
a513bc5749
Kernel: All devices have atime, mtime, ctime at their creation
2023-03-30 13:15:46 +03:00
Bananymous
5d5487315f
Kernel: Remove the mount test from VFS
2023-03-30 11:43:24 +03:00
Bananymous
3508df67b1
Kernel: fix stat command and device numbers
2023-03-30 10:43:08 +03:00
Bananymous
06ce1f0667
Kernel: Rewrite mounting code
2023-03-29 21:34:48 +03:00
Bananymous
f9c3ae7090
BAN: String add front() and back() helpers
2023-03-29 14:10:29 +03:00
Bananymous
1fb8c211f0
Kernel: Move Partition out of StorageDevice and rename functions
2023-03-29 13:23:01 +03:00
Bananymous
9c7670847e
Kernel: Shell commands 'ls' and 'stat' recognize character devices
2023-03-29 11:56:33 +03:00
Bananymous
a24c2d9be2
Kernel: DeviceManager is now a 'FileSystem' so it can expose devices
...
Shell reads keyboard through /dev/input :)
2023-03-29 11:50:46 +03:00
Bananymous
f4db246658
LibC: add ENOBUFS errno
2023-03-29 10:58:25 +03:00
Bananymous
7f90079ea7
Kernel: Fix keymap numlock behaviour
2023-03-29 03:18:22 +03:00
Bananymous
f4b4987d43
Kernel: Remove obsolete KeyboardLayout/
...
This was used by the old input system. Currently keyboard layout is
hardcoded to finnish. But it will be reworked as something read from
the filesystem
2023-03-29 03:09:14 +03:00
Bananymous
7f88ba70d4
Kernel: Add linecount.sh script
...
This calculates the number of lines of code in the whole project :D
2023-03-29 03:06:57 +03:00
Bananymous
ac094a48d6
Kernel: Rework the whole input system
...
We now use Device abstraction that will allow us to provide devices
to userspace through /dev. Currently Shell reads from first and only
device (it being PS/2 Keyboard).
2023-03-29 03:05:16 +03:00
Bananymous
779912d8af
BAN: Vector now takes optional argument for default value on resize
2023-03-28 23:10:36 +03:00
Bananymous
f205b8e883
BAN: Implement basic Circular Queue
2023-03-28 21:44:02 +03:00
Bananymous
f9a0412e78
Kernel: ACPI unmap_header does not do anything
...
We have to work with MMU mapping/unmapping to be user friendly
2023-03-28 02:56:44 +03:00
Bananymous
0ef318633c
BAN: ScopeGuard can now be disabled (it wont call the function)
2023-03-28 01:15:13 +03:00
Bananymous
2f8c9746e3
Kernel: Move ACPI to its own file
2023-03-27 17:30:45 +03:00
Bananymous
6d6bef1b04
BAN: move placement new declaration to Move.h
2023-03-27 03:38:06 +03:00
Bananymous
3dab392296
Build System: Create base directory for the FS
2023-03-27 01:11:17 +03:00
Bananymous
f8a2c60c8d
Kernel/BAN: move unix time conversion to BAN and add stat to Shell
2023-03-27 00:49:58 +03:00
Bananymous
770f7716a0
Kernel: Rework processes and VFS so we don't expose inodes
...
Everything is now done through a file descriptor.
2023-03-26 04:30:57 +03:00
Bananymous
a011c0384f
LibC: add dirent.h
2023-03-25 02:08:33 +02:00
Bananymous
0d356c5bbc
LibC: Add stat structure
2023-03-24 18:08:22 +02:00
Bananymous
d67de70126
Kernel: Process::working_directory() is now thread safe
...
I realized you cannot return a stirng view and it to be thread safe
2023-03-24 01:46:25 +02:00
Bananymous
6f334756c5
Kernel: Create RecursiveSpinLock and add it to Process
...
We now lock every function within Proccess, just to be sure.
Recursive lock allows us to use lock from the same thread even if
we already have the spinlock locked
2023-03-24 01:32:35 +02:00
Bananymous
310713d203
Kernel: Lock process functions instead of the ata controller
...
Process has to use locks at least on some functions so multithreaded
disk io is safe. This seemed to fix corrupted reads from disk
2023-03-24 01:17:39 +02:00
Bananymous
7d2ab53baa
Kernel: Ext2FS now does allocations better
...
We only have to allocate at the beginning of the all functions and
can properly exit before any disk reads if we run out of memory.
This makes development little bit 'harder' since the {read,write}_block
user must allocate a buffer of atleast block_size bytes.
I also made disk access to cause kernel panic on error since the error
handling during file write is something I don't want to think now.
The filesystem can easily corrupt so, I feel like when disk io starts
to fail I'll come back to this.
2023-03-23 23:22:31 +02:00
Bananymous
2152b8b95f
Kernel: Add possibiliity to create empty files on Ext2
...
Big rewrite for Ext2 for more easy and optimized code
2023-03-23 22:26:06 +02:00
Bananymous
8ac1ae1574
LibC: add more typedefs to sys/types
2023-03-23 19:24:12 +02:00
Bananymous
4fd21bc303
Kernel: Remove block group descriptor cache from ext2fs
...
This will make improving the fs easier since we need to only update
the values on the disk
2023-03-23 18:52:58 +02:00
Bananymous
15037bfc7a
Kernel: Move get_unix_time to RTC namespace
2023-03-23 18:14:51 +02:00
Bananymous
5831c72aad
LibC: add errno NAMETOOLONG
2023-03-23 14:48:42 +02:00
Bananymous
a063d041c9
BAN: char* is now formatted as string and not pointer
2023-03-23 14:29:35 +02:00
Bananymous
3572e9794a
BAN: Modify Span constructors to keep constness correctly
2023-03-23 14:26:03 +02:00
Bananymous
cef6999dc7
BAN: Add is_const to traits
2023-03-23 13:28:57 +02:00
Bananymous
6ed9651176
Kernel: StorageDevice and Ext2 "support" writing
2023-03-23 13:04:13 +02:00
Bananymous
3efbe22a1b
Kernel: Shell now prints unix time with 'date' command
2023-03-23 11:13:51 +02:00
Bananymous
96579b88cf
Kernel: Cleanup GPT parsing code
2023-03-23 11:13:14 +02:00
Bananymous
2ec18855f2
Kernel: TTY buffer is resized on font size change
...
Shell also has better line wrapping. You still can't visually go
back to previous line, but atleas we now write from the beginning
of the line
2023-03-22 02:09:22 +02:00
Bananymous
b222581d18
Kernel: Reading from fd verifies that file is opened for reading
2023-03-22 01:55:58 +02:00
Bananymous
a8e3ee6f19
Kernel: Ext2 directory functions now fail on invalid blocks
...
Invalid blocks should only happen while writing to a file and
I think in that case we should just bail out instead of giving
you incomlete inode list or search result.
2023-03-22 01:55:57 +02:00
Bananymous
a083e588ba
Kernel: cksum uses now a different crc32_table to match linux 'cksum'
2023-03-22 01:55:21 +02:00
Bananymous
9b500842a0
Kernel: Ext2 can now read from non-block-size aligned offsets
2023-03-21 19:19:17 +02:00
Bananymous
b21348379f
Kernel: Remove obsolete Ext2FS::ext2_root_inode()
...
This was not used by anyone and the cast was wrong anyway
2023-03-21 18:19:48 +02:00
Bananymous
633055293e
Kernel: Remove for_each_block from Ext2
2023-03-21 18:14:02 +02:00
Bananymous
ae9d618803
Kernel: Cleanup font parsing
...
We use now the LittleEndian<> wrapper for PSF2 header and no more
magic constants in code
2023-03-20 19:48:08 +02:00
Bananymous
9c744dfc44
BAN: Add wrappers for little/big endian numbers
2023-03-20 19:48:08 +02:00
Bananymous
faf1b661bb
Kernel: prefs font does not allocate extra buffer
2023-03-20 19:48:01 +02:00
Bananymous
22e45278a2
Kernel: Fix PC Screen font parsing
...
I had misread the format and the parsing code was incorrect. I also
changed fonts to store unicode codepoints as 32 bit integers, so
every character can be represented
2023-03-20 14:52:42 +02:00
Bananymous
43f4657566
Kernel: Font parsing uses Spans now
2023-03-20 13:35:54 +02:00
Bananymous
70f2908056
BAN: Implement basic Span
...
This is wrapper over contiguous block of memory e.g. Vector
2023-03-20 13:34:26 +02:00
Bananymous
ef381d0600
BAN: Add iterators to all containers with contiguous memory
2023-03-20 13:26:42 +02:00
Bananymous
cfa87526a7
BAN: Add implementation for basic iterator for contiguous memory
2023-03-20 13:15:38 +02:00
Bananymous
39b560fde3
Kernel: Add basic mounting to VFS.
2023-03-19 05:51:25 +02:00
Bananymous
0c582b4490
LibC: add errno ENOTEMPTY
2023-03-19 05:43:40 +02:00
Bananymous
61caf566fc
LibC: add errno EEXISTS
2023-03-19 04:17:39 +02:00
Bananymous
76d5364a55
Kernel: Add comparison operator for inodes
2023-03-19 03:34:23 +02:00
Bananymous
5224df321e
Create README.md
2023-03-18 04:05:59 +02:00