d95ef110c9
vfs: Add support for creating directories given a full path
2023-03-11 01:13:44 +01:00
e5a41d2d52
tmpfs: Implement FileInode read() and write()
2023-03-11 00:52:39 +01:00
6fbf97292a
VFS: Implement resolve_path() using PathParser
...
continuous-integration/drone/push Build is passing
Already works better than old luna (handles .. correctly)
2023-03-10 22:18:48 +01:00
ff770b7328
VFS+TmpFS: Add support for creating subdirectories (mkdir)
continuous-integration/drone/push Build is passing
2023-03-10 21:09:08 +01:00
abdd460525
tmpfs: use adopt_shared_if_nonnull instead of plain adopt_shared in FileSystem::create()
2023-03-07 22:16:52 +01:00
65dd3cd7fb
TmpFS: Use StaticString<128> instead of char[128]
2023-02-27 15:22:39 +01:00
8ba571a30e
TmpFS: Use a fixed char array in DirInode's Entry instead of OwnedStringView
2023-02-27 15:22:39 +01:00
01b6294f76
kernel: Implement creating file inodes in tmpfs directories
2023-02-27 15:22:38 +01:00
a65f4311aa
tmpfs: make the root inode a DirInode instead of a FileInode
2023-02-27 15:22:38 +01:00
dd2f31d8d0
tmpfs: add DirInode skeleton
2023-02-27 15:22:38 +01:00
5fb292bc0e
tmpfs: rename tmpfs::Inode to tmpfs::FileInode
2023-02-27 15:22:37 +01:00
d3bda46325
tmpfs: Make m_next_inode_number atomic
2023-02-27 15:22:37 +01:00
ba9d725481
kernel: Rename FileSystem::root() to root_inode() and add a shortcut for the root filesystem's root inode
2023-02-27 15:22:37 +01:00
3a2b8bcfd7
kernel: Make a factory function for filesystem creation of inodes, and add inode numbers
...
Now every filesystem must provide fs->create_file_inode() for new inodes :)
2023-02-27 15:22:37 +01:00
a49555addc
kernel: Add a subclass of VFS::Inode to make it easier to implement file inodes
2023-02-27 15:22:36 +01:00
c422d11682
kernel: Start working on a VFS implementation using OOP and SharedPtr
2023-02-27 15:22:24 +01:00
cf758fdfdc
Initial commit :)
2022-11-13 10:09:09 +01:00
42efc21110
Start implementing read and write support in tmpfs
...
write seems to work fine, read just hangs there, waiting.
2022-11-12 20:11:26 +01:00
046065c533
Fix tmpfs
2022-11-12 19:05:47 +01:00
3451d50a37
Try building a tmpfs, but weird stuff happens
2022-11-12 18:13:41 +01:00
511bb7a8c1
Kernel: Make readdir() available in created InitRD directories
2022-11-12 18:11:58 +01:00
58fb422161
Kernel: Return a Result in MemoryManager and strdup_from_user
2022-11-12 11:56:40 +01:00
559d074ce4
Kernel: Make a more convenient wrapper for basename() and dirname()
2022-11-12 10:39:25 +01:00
078f3f5862
Kernel: Add a remainder to refactor the initial ramdisk code
2022-11-09 16:07:49 +01:00
d76af10e70
Kernel: Move initrd into the fs/ folder
...
It makes more sense to put it in there.
2022-11-09 16:03:16 +01:00
98da473fdc
Run clang-format
2022-11-08 19:07:43 +01:00
44815b08c7
Kernel: Use copy_from_user() and copy_to_user() in read/write
...
This is huge. Finally, we can do proper reads/writes with invalid addresses, or big buffers.
2022-11-06 15:19:23 +01:00
b2fb740d99
Kernel: Refuse to mkdir any directory named . or ..
2022-11-05 12:09:01 +01:00
2c08de044f
Kernel, libc: Add support for querying the framebuffer's scanline via ioctl()
2022-11-03 20:20:22 +01:00
71633e264f
Kernel: Make the serial port writable for everyone :)
2022-11-03 17:13:32 +01:00
249c79f8a3
Kernel, libc: Add ioctl()
...
Right now, only the framebuffer supports this system call, to query its dimensions.
2022-11-02 20:59:42 +01:00
8f2308c80d
Kernel: Implement mmap-able device files (regular files are not mmap-able yet)
2022-11-02 20:24:07 +01:00
42a805fd60
Kernel: Move the translated keyboard to /dev/console and make /dev/kbd provide raw scancodes
2022-11-02 19:51:54 +01:00
af0f4d2037
Kernel: Remove /dev/uptime
...
This information can now be fetched with clock_gettime.
2022-10-30 10:16:53 +01:00
e640c6e245
Kernel, libc, userspace: Add file timestamps (atime,ctime,mtime)
2022-10-30 09:57:17 +01:00
0115cce750
Kernel/VFS: Add file owners and file modes, and check those in system calls
2022-10-28 17:10:28 +02:00
41f7232b77
Devices: Return EOF after first read for some devices
...
Still not optimal.
2022-10-26 20:54:47 +02:00
ec2c314234
Kernel: Add /dev/null
2022-10-25 17:59:55 +02:00
14367f07b5
Kernel: Add support for getdents() to DeviceFS
2022-10-23 14:05:55 +02:00
78d72c2f0c
Kernel, libc: Add a getdents() system call
...
This is meant to be a low-level interface to implement dirent.h on top of.
2022-10-23 14:03:46 +02:00
0faabe02e5
Kernel, libc: Implement O_CLOEXEC
2022-10-22 10:28:02 +02:00
b2f5a0502f
Kernel, libc: Implement O_NONBLOCK
2022-10-21 21:51:03 +02:00
da61e3648f
Kernel: Implement blocking reads
...
This is a huge step forward!! bc actually runs now, without echo or backspace, but it runs!!
2022-10-21 21:26:19 +02:00
bef9158450
Kernel, libc: Add isatty() and F_ISTTY to fcntl()
2022-10-21 18:34:31 +02:00
a06e1c5a21
VFS: Remove warning when file is not found
...
That is a common ocurrence.
2022-10-20 19:11:50 +02:00
47bdfecedb
Devices: Add /dev/uptime
...
This file contains how many milliseconds have passed since boot at the time of reading it :)
2022-10-19 21:11:12 +02:00
3c5c92c7c3
sh: Add a simple interactive shell
2022-10-19 19:42:05 +02:00
b035795eb3
Kernel: Move errno.h and (k)assert.h out of the main include directory
...
This is mostly so IDEs don't pick them up instead of the userspace headers :)
2022-10-19 17:41:23 +02:00
d2e2883a79
Kernel: Make mkdir() accessible to userspace
2022-10-16 17:22:12 +02:00
18fbccafb7
VFS: add an exists() function
2022-10-16 16:58:18 +02:00
f8154ce230
Kernel: Implement mkdir() from a single path
...
This is done using dirname() and basename() :)
2022-10-16 14:45:25 +02:00
36bb1cab5c
FileDescriptor: add operator=() so that the fcntl(F_DUPFD syscall compiles :)
2022-10-15 11:16:18 +02:00
91d76a2ee4
Devices: Add a new RandomDevice :)
...
This new device uses the seeded Mersenne PRNG we use in the kernel.
This device is not meant for regular userspace use, but more for userspace to seed their own PRNGs from.
If the DeviceFS is mounted at /dev, this device can be found at /dev/random.
2022-10-14 20:14:49 +02:00
edda41a7bb
libc: Implement fseek(), ftell() and rewind()
...
All three use the new syscall seek() (with its lseek() wrapper in unistd.h)!!
2022-10-12 15:56:03 +02:00
854f585e1a
Kernel: Add a seek() system call
...
Now, time for libc support!!
2022-10-12 15:28:52 +02:00
97b7572933
VFS: Implement a new type of Node, VFS_DEVICE
...
This is used to differentiate normal files from devices.
2022-10-12 15:22:34 +02:00
96b1d1c2f2
Devices: Tell a device which name you want it to be instantiated with
...
This allows us to create a device in any path, with any filename.
2022-10-12 10:54:46 +02:00
eb03ae91e0
Devices: Add a new Serial device
...
This device permits userspace to interface with the serial port.
2022-10-12 10:44:30 +02:00
e764647133
Devices: add a new ConsoleDevice
...
This new device is the userspace interface to the text console/tty.
2022-10-11 21:04:50 +02:00
b1fcfd0d74
VersionDevice: Ignore offset instead of erroring out + set flags to 0
2022-10-11 21:04:14 +02:00
e67ef7778c
VFS: Support writing to files
2022-10-11 21:03:30 +02:00
0a7d4a530d
VFS, DeviceFS: Implement a device filesystem
...
For now, we just have a version device. (this will allow us to get rid of sys_getversion!!)
More should be implemented soon.
2022-10-11 19:21:16 +02:00
4aa3da8c12
VFS: Add basic mount(), unmount() and mkdir() functions (not accessible to userspace yet)
2022-10-11 18:23:00 +02:00
1278cec065
VFS: Add a 'type' flag to Nodes, implement EISDIR
2022-10-11 17:48:11 +02:00
da2ede3450
Kernel, libc, userspace: Implement file descriptors
...
Kernel: Implement a descriptor struct which stores the opened node and read offset, and give each task 8 of those.
Implement three syscalls: sys_read, sys_open and sys_close (sys_write still writes to the console instead of using a fd, for now)
Implement three new errors: ENOENT, EBADF and EMFILE.
libc: Implement the new errors, and the new syscalls in syscall().
Also fix _RETURN_WITH_ERRNO() to set errno correctly, which was making strerror() return null, thus crashing perror().
userspace: make init demonstrate the new file API.
2022-10-10 20:21:39 +02:00
63b2de4e3c
Basic FDs
2022-10-10 19:00:24 +02:00
bbe7c6e658
VFS: Implement resolve_path and form the initial ramdisk's VFS properly
...
Finally, resolve_path: a function which takes a path (/etc/fstab for example), and walks the VFS:
In this case, it would start with the root FS node, and ask it: "do you have a directory/file named etc?"
The node could say 'yes', 'no', or 'i'm not a directory, I'm a file' (should not be the case for the VFS root, but for the other ones it could be)
If it says yes, we continue and ask the child if it has a file named fstab. Etc...
2022-10-10 18:44:43 +02:00
2be70d0bc1
VFS: Use 64-bit numbers in read()
...
There is no need for any kind of 32-bit compatibility.
2022-10-09 21:30:38 +02:00
8158ddc94f
VFS: be more verbose
2022-10-09 21:19:22 +02:00
b38c52f8c7
more vfs stuff
2022-10-08 21:35:19 +02:00
f3d7e220ac
The beginnings of a VFS implementation!!
2022-10-08 21:22:46 +02:00