feat: shell (sh) with keyboard driver, SYS_READ, SYS_EXEC

- PS/2 keyboard driver: IRQ1 handler, scancode set 1 translation,
  ring buffer, shift key support
- SYS_READ (fd=0): non-blocking keyboard read for stdin
- SYS_YIELD: calls schedule_tick directly (no nested INT 0x80)
- SYS_EXEC: loads binary from CPIO initrd, replaces process image
- User-space libc: crt0.S (C runtime startup), syscalls.h (inline
  syscall wrappers, basic string functions)
- Shell app (sh): readline with echo/backspace, builtins (cd, env,
  help, exit), fork+exec for external commands
- Updated build_apps.sh: C app support with crt0 linking, libc
  include path, .bss section in objcopy

Tested: shell boots, keyboard input works, hello-world runs via
fork+exec, env shows CWD, exit cleanly terminates.
This commit is contained in:
AI
2026-02-23 13:08:06 +00:00
parent e9b66cd60e
commit c25ba1fccd
10 changed files with 745 additions and 16 deletions

View File

@@ -2,6 +2,7 @@
#include "pic.h"
#include "process.h"
#include "syscall.h"
#include "keyboard.h"
#include <stdint.h>
/* Forward declaration for kernel panic or similar */
@@ -61,8 +62,8 @@ void isr_handler(registers_t *regs)
/* Timer tick - invoke scheduler */
schedule_tick(regs);
} else if (regs->int_no == 33) {
/* Keyboard */
offset_print("Keyboard IRQ!\n");
/* Keyboard IRQ */
keyboard_irq(regs);
}
return;
}