feat(kernel): Add eBPF Virtual Machine & Verifier, VMA Memory Mapper, Sysfs KObject Tree, Unix98 PTY, and 2D Canvas Graphics Engine

This commit is contained in:
subhobhai943 committed 2026-08-17 14:38:06 +05:30
1 parent 8a90d88f70
commit 65c916d6ac
12 files changed
+1133 -6

No files matched your search

+32
View File
@@ -0,0 +1,32 @@
#ifndef _DRIVERS_CANVAS_H
#define _DRIVERS_CANVAS_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#define COLOR_BLACK 0x00000000
#define COLOR_WHITE 0x00FFFFFF
#define COLOR_RED 0x00FF4444
#define COLOR_GREEN 0x0044FF44
#define COLOR_BLUE 0x004488FF
#define COLOR_YELLOW 0x00FFDD44
#define COLOR_CYAN 0x0044DDFF
#define COLOR_DARK_GRAY 0x00222222
#define COLOR_LIGHT_GRAY 0x00CCCCCC
#define COLOR_NAVY 0x001B2A4A
#define COLOR_TITLE_BAR 0x002D3748
#define COLOR_ACCENT 0x003182CE
void canvas_init(void);
void canvas_clear(uint32_t color);
void canvas_draw_pixel(int x, int y, uint32_t color);
void canvas_draw_line(int x0, int y0, int x1, int y1, uint32_t color);
void canvas_draw_rect(int x, int y, int w, int h, uint32_t color, bool filled);
void canvas_draw_circle(int cx, int cy, int r, uint32_t color, bool filled);
void canvas_draw_char(int x, int y, char c, uint32_t color, uint32_t bg_color);
void canvas_draw_string(int x, int y, const char* str, uint32_t color, uint32_t bg_color);
void canvas_render_desktop_mockup(void);
void canvas_present(void);
#endif // _DRIVERS_CANVAS_H
+39
View File
@@ -0,0 +1,39 @@
#ifndef _DRIVERS_PTY_H
#define _DRIVERS_PTY_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#define PTY_MAX_PAIRS 8
#define PTY_BUFFER_SZ 1024
typedef struct {
uint32_t pty_num;
char master_name[16]; // /dev/ptmx
char slave_name[16]; // /dev/pts/0
char m2s_buf[PTY_BUFFER_SZ];
size_t m2s_head;
size_t m2s_tail;
char s2m_buf[PTY_BUFFER_SZ];
size_t s2m_head;
size_t s2m_tail;
bool echo_enabled;
bool raw_mode;
bool master_open;
bool slave_open;
bool in_use;
} pty_pair_t;
void pty_init(void);
int pty_open_master(void);
int pty_open_slave(int master_fd);
int pty_master_write(int master_fd, const char* data, size_t len);
int pty_master_read(int master_fd, char* data, size_t max_len);
int pty_slave_write(int slave_fd, const char* data, size_t len);
int pty_slave_read(int slave_fd, char* data, size_t max_len);
size_t pty_get_active_count(void);
const pty_pair_t* pty_get_pair(size_t index);
#endif // _DRIVERS_PTY_H
+95
View File
@@ -0,0 +1,95 @@
#ifndef _KERNEL_BPF_H
#define _KERNEL_BPF_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#define BPF_MAX_INSNS 256
#define BPF_MAX_MAPS 16
#define BPF_MAX_PROGS 16
#define BPF_REG_CNT 11 // R0 (ret), R1-R5 (args), R6-R9 (callee-saved), R10 (frame pointer)
// BPF Instruction Class
#define BPF_CLASS_LD 0x00
#define BPF_CLASS_LDX 0x01
#define BPF_CLASS_ST 0x02
#define BPF_CLASS_STX 0x03
#define BPF_CLASS_ALU 0x04
#define BPF_CLASS_JMP 0x05
#define BPF_CLASS_ALU64 0x07
// BPF ALU Operations
#define BPF_OP_ADD 0x00
#define BPF_OP_SUB 0x10
#define BPF_OP_MUL 0x20
#define BPF_OP_DIV 0x30
#define BPF_OP_OR 0x40
#define BPF_OP_AND 0x50
#define BPF_OP_LSH 0x60
#define BPF_OP_RSH 0x70
#define BPF_OP_NEG 0x80
#define BPF_OP_MOD 0x90
#define BPF_OP_XOR 0xa0
#define BPF_OP_MOV 0xb0
// BPF Jump Operations
#define BPF_JMP_JA 0x00
#define BPF_JMP_JEQ 0x10
#define BPF_JMP_JGT 0x20
#define BPF_JMP_JGE 0x30
#define BPF_JMP_JNE 0x50
#define BPF_JMP_CALL 0x80
#define BPF_JMP_EXIT 0x90
typedef struct {
uint8_t opcode;
uint8_t dst_reg:4;
uint8_t src_reg:4;
int16_t offset;
int32_t imm;
} __attribute__((packed)) bpf_insn_t;
typedef enum {
BPF_PROG_TYPE_UNSPEC = 0,
BPF_PROG_TYPE_SOCKET_FILTER,
BPF_PROG_TYPE_KPROBE,
BPF_PROG_TYPE_TRACEPOINT,
BPF_PROG_TYPE_XDP,
BPF_PROG_TYPE_SYSCALL
} bpf_prog_type_t;
typedef struct {
uint32_t id;
char name[32];
bpf_prog_type_t type;
bpf_insn_t insns[BPF_MAX_INSNS];
uint32_t insn_count;
uint64_t run_count;
uint64_t total_runtime_ns;
bool in_use;
} bpf_prog_t;
typedef struct {
uint32_t id;
char name[32];
uint32_t key_size;
uint32_t value_size;
uint32_t max_entries;
uint8_t* data;
bool in_use;
} bpf_map_t;
void bpf_init(void);
int bpf_prog_load(bpf_prog_type_t type, const char* name, const bpf_insn_t* insns, uint32_t count);
int bpf_prog_run(uint32_t prog_id, void* ctx, uint64_t* ret_val);
bool bpf_verify_prog(const bpf_insn_t* insns, uint32_t count);
int bpf_map_create(const char* name, uint32_t key_size, uint32_t value_size, uint32_t max_entries);
int bpf_map_update_elem(uint32_t map_id, const void* key, const void* value);
int bpf_map_lookup_elem(uint32_t map_id, const void* key, void* value_out);
size_t bpf_get_prog_count(void);
const bpf_prog_t* bpf_get_prog(size_t index);
#endif // _KERNEL_BPF_H
+38
View File
@@ -0,0 +1,38 @@
#ifndef _KERNEL_KOBJECT_H
#define _KERNEL_KOBJECT_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#define KOBJ_NAME_LEN 32
#define MAX_KOBJECTS 64
typedef enum {
KOBJ_TYPE_GENERIC = 0,
KOBJ_TYPE_BUS,
KOBJ_TYPE_DEVICE,
KOBJ_TYPE_DRIVER,
KOBJ_TYPE_CLASS,
KOBJ_TYPE_SUBSYS
} kobj_type_t;
typedef struct kobject {
char name[KOBJ_NAME_LEN];
kobj_type_t type;
struct kobject* parent;
uint32_t ref_count;
char path[128];
bool in_use;
} kobject_t;
void kobject_subsystem_init(void);
kobject_t* kobject_create_and_add(const char* name, kobj_type_t type, kobject_t* parent);
void kobject_get(kobject_t* kobj);
void kobject_put(kobject_t* kobj);
size_t kobject_get_total_count(void);
const kobject_t* kobject_get_at(size_t index);
void kobject_dump_tree(void);
#endif // _KERNEL_KOBJECT_H
+50
View File
@@ -0,0 +1,50 @@
#ifndef _MM_VMA_H
#define _MM_VMA_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#define PROT_NONE 0x0
#define PROT_READ 0x1
#define PROT_WRITE 0x2
#define PROT_EXEC 0x4
#define MAP_SHARED 0x01
#define MAP_PRIVATE 0x02
#define MAP_FIXED 0x10
#define MAP_ANONYMOUS 0x20
#define MAX_VMAS_PER_TASK 32
typedef struct vm_area {
uint64_t vm_start;
uint64_t vm_end;
uint32_t vm_flags;
uint32_t vm_prot;
uint64_t vm_pgoff;
char vm_name[32];
bool in_use;
} vm_area_t;
typedef struct mm_struct {
uint32_t pid;
uint64_t start_code;
uint64_t end_code;
uint64_t start_data;
uint64_t end_data;
uint64_t start_brk;
uint64_t brk;
uint64_t start_stack;
vm_area_t vmas[MAX_VMAS_PER_TASK];
size_t vma_count;
} mm_struct_t;
void vma_init(void);
int vma_create_mm(uint32_t pid, mm_struct_t* mm);
uint64_t vma_mmap(uint32_t pid, uint64_t addr, size_t len, int prot, int flags, const char* name);
int vma_munmap(uint32_t pid, uint64_t addr, size_t len);
const vm_area_t* vma_find(uint32_t pid, uint64_t addr);
void vma_dump_maps(uint32_t pid);
#endif // _MM_VMA_H