build system refresh
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -10,7 +10,5 @@
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
build
|
||||
sysroot
|
||||
isodir
|
||||
|
||||
compiler*/
|
||||
7
build.sh
7
build.sh
@@ -1,11 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
./build_libc.sh
|
||||
./build_sysroot.sh
|
||||
|
||||
./build_libs.sh
|
||||
|
||||
./build_programs.sh
|
||||
|
||||
make clean
|
||||
bear -- make
|
||||
|
||||
./copy_resources.sh
|
||||
|
||||
./make_img.sh
|
||||
|
||||
make -B
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd rocklibc
|
||||
make clean
|
||||
bear -- make
|
||||
cd ..
|
||||
17
build_libs.sh
Executable file
17
build_libs.sh
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
cp -r kernel/sys/*.h rlibc/include/sys
|
||||
|
||||
cd rlibc
|
||||
make clean
|
||||
bear -- make
|
||||
cp rlibc.a ../sysroot/usr/lib
|
||||
cp -r include/. ../sysroot/usr/include
|
||||
cd ..
|
||||
|
||||
cd rlibgui
|
||||
make clean
|
||||
bear -- make
|
||||
cp rlibgui.a ../sysroot/usr/lib
|
||||
cp -r include/. ../sysroot/usr/include
|
||||
cd ..
|
||||
@@ -1,17 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
TARGET_DIR="programs"
|
||||
cd programs
|
||||
ln -s ../sysroot sysroot 2>/dev/null
|
||||
|
||||
if [ ! -d "$TARGET_DIR" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find "$TARGET_DIR" -type f \( -name "Makefile" -o -name "makefile" \) | while read -r makefile_path; do
|
||||
find "." -type f \( -name "Makefile" -o -name "makefile" \) | while read -r makefile_path; do
|
||||
dir_path=$(dirname "$makefile_path")
|
||||
(
|
||||
cd "$dir_path" || exit
|
||||
|
||||
make clean
|
||||
make
|
||||
bear -- make
|
||||
)
|
||||
done
|
||||
|
||||
cd..
|
||||
12
build_sysroot.sh
Executable file
12
build_sysroot.sh
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
mkdir -p sysroot
|
||||
|
||||
mkdir -p sysroot/usr
|
||||
mkdir -p sysroot/dev
|
||||
mkdir -p sysroot/kernel
|
||||
|
||||
mkdir -p sysroot/usr/include
|
||||
mkdir -p sysroot/usr/lib
|
||||
mkdir -p sysroot/usr/bin
|
||||
mkdir -p sysroot/usr/fonts
|
||||
15
clean.sh
15
clean.sh
@@ -1,9 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd rocklibc
|
||||
# libc
|
||||
cd rlibc
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
# libgui
|
||||
cd rlibgui
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
# programs
|
||||
cd programs
|
||||
find . -type f \( -name "Makefile" -o -name "makefile" \) | while read -r makefile_path; do
|
||||
dir_path=$(dirname "$makefile_path")
|
||||
@@ -13,10 +20,10 @@ find . -type f \( -name "Makefile" -o -name "makefile" \) | while read -r makefi
|
||||
make clean
|
||||
)
|
||||
done
|
||||
rm sysroot
|
||||
cd ..
|
||||
|
||||
# kernel
|
||||
make clean
|
||||
|
||||
cd initrd
|
||||
rm -f bin/*.elf
|
||||
cd ..
|
||||
rm -rf sysroot
|
||||
5
copy_resources.sh
Executable file
5
copy_resources.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
cp -r resources/fonts/. sysroot/usr/fonts
|
||||
|
||||
cp -r kernel/. sysroot/kernel
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
#include <drivers/ps2/ps2.h>
|
||||
|
||||
#include <vfs.h>
|
||||
|
||||
static const char scancode_to_ascii[] = {
|
||||
0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b',
|
||||
'\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
|
||||
@@ -75,6 +77,10 @@ int init_ps2() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ps2_init_kbd(vfs_node_t* dev) {
|
||||
|
||||
}
|
||||
|
||||
char ps2_get_ascii(uint8_t scancode) {
|
||||
if (scancode & 0x80) {
|
||||
return 0;
|
||||
@@ -89,3 +95,4 @@ char ps2_get_ascii(uint8_t scancode) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,10 @@
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <stdint.h>
|
||||
#include <vfs.h>
|
||||
|
||||
int init_ps2();
|
||||
void ps2_init_kbd(vfs_node_t* dev);
|
||||
uint8_t ps2_read_data();
|
||||
|
||||
char ps2_get_ascii(uint8_t scancode);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <lib/stream.h>
|
||||
#include <lib/print.h>
|
||||
|
||||
#include <drivers/vga/vga.h>
|
||||
#include <drivers/serial/serial.h>
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <common.h>
|
||||
#include <memory/mm.h>
|
||||
|
||||
#include <user/video.h>
|
||||
#include <sys/video.h>
|
||||
|
||||
static uint32_t framebuffer_address;
|
||||
static uint32_t framebuffer_width;
|
||||
@@ -19,25 +19,11 @@ static uint32_t framebuffer_total_pixels;
|
||||
static uint32_t framebuffer_pitch;
|
||||
static uint32_t framebuffer_bpp;
|
||||
|
||||
static uint8_t red_mask_sz;
|
||||
static uint8_t red_field_pos;
|
||||
static uint8_t green_mask_sz;
|
||||
static uint8_t green_field_pos;
|
||||
static uint8_t blue_mask_sz;
|
||||
static uint8_t blue_field_pos;
|
||||
|
||||
static uint32_t create_pixel(uint8_t r, uint8_t g, uint8_t b) {
|
||||
return (r >> (8 - red_mask_sz)) << red_field_pos
|
||||
| (g >> (8 - green_mask_sz)) << green_field_pos
|
||||
| (b >> (8 - blue_mask_sz)) << blue_field_pos;
|
||||
}
|
||||
|
||||
vga_color_t VGA_COLOR_BLACK = {0, 0, 0, 255};
|
||||
vga_color_t VGA_COLOR_RED = {0, 0, 255, 255};
|
||||
vga_color_t VGA_COLOR_GREEN = {0, 255, 0, 255};
|
||||
vga_color_t VGA_COLOR_BLUE = {255, 0, 0, 255};
|
||||
|
||||
|
||||
uint32_t vga_mmap(vfs_node_t* node, uint32_t address) {
|
||||
uint32_t fb_size_bytes = framebuffer_height * framebuffer_pitch;
|
||||
uint32_t num_pages = (fb_size_bytes + 4095) / 4096;
|
||||
@@ -77,6 +63,8 @@ void vga_init(
|
||||
framebuffer_pitch = fb_pitch;
|
||||
framebuffer_bpp = fb_bpp;
|
||||
|
||||
kprintf("mapping vga pages\n");
|
||||
|
||||
uint32_t fb_size_bytes = fb_height * fb_pitch;
|
||||
uint32_t num_pages = (fb_size_bytes + 4095) / 4096;
|
||||
for (uint32_t i = 0; i < num_pages; i++) {
|
||||
@@ -113,9 +101,7 @@ uint8_t vga_get_bpp() {
|
||||
}
|
||||
|
||||
void vga_clear_scrn(uint32_t color) {
|
||||
if (framebuffer_address == 0) return;
|
||||
|
||||
uint8_t* fb_bytes = (uint8_t*)framebuffer_address;
|
||||
uint8_t* fb_bytes = (uint8_t*)VGA_FRAMEBUFFER;
|
||||
uint8_t bytes_per_pixel = framebuffer_bpp / 8;
|
||||
|
||||
for (uint32_t y = 0; y < framebuffer_height; y++) {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#include "lib/font.h"
|
||||
#include "multiboot.h"
|
||||
#include "interrupts.h"
|
||||
#include "gdt.h"
|
||||
@@ -167,19 +166,15 @@ void kmain(multiboot_info* mbi) {
|
||||
dev->mnt = devfs;
|
||||
kprintf("mounted devfs\n");
|
||||
|
||||
console_init();
|
||||
kprintf("kernel console initialized\n");
|
||||
|
||||
int font_loaded = set_console_font("/fonts/kernel_font.psf");
|
||||
int font_loaded = set_console_font("/usr/fonts/kernel_font.psf");
|
||||
if (!font_loaded) {
|
||||
kprintf("failed to load console font\n");
|
||||
}
|
||||
console_init();
|
||||
|
||||
kprintf("console font set\n");
|
||||
kprintf("kernel console initialized\n");
|
||||
kprintf("basic initializations complete. check serial for details\n");
|
||||
|
||||
kprintf("starting rockos\n");
|
||||
load_root_program("/bin/vga_text_term.elf");
|
||||
|
||||
kprintf("kernel going to sleep...\n");
|
||||
load_root_program("/usr/bin/rockterm");
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ static uint32_t console_text_color;
|
||||
static uint32_t console_backgrnd_color;
|
||||
|
||||
static void write_vga_char(char c) {
|
||||
print_serial("write_vga_char invoked\r\n");
|
||||
uint32_t vga_pitch = vga_get_pitch();
|
||||
uint8_t* glyph = (uint8_t*)font->glyphs + (c * font->hdr->charsz);
|
||||
|
||||
@@ -71,7 +70,6 @@ void console_putchar(char c) {
|
||||
if (!font) return;
|
||||
|
||||
if (c == '\n') {
|
||||
print_serial("\r\n");
|
||||
console_col = 0;
|
||||
console_row++;
|
||||
if (console_row >= console_height) {
|
||||
@@ -80,7 +78,6 @@ void console_putchar(char c) {
|
||||
return;
|
||||
}
|
||||
|
||||
write_serial(c);
|
||||
write_vga_char(c);
|
||||
|
||||
console_col++;
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
mkdir -p initrd
|
||||
rm -f initrd/bin/*.elf
|
||||
|
||||
mkdir -p initrd/dev
|
||||
mkdir -p initrd/bin
|
||||
cp programs/bin/* initrd/bin
|
||||
|
||||
cd initrd
|
||||
cd sysroot
|
||||
find . -depth -print | cpio -o -H newc > ../isodir/boot/initrd.img
|
||||
cd ..
|
||||
Binary file not shown.
1
programs/rocksh/.gitignore
vendored
Normal file
1
programs/rocksh/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
rocksh
|
||||
@@ -1,10 +1,14 @@
|
||||
CC = i686-elf-gcc
|
||||
LD = i686-elf-ld
|
||||
|
||||
CFLAGS = -ffreestanding -O2 -Wall -Wextra -I../../rocklibc/include
|
||||
SYSROOT = ../sysroot
|
||||
USR_INCLUDE = $(SYSROOT)/usr/include
|
||||
USR_LIB = $(SYSROOT)/usr/lib
|
||||
|
||||
CFLAGS = -ffreestanding -O2 -Wall -Wextra -I$(USR_INCLUDE)
|
||||
LDFLAGS = -m elf_i386 -nostdlib
|
||||
|
||||
TARGET = rocksh.elf
|
||||
TARGET = rocksh
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
@@ -14,8 +18,9 @@ crt0.o: crt0.S
|
||||
main.o: main.c
|
||||
$(CC) $(CFLAGS) -c main.c -o main.o
|
||||
|
||||
$(TARGET): crt0.o main.o ../lib/rlibc.a
|
||||
$(LD) $(LDFLAGS) -T linker.ld crt0.o main.o ../lib/rlibc.a -o $(TARGET)
|
||||
$(TARGET): crt0.o main.o $(USR_LIB)/*
|
||||
$(LD) $(LDFLAGS) -T linker.ld crt0.o main.o $(USR_LIB)/* -o $(TARGET)
|
||||
cp $(TARGET) $(SYSROOT)/usr/bin
|
||||
|
||||
clean:
|
||||
rm -f *.o $(TARGET) compile_commands.json
|
||||
|
||||
1
programs/rockterm/.gitignore
vendored
Normal file
1
programs/rockterm/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
rockterm
|
||||
@@ -1,46 +1,31 @@
|
||||
#include "syscall.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/video.h>
|
||||
|
||||
#define VGA_TEXT_W 80
|
||||
#define VGA_TEXT_H 25
|
||||
typedef struct {
|
||||
|
||||
void term();
|
||||
} font_t;
|
||||
|
||||
void term_write_char(char c);
|
||||
void render_char_at(char c, int x, int y);
|
||||
|
||||
int spawn_shell();
|
||||
|
||||
int ptys;
|
||||
int ptym;
|
||||
|
||||
void* fb;
|
||||
fb_info_t fb_info;
|
||||
void* framebuffer_address;
|
||||
|
||||
int terminal_col = 0;
|
||||
int terminal_row = 0;
|
||||
|
||||
void term_write_char(char c) {
|
||||
|
||||
}
|
||||
font_t* terminal_font = NULL;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
ptym = pty(&ptys);
|
||||
|
||||
if (fork() == 0) {
|
||||
close(ptym);
|
||||
dup2(ptys, 0);
|
||||
dup2(0, 1);
|
||||
dup2(0, 2);
|
||||
|
||||
exec("/bin/rocksh.elf");
|
||||
}
|
||||
|
||||
close(ptys);
|
||||
dup2(ptym, 0);
|
||||
dup2(0, 1);
|
||||
dup2(0, 2);
|
||||
|
||||
int vga_fd = open("/dev/vga");
|
||||
if (vga_fd == -1) return 1;
|
||||
|
||||
@@ -52,9 +37,38 @@ int main(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
framebuffer_address = mmap(vga_fd);
|
||||
|
||||
mmap(vga_fd);
|
||||
|
||||
// if (!spawn_shell()) {
|
||||
// return 1;
|
||||
// }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void render_char_at(char c, int x, int y) {
|
||||
if (!terminal_font) return;
|
||||
}
|
||||
|
||||
void term_write_char(char c) {
|
||||
|
||||
}
|
||||
|
||||
int spawn_shell() {
|
||||
ptym = pty(&ptys);
|
||||
|
||||
if (fork() == 0) {
|
||||
close(ptym);
|
||||
dup2(ptys, 0);
|
||||
dup2(0, 1);
|
||||
dup2(0, 2);
|
||||
|
||||
if (!exec("/usr/bin/rocksh")) return 0;
|
||||
}
|
||||
|
||||
close(ptys);
|
||||
dup2(ptym, 0);
|
||||
dup2(0, 1);
|
||||
dup2(0, 2);
|
||||
return 1;
|
||||
}
|
||||
29
programs/rockterm/makefile
Normal file
29
programs/rockterm/makefile
Normal file
@@ -0,0 +1,29 @@
|
||||
CC = i686-elf-gcc
|
||||
LD = i686-elf-ld
|
||||
|
||||
SYSROOT = ../sysroot
|
||||
USR_INCLUDE = $(SYSROOT)/usr/include
|
||||
USR_LIB = $(SYSROOT)/usr/lib
|
||||
|
||||
CFLAGS = -ffreestanding -O2 -Wall -Wextra -I$(USR_INCLUDE)
|
||||
LDFLAGS = -m elf_i386 -nostdlib
|
||||
|
||||
TARGET = rockterm
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
crt0.o: crt0.S
|
||||
$(CC) $(CFLAGS) -c crt0.S -o crt0.o
|
||||
|
||||
main.o: main.c
|
||||
$(CC) $(CFLAGS) -c main.c -o main.o
|
||||
|
||||
$(TARGET): crt0.o main.o $(USR_LIB)/*
|
||||
$(LD) $(LDFLAGS) -T linker.ld crt0.o main.o $(USR_LIB)/* -o $(TARGET)
|
||||
cp $(TARGET) $(SYSROOT)/usr/bin
|
||||
|
||||
clean:
|
||||
rm -f *.o $(TARGET) compile_commands.json
|
||||
rm -rf .cache
|
||||
|
||||
.PHONY: all clean test
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
printf("hello, world!\n");
|
||||
return 0;
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
CC = i686-elf-gcc
|
||||
LD = i686-elf-ld
|
||||
|
||||
CFLAGS = -ffreestanding -O2 -Wall -Wextra -I../../rocklibc/include
|
||||
LDFLAGS = -m elf_i386 -nostdlib
|
||||
|
||||
TARGET = test.elf
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
crt0.o: crt0.S
|
||||
$(CC) $(CFLAGS) -c crt0.S -o crt0.o
|
||||
|
||||
main.o: main.c
|
||||
$(CC) $(CFLAGS) -c main.c -o main.o
|
||||
|
||||
$(TARGET): crt0.o main.o ../lib/rlibc.a
|
||||
$(LD) $(LDFLAGS) -T linker.ld crt0.o main.o ../lib/rlibc.a -o $(TARGET)
|
||||
|
||||
clean:
|
||||
rm -f *.o $(TARGET) compile_commands.json
|
||||
rm -rf .cache
|
||||
|
||||
.PHONY: all clean test
|
||||
@@ -1,21 +0,0 @@
|
||||
.global _start
|
||||
.extern exit
|
||||
.section .text
|
||||
_start:
|
||||
xor %ebp, %ebp
|
||||
|
||||
mov (%esp), %eax
|
||||
lea 4(%esp), %ebx
|
||||
lea 8(%esp,%eax,4), %ecx
|
||||
|
||||
and $-16, %esp
|
||||
|
||||
push %ecx
|
||||
push %ebx
|
||||
push %eax
|
||||
|
||||
call main
|
||||
|
||||
push %eax
|
||||
call exit
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x40000000;
|
||||
|
||||
.text ALIGN(4K) :
|
||||
{
|
||||
/* Force the crt0.o entry code to be placed FIRST in memory */
|
||||
KEEP(*crt0.o(.text))
|
||||
*(.text .text.*)
|
||||
}
|
||||
|
||||
.rodata ALIGN(4K) :
|
||||
{
|
||||
*(.rodata .rodata.*)
|
||||
}
|
||||
|
||||
.data ALIGN(4K) :
|
||||
{
|
||||
*(.data .data.*)
|
||||
}
|
||||
|
||||
.bss ALIGN(4K) :
|
||||
{
|
||||
_bss_start = .;
|
||||
*(.bss .bss.*)
|
||||
*(COMMON)
|
||||
_bss_end = .;
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
CC = i686-elf-gcc
|
||||
LD = i686-elf-ld
|
||||
|
||||
CFLAGS = -ffreestanding -O2 -Wall -Wextra -I../../rocklibc/include
|
||||
LDFLAGS = -m elf_i386 -nostdlib
|
||||
|
||||
TARGET = vga_text_term.elf
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
crt0.o: crt0.S
|
||||
$(CC) $(CFLAGS) -c crt0.S -o crt0.o
|
||||
|
||||
main.o: main.c
|
||||
$(CC) $(CFLAGS) -c main.c -o main.o
|
||||
|
||||
$(TARGET): crt0.o main.o ../lib/rlibc.a
|
||||
$(LD) $(LDFLAGS) -T linker.ld crt0.o main.o ../lib/rlibc.a -o $(TARGET)
|
||||
|
||||
clean:
|
||||
rm -f *.o $(TARGET) compile_commands.json
|
||||
rm -rf .cache
|
||||
|
||||
.PHONY: all clean test
|
||||
0
rocklibc/.gitignore → rlibc/.gitignore
vendored
0
rocklibc/.gitignore → rlibc/.gitignore
vendored
@@ -13,4 +13,5 @@ typedef struct {
|
||||
uint32_t fb_size;
|
||||
} fb_info_t;
|
||||
|
||||
|
||||
#endif
|
||||
@@ -80,5 +80,5 @@ void* mmap(int fd) {
|
||||
}
|
||||
|
||||
int ioctl(int fd, uint32_t request, void* arg) {
|
||||
return syscall3(SYS_IOCTL, fd, request, arg);
|
||||
return syscall3(SYS_IOCTL, fd, request, (uint32_t)arg);
|
||||
}
|
||||
0
rlibgui/include/psf.h
Normal file
0
rlibgui/include/psf.h
Normal file
20
rlibgui/makefile
Normal file
20
rlibgui/makefile
Normal file
@@ -0,0 +1,20 @@
|
||||
CC = i686-elf-gcc
|
||||
AR = i686-elf-ar
|
||||
CFLAGS = -ffreestanding -O2 -Wall -Wextra -Iinclude
|
||||
TARGET = rlibgui.a
|
||||
|
||||
SRCS = $(shell find src -name "*.c")
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
$(TARGET): $(OBJS)
|
||||
$(AR) rcs $@ $(OBJS)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) $(TARGET) compile_commands.json
|
||||
|
||||
.PHONY: all clean
|
||||
BIN
rlibgui/rlibgui.a
Normal file
BIN
rlibgui/rlibgui.a
Normal file
Binary file not shown.
0
rlibgui/src/psf.c
Normal file
0
rlibgui/src/psf.c
Normal file
Binary file not shown.
Reference in New Issue
Block a user