Commit graph

117 commits

Author SHA1 Message Date
Sam Tebbs
a072f9eed1 Create a task from elf data 2021-06-24 21:46:04 +01:00
Edward Dean
4b219c43d7 Add allocator to paging unmap to free allocated entries
fmt
2021-02-25 20:30:18 +00:00
Sam Tebbs
f62ba58f1a Remove constants.zig 2021-02-22 14:22:54 +00:00
Edward Dean
3020167ddc Update to zig master 2021-02-17 17:12:40 +00:00
Sam Tebbs
e48c1a2e3c Remove keyboard test code 2021-01-25 17:38:46 +00:00
Sam Tebbs
aaaa6405ad Update to zig master 2021-01-23 13:26:59 +00:00
DrDeano
4afecd6508
See description
Added finding the next free cluster
Added name to long name
Added long name to short name
Added tests for above

Added createLongNameEntry + tests

Moved tests to bottom

Added createShortNameEntry + test

Used the RTC for the date and time for the created short entry

Tidied createEntries


A bit of refactor

No symlinks for FAT32

findNextFreeCluster updates FAT

Reordered tests to better follow the FAT32FS code
FAT32 has no support for symlinks, so removed code around this.
Removed open_args from createNode as it doesn't need it

Added writeEntries + tests

Write the short and long entries to disk
findNextFreeCluster update cluster chain with parent cluster

Added FAT32 write + tests

This Added the ability to create files and directories and write to files.
Added location of the short dir entry for the file so can update the size of the file on disk
Added folders to the test FAT32 directory.
Also fixed minor bug in mkfat32

Added check for destroying the filesystem


Fixed error message for cluster size


Simpler if condition


0x0FFFFFFF => 0xFFFFFFFF


Spelling


Fixed test
2021-01-04 08:50:20 +00:00
DrDeano
d32c52b13b
SymlinkNode + umount + closeing dir path
Added a symlink node so can close a open symlink.
Added umount to can unmount a directory.
Closes open directories while traversing the path.
Closes #277
2021-01-02 23:02:54 +00:00
DrDeano
f87f66a37f
Fixed FAT32 tests
Git workflow changed to run on any push
Mount in utf8 so copies files unicode filenames correctly
Renamed large_file2 to large_file
2020-12-27 13:31:07 +00:00
DrDeano
45f37dc3c1
Added read functionality to FAT32
Create test FAT32 image on build
Moved test files to test_files directory
Removed global array for test fat32
Part of #216
Removed hard coded test files


Use @embedFile for large file test
2020-12-12 22:31:42 +00:00
Sam Tebbs
b8ebc5f341 Remove unneeded mocking files 2020-12-07 23:15:35 +00:00
DrDeano
0497beb5c6
Added the ability to close a directory node
Updated docs
Closes #270


Update doc comment


Moved close to closeFile and closeDir in VFS


Moved back to @ptrCast()


Always forget to format


Added TODO comment
2020-12-07 22:45:28 +00:00
DrDeano
d5de173fd3
Add a quick format option for mkfat32
Added open implementation

Needed to return a pointer to the file system as `@fieldParentPtr(Fat32Self, "instance", fs.instance)` doesn't work as the the pointer to `instance` is on the stack, then goes out of scope when the init is returned. So will be using free stack space.
Part of #216

Spelling, doc comments and extra test for open file


init -> create, deinit -> destroy
2020-12-07 18:29:16 +00:00
DrDeano
583b9ff43e
Added cluster and entry iterators
This adds iterators to loop over the FAT cluster chain and loop over entries in the directory structure of FAT32.
The tests use hand crafted buffers for a FAT32 filesystem. These are too small for real FAT32 but will still demonstrate the same functionality as if there were real FAT32 buffers.

Added tests for EntryIterator init

Fixed memory leaks
2020-12-01 09:54:45 +00:00
Sam Tebbs
c0a0c164c3 Add error handling for syscalls 2020-11-29 13:47:23 +00:00
iamgweej
e90d861554 Changed to Int in std.meta 2020-11-29 13:05:51 +00:00
Sam Tebbs
0a45b733eb Add ELF loader 2020-11-22 22:38:51 +00:00
DrDeano
fab372a6cf
Initial FAT32 interface
Include code page 437

