硬盘支持(FAT32)

This commit is contained in:
2026-04-22 21:43:09 +08:00
parent 6b5a19a19d
commit 0fe34d9a09
22 changed files with 2768 additions and 18 deletions

38
clks/include/clks/disk.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef CLKS_DISK_H
#define CLKS_DISK_H
#include <clks/types.h>
#define CLKS_DISK_SECTOR_SIZE 512ULL
#define CLKS_DISK_PATH_MAX 192U
#define CLKS_DISK_NODE_FILE 1ULL
#define CLKS_DISK_NODE_DIR 2ULL
void clks_disk_init(void);
clks_bool clks_disk_present(void);
u64 clks_disk_size_bytes(void);
u64 clks_disk_sector_count(void);
clks_bool clks_disk_read_sector(u64 lba, void *out_sector);
clks_bool clks_disk_write_sector(u64 lba, const void *sector_data);
clks_bool clks_disk_is_formatted_fat32(void);
clks_bool clks_disk_format_fat32(const char *label);
clks_bool clks_disk_mount(const char *mount_path);
clks_bool clks_disk_is_mounted(void);
const char *clks_disk_mount_path(void);
clks_bool clks_disk_path_in_mount(const char *path);
clks_bool clks_disk_stat(const char *path, u64 *out_type, u64 *out_size);
const void *clks_disk_read_all(const char *path, u64 *out_size);
u64 clks_disk_count_children(const char *dir_path);
clks_bool clks_disk_get_child_name(const char *dir_path, u64 index, char *out_name, usize out_name_size);
clks_bool clks_disk_mkdir(const char *path);
clks_bool clks_disk_write_all(const char *path, const void *data, u64 size);
clks_bool clks_disk_append(const char *path, const void *data, u64 size);
clks_bool clks_disk_remove(const char *path);
u64 clks_disk_node_count(void);
#endif

View File

@@ -88,6 +88,14 @@
#define CLKS_SYSCALL_FB_BLIT 82ULL
#define CLKS_SYSCALL_FB_CLEAR 83ULL
#define CLKS_SYSCALL_KERNEL_VERSION 84ULL
#define CLKS_SYSCALL_DISK_PRESENT 85ULL
#define CLKS_SYSCALL_DISK_SIZE_BYTES 86ULL
#define CLKS_SYSCALL_DISK_SECTOR_COUNT 87ULL
#define CLKS_SYSCALL_DISK_FORMATTED 88ULL
#define CLKS_SYSCALL_DISK_FORMAT_FAT32 89ULL
#define CLKS_SYSCALL_DISK_MOUNT 90ULL
#define CLKS_SYSCALL_DISK_MOUNTED 91ULL
#define CLKS_SYSCALL_DISK_MOUNT_PATH 92ULL
void clks_syscall_init(void);
u64 clks_syscall_dispatch(void *frame_ptr);