Hello everyone,
I am developing BlockOS, a hobby operating system created from scratch.
Current features:
- Custom boot process
- Custom kernel
- GUI development
- Desktop environment
- Filesystem experiments
The project is still under development and I am continuously improving it.
I would appreciate feedback, suggestions, and ideas from the OSDev communit
Thank you for your time!
https://github.com/gurijb2016-create
Github link:
[Project] BlockOS – Hobby Operating System
[Project] BlockOS – Hobby Operating System
Last edited by guri on Sun May 31, 2026 10:47 am, edited 1 time in total.
Re: [Project] BlockOS – Hobby Operating System
When I click on the github link, I get a 404, which typically either means the link is wrong or you forgot to set the repo to public. Github responds with 404 on unauthenticated requests for private repos to not leak their existence.
Carpe diem!
Re: [Project] BlockOS – Hobby Operating System
Your OS Project is Wonderful! It has PS/2 Mouse Keyboard Driver, GUI and Hard Disk Driver.
But your Makefile and Source Code have some problem:
This you can use string.c
I'm a Chinese, you kan use translate software.
Hope you have a nice day!
But your Makefile and Source Code have some problem:
- - Compile command is "-ffreestanding", but in gui.c, kernel you use "string.h", if you use "-ffreestanding", them is cannot use.
- - linker.ld has syntax error.
Code: Select all
//string.h
#ifndef KERNEL_STRING_H
#define KERNEL_STRING_H
//#include <stddef.h> // 如果项目里没有 stddef.h,可以把 unsigned int 换成 unsigned int
// 设置一段内存的值(通常用于清零)
void* memset(void* dest, int c, unsigned int count);
// 复制一段内存的数据
void* memcpy(void* dest, const void* src, unsigned int count);
// 比较两段内存的内容
int memcmp(const void* s1, const void* s2, unsigned int count);
// 计算普通 C 字符串的长度(遇到 '\0' 结束)
unsigned int strlen(const char* str);
#endif
Code: Select all
//string.c
#include "string.h"
// 如果没有引入 stddef.h,可以在这里手动定义一下 unsigned int
// typedef unsigned int unsigned int;
void* memset(void* dest, int c, unsigned int count) {
char* temp = (char*)dest;
for (unsigned int i = 0; i < count; i++) {
temp[i] = (char)c;
}
return dest;
}
void* memcpy(void* dest, const void* src, unsigned int count) {
char* dest_temp = (char*)dest;
const char* src_temp = (const char*)src;
for (unsigned int i = 0; i < count; i++) {
dest_temp[i] = src_temp[i];
}
return dest;
}
int memcmp(const void* s1, const void* s2, unsigned int count) {
const unsigned char* p1 = (const unsigned char*)s1;
const unsigned char* p2 = (const unsigned char*)s2;
for (unsigned int i = 0; i < count; i++) {
if (p1[i] != p2[i]) {
return p1[i] - p2[i];
}
}
return 0;
}
unsigned int strlen(const char* str) {
unsigned int len = 0;
while (str[len] != '\0') {
len++;
}
return len;
}
Hope you have a nice day!