This is now moved to a better location

Fixed initrd doc for allocator


Added test files

 Plus minor extras

Created initial FAT32 filesystem

This initial FAT32 filesystem will parse a stream, which could be a HDD or a in memory filesystem and produce a FAT32 filesystem. This will check if the raw bytes is a valid FAT32 filesystem as descibed in the spec.

This is only a skeleton with no open, read or write functionality.

Part of #216

logger -> log


Fmt


Removed 'zero_' from struct fields


number_free_cluster -> number_free_clusters


Return non allocated FAT32FS


prefix test_


Added doc comment for boot sector arrays


Moved code_page.zig


info -> debug for init FAT32


Abstracted getting code page table
2020-11-22 21:37:39 +00:00
Sam Tebbs
6bbdadfa94 Rework copyDataToVMM to work in both directions 2020-11-20 17:44:01 +00:00
DrDeano
788bef5029
Rename the logger to log to make is all consistent
Move to `log`


Fixed kmain log
2020-11-13 19:16:25 +00:00
Sam Tebbs
307ea7a52e Add user mode 2020-11-07 09:00:10 +00:00
Sam Tebbs
238e050c8c Check for memory leaks in all tests that allocate memory 2020-11-05 18:50:55 +00:00
Sam Tebbs
1453540bae Add symlink support 2020-11-05 18:21:13 +00:00
Sam Tebbs
08cd95d592 Update to zig master 2020-11-02 18:21:15 +00:00
iamgweej
e96c3165a2 Converted Read and Write from silce returning to slice accepting 2020-10-26 17:38:54 +00:00
Sam Tebbs
9005cce68b Update to zig master 2020-10-18 18:59:20 +01:00
DrDeano
abc712233b
Initial PCI interface
Closes #244

Move PCI to arch

Plus spelling

Added new out and in functions


Added new out and in to mocking


Return pci devices as a list


Improved comment


Removed mask for the return


Removed type for OUT


Added new types
2020-10-10 00:35:20 +01:00
Sam Tebbs
1616ec19a4 Update to zig master 2020-09-07 17:06:12 +01:00
iamgweej
24a5e7c135 Minor change: reorder destroy() and deinit() 2020-08-29 18:33:45 +03:00
Sam Tebbs
1a74b085b8 Use vmm.virtToPhys in x86 paging 2020-08-25 17:43:07 +01:00
Sam Tebbs
b7c3084f09 Fix for TailQueue and std.log changes 2020-08-23 14:42:56 +01:00
iamgweej
34bc8d0ae1 Added file closing in VFS functions 2020-08-16 11:43:29 +01:00
Sam Tebbs
95885f4407 Add new parameters for resize and alloc 2020-08-15 21:35:31 +01:00
Sam Tebbs
73d0b2fd3d Add keyboard and an x86 driver 2020-08-06 19:40:24 +01:00
DrDeano
7b5f921d9f
File system files to new folder and use FixedBufferStream for initrd
Fixed non-header aligned sizes

When allocating a size that isn't aligned to the Header, then we get a incorrect alignment.
To fix this, added additional alignment padding to the next free header.

Fixed adding strings to build options
2020-08-06 18:13:53 +01:00
Sam Tebbs
e914841ade Add virtToPhys and physToVirt 2020-07-30 09:18:01 +01:00
Sam Tebbs
154f7c6d6c Don't override attributes when creating a new paging table 2020-07-26 14:30:52 +01:00
DrDeano
1ea9dbe79d
Fix mapping of addresses that span the 4MB boundary
Also removed unused variables

Fixed unmapping of addresses that span the 4MB boundary


Fixed clearing directory


Fmt


Improved paging maps and unmaps
2020-07-26 13:21:06 +01:00
DrDeano
bcc1712737
Created ramdisk build step
Refactored tests for the scheduler and task


Revert "Refactored tests for the scheduler and task"

