어셈블리에서 OS를 만들려고했습니다. 나는 실패했다. 이 코드는 피 각질이었습니다. 이것은 내 두 번째 시도입니다.
Stivale 프로토콜과 함께 Limine Bootloader를 사용하고 있습니다.
이 repo는 Limine을 하위 모듈로 사용 하므로이 리베르를 재귀 적으로 복제해야합니다.
git clone --recursive https://github.com/soumitradev/BruhOS.git
이 프로젝트를 컴파일하려면 크로스 컴파일러를 설정하는 것이 좋습니다 . 기본 toolchain.sh 파일은 X86_64 플랫폼의 엘프 파일에 대한 크로스 컴파일러를 설치하는이 리포지트의 루트에 포함되어 있습니다.
크로스 컴파일러를 설치 한 후 QEMU에서 OS를 실행하기 위해 make run 실행할 수 있습니다.
현재 다음과 같은 명령을 사용할 수 있습니다.
make all : OS의 .hdd 파일을 만듭니다. 그게 다야.make disk : OS의 .hdd 파일을 만듭니다. 그게 다야.make run : OS 용 .hdd 파일을 만들고 QEMU에서 실행하십시오.make log : OS의 .hdd 파일을 만들고 실행하고 QEMU가 로그를 생성하도록하십시오.make logs : OS의 .hdd 파일을 만들고 실행하고 QEMU가 로그를 생성하도록하십시오.make debug : OS 용 .hdd 파일을 만들고 실행 한 다음 디버깅을 위해 GDB에 첨부하십시오.make clean : 작업 디렉토리를 청소하고 모든 빌드 인공물을 제거하십시오. toolchain.sh 스크립트를 실행하면 크로스 컴파일러 ~/.local/bin/cross_compiler/x86_64/ 에 설치합니다. GCC, GDB 및 Binutils가 포함됩니다. 크로스 컴파일러 바이너리에는 접두사 x86-64-elf- 있습니다. 예를 들어, gcc 실행하려면 ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc 실행해야합니다. 접두사가 우리가 실행하려는 이진에 어떻게 선정되는지 주목하십시오.
참고 : 이 프로세스를 더 빨리 만들려면 스레드 수를 변수로 설정해야합니다.이 프로세스는 일반적으로 시스템이 가지고있는 스레드 수보다 1이 더 높습니다. toolchain.sh 컴퓨터에는 8 개의 스레드가 있으므로 toolchain.sh 스크립트에서 THREADS 변수를 9로 설정하십시오.
글을 쓰는 시점에서 최신 GCC, GDB 및 Binutils 버전은 각각 10.2.0, 9.2 및 2.35입니다. 다른 버전을 원한다면 동일한 toolchain.sh 스크립트에서 BINUTILSVERSION , GCCVERSION 및 GDBVERSION 변수를 교체하십시오.
참고 : 이 스크립트를 슈퍼업자로 실행하지 마십시오. 스크립트를 실행하면 시간이 걸리기 때문에 안정적인 인터넷 연결과 커피 한 잔이 필요합니다.)
Limine은 존재하는 가장 서사적 인 부트 로더입니다.
Qword, Rock 및 Dripos는 매우 도움이되었습니다. 이 코드는 코드의 클러스터가 거의 없습니다. 그들의 코드는 잘 쓰여지고 이해하기 쉽고 OSDEV를 배우기에 좋은 곳입니다.
OSDEV Discord 서버는 또한 배우고 질문을하기에 좋은 곳이며 일반적으로 훌륭한 커뮤니티입니다.
스크린 샷은 툴체인에 반 마감 된 커널을 테스트하는 데 소요되는 시간의 가치가 없기 때문에 스크린 샷.


모든 파일은 C ++ 17 표준을 사용하며 LIBGCC를 제외한 표준 라이브러리를 사용하지 않습니다 (OS/커널 개발에는 명백함). 모든 객체 파일 및 커널 빌드 파일은 파일을 make clean 하거나 수동으로 삭제하는 것을 사용하여 커밋하기 전에 청소해야합니다. Gitignore에는 몇 가지 기본 필터가 포함되어 있지만 항상 빌드 인공물을 저 지르지 않습니다.
Makefile을 제외한 모든 파일은 2 개의 공간으로 들여 쓰기로 압축됩니다. 그렇습니다. 나는 4 개의 공간을 좋아하지만 이전 경험을 가지고 있으면 구조와 같은 거대한 나무를 생성 할 수 있으며 2 개의 공간 계약으로 더 깨끗해 보입니다. MakeFile에는 정의에 따라 탭 압입이 필요합니다. 포맷하면 파손됩니다.
Google 서식 지침을 사용하고 있는지 확인하십시오. 이것은 대 코드에서 설정할 수 있습니다.
테스트없이 커밋을 밀고 작동하는지 확인하지 마십시오.
기본 기능이 사용하려는대로 작동하는 경우 커밋을 밀어 넣으십시오. 나는 당신이 모든 보안 결함을 포시하고 밀기 전에 패치하기를 기대하지 않습니다.
나중에 코드가 이러한 표준을 따르는지 확인하는 프리 푸시 확인 스크립트를 추가 할 수 있습니다.