This reverts commit 2bf56a368bc18f2bd2d33c385e3672d07e4431d9.

Refactored tests for the scheduler and task


Task fmt


Task fmt again >:(


Ramdisk


Added NotOpened error for file read and write
Added vfs init to initialise the root node
Added the ramdisk.initrd file to grub
Update makeiso to copy the ramdisk to the modules folder
Add a ramdisk step to create a ramdisk to be leaded by grub and parsed by the kernel
Add test files for runtime tests of ramdisk

vfs.init => vfs.setRoot


Improved ramdisk step

Also spelling

Changed name for the initrd


Rename RamdiskFS => InitrdFS


Add deinit for initrd

Fixed VMM unmap

{}
2020-07-25 11:18:19 +01:00
DrDeano
1030633d1d
WIP
Page fault loop

Fixed up the virtual memory mapping

Removed un-used parameters in arch.init
Some doc comments
Name changes
2020-07-24 23:51:27 +01:00
DrDeano
fbd135c437
Move to std.log
Removed nothing to pass tests


Removed log imports

Plus some spelling
2020-07-23 20:47:56 +01:00
DrDeano
6bca2de1c6
Add newline parsing
The symbol name can have spaces.
Changed the parseName to use the newline parsing.
Also used str.len

Missed whitespace => newline


Add a nothing to run release safe tests
2020-07-23 11:42:18 +01:00
DrDeano
f189fa8976
Fix the size alignment
The size alignment need to use alignAllocLen and not alignForward as the size align may not be a power of 2.
2020-07-22 10:35:47 +01:00
DrDeano
d600be874c
Initial scheduler
Fix TSS

Also change to .{} syntax where appropriate.
Added the SS segment
Fixed spelling

Refactoring GDT


Multitasking working for now


WIP scheduler

Refactored Bitmap a bit

WIP still


Task switching working

Handlers return the stack pointer that will be used to restore the tasks stack, normal handlers will return the same stack pointer it was called with where task switching will return the stack pointer of the next task and restore its state using the interrupt stub.

Initial scheduler done


Created a stage 2 init task


Change u32 to usize


Move Task to arch specific


WIP


WIP2


Removed esp from task, replaced with stack_pointer


Removed the debug logs


Fixed init task stack


Change pickNextTask to pointer manipulation

This allows less allocations so faster switching

Temporary enable interrupts for some runtime tests

PIT and RTC need interrupts enabled to run their runtime tests

Renamed schedule => pickNextTask, comptime bitmap for pids not task init

And some other stuff: No pub for the task anymore
Use the leak detector allocator

Fmt


Fix unit tests

And some other stuff :P

PR review

Moved Task out of arch and have the stack init in the arch file
Mocking clean up
Removed commented code
Renamed createTask to scheduleTask where the user will have to provide a task to schedule
Removed redundant pub in log runtime test
Removed global allocator for scheduler
Cleaner assembly in paging

Fmt


Added new Scheduler test mode


Added new test mode to CI


Removed one of the prints


Added doc comment, task test for i386


Removed test


WIP


Runtime tests work

Have a global set in one task and reacted to in another. Also test that local variables are preserved after a task switch.

Removed new lines


Increased line length


Move the allocation of the bool above the task creation
2020-07-18 22:46:24 +01:00
Sam Tebbs
6d4b3e90a4 Replace buddy allocator with free list allocator 2020-07-14 19:38:20 +01:00
DrDeano
8acf4e03cb
A comptime bitmap
This allows for a bitmap that doesn't need an allocator.
2020-07-13 23:49:41 +01:00
Sam Tebbs
afcaf96e6e Replace var with anytype 2020-07-12 18:10:00 +01:00
Sam Tebbs
f3ba8c3e05 Fix heap freeing one too many blocks 2020-07-08 15:31:14 +01:00
Sam Tebbs
36a0f24fc8 Insert the correct address into the allocations map 2020-07-06 14:50:33 +01:00
Sam Tebbs
d60164bec6 Update for latest zig 2020-07-06 14:17:59 +01:00