
경고! 아직 거의 완료된 것은 없습니다 . 여기의 모든 것은 실험적이고 매우 활발한 개발입니다. 주의를 기울이십시오.
컴퓨터는 이상합니다 . 그들이 어떻게 작동하는지 모른다면 그들이 마법 같은 느낌이 들었다는 의미에서 이상합니다. 만약 그리고 언제, 그것이 어떻게 작동하는지 배우기 시작하면 그 마법의 느낌이 사라집니다. 당신은 "와우! 이것은 화려합니다"또는 "와우 ... 똥입니다."
따라서 기본적으로 두 가지 옵션이 있습니다.
아직 분명하지 않은 경우, 나는 후자를 가져 갔다 .
기본적으로 "컴퓨터"에 대해 더 많이 배우고 싶었습니다. 상대적으로 높은 수준의 소프트웨어에서 작업하는 것은 꽤 재미 있지만, 낮은 수준의 인턴과 물건의 작업을 보는 것이 좋지 않습니다.
"오, 그래서
malloc()TCRnewTLB대한 나의 전화는VMAmmap()MAIRMMU된다.
내가 전혀 몰랐던 이러한 추상화 층이있었습니다! 나는 거기서 멈춰야했지만 아니요. 대신, 나는 말했다 : "좋아. 나는 낮은 수준의 재산의 불명예스러운 느낌을 정말 좋아한다. '간단한'운영 체제를 작성하여 야생으로 가서 모든 추상화를 배우려고 노력하자. 그리고 지금, 나는 여기에 있습니다.
진행중인 취미 운영 체제 /W "수제"마이크로 커널 . 이름은 왕좌의 게임 세계에서 가장 정치적이고 엉망인 대륙에서 나온 것입니다. [^2] 나는 정말 좋아했습니다 (예, 당신이 원하는 모든 것을 판단합니다). 모든 것이 모든 곳에 있으며 아무것도 의미가 없습니다.
이 프로젝트는 운영 체제에 대해 배우고 그 과정에서 재미를 갖도록 도와줍니다. 나는 OS 개발에 대해 많이 알고 있다고 주장하지 않습니다. 따라서 관행, 디자인 Chocies 및 여기에서 볼 수있는 일부 구현은 당신을 놀라게 할 것입니다.
나는 당신의 기대치가 낮음>. <
중요한 참고 : Westeros는 매우 초기 개발 중입니다. 물건이 바뀌거나, 브레이크 또는 똑바로 바보가 될 것입니다. 나는 아직도 아직 최종 목표를 정의하지 않았습니다. 그때까지 한 번에 모든 곳, 어디서나 모든 것을 기대합니다.
/dev /proc 하면 idk?)mkdir , touch & cat 과 같은 기본 쉘 명령내면의 일에 조금 더 뛰어 들자. 대상 기계는 매우 구체적이며 정적 입니다. ARM64 아키텍처 (ARMV8)와 QEMU의 ARM 미덕 머신 만 지원하여 최대한 간단하게 유지하고 싶었습니다.
대상 기계는 다음과 같습니다.

기본 주변 장치 만 정의됩니다. 안타깝게도 이것은 USB, NVME 및 NIC가 없음을 의미합니다. :( 아마도 미래에?
다음은 제가 지원할 주변 장치입니다.
커널은 간단한 마이크로 커널 설계 (L4-Family와 같은)를 따릅니다. 이해하기 쉬운 간단한 커널을 만들고 프로세스 중에 가능한 한 많이 배우도록 도와주고 싶었습니다.
나는 처음에 MIT의 XV6을 따랐다. 그러나 물었을 때, 사람들은 그것이 너무 "순진/저렴한"것이라고 말했고 아마도 내가 IRL ( 그들은 놀라운 사람들 BTW )에 도움이되지 않을 것이라고 말했습니다. 그래서 나는 그들의 조언을 받아 마이크로 널 디자인으로 가기로 결정했습니다. 또한 더 흥미로운 것 같습니다
경고! 내 수제 마이크로 넬 디자인이 당신을 유발할 것입니다. 예를 들어, 장치 드라이버를 사용자 공간에 넣고 스케줄러를 커널 공간 내부에 넣습니다 (기본적으로 "적절한/acedemic"디자인을 따르지 않음).
시간 만 좀주세요. 나는 아직도 배우고있다>. <
다음은 커널의 전반적인 개요입니다. (Todo : 곧 업데이트 될 예정입니다 ...)

TODO : 전체 OS 사양. 미래의 목표는 무엇이며 미래의 목표.


|-- Build <- Compiled objects, binaries & debug files
|-- Documents <- Reference documents
|-- Emulation <- QEMU scripts & Device Tree Structure
|-- Kernel <- The source code. Headers, C and C++ files
| `-- Arch <- Architecture related code
| `-- Drivers <- Driver source and header files
| `-- Library <- Library source and header files
| `-- Include <- Kernel header files
|-- Media <- Images and other media
|-- Toolchain <- Cross-compiling environment
|-- Userland <- User level source code
| `-- Dir. <- TBD.
|-- .gitignore <- Good ol' .gitignore
|-- Makefile <- Makefile
`-- README.md <- Main README
현재 Westeros를 부팅하는 유일한 방법은 -kernel 매개 변수를 통해 QEMU의 AARCH64 미덕 머신입니다.
커널 (및 OS)을 시작하는 부분을 Shim이라고합니다. 커널 이미지와 함께 링크 된 작은 코드 조각이며 시스템 부트 스트랩을 담당합니다.
커널이 제어하기 전에 일부 작업을 처리합니다.
참조 : SEL4 -ELFLOADER
kmain() 바로 직전에 ARM64 Machine (예 : 레지스터)
0xffff0000401080000x401010000x401020030x401020000x400007010x401030000x401040030x401040000x400007010xbbff440c04000b00000000 (DEVICE_nGnRnE)0b00000100 (DEVICE_nGnRE)0b00001100 (DEVICE_GRE)0b01000100 (NORMAL_NC)0b11111111 (NORMAL)0b10111011 (NORMAL_WT)0b00000000 (Res)0b00000000 (Res)0x4801000100b0 (48 bit)0b100 (44 bits, 16TB)0b01000 (16)0b01000 (16)0b0 (Hierarchical permissions enabled)0b0 (Hierarchical permissions enabled)0b0 (Top Byte used)0b0 (Top Byte used)0b0 (8 bit)0b0 (TTBR0_EL1.ASID defines the ASID)0b0 (Perform table walk)0b0 (Perform table walk)0b10 (4 KiB)0b00 (4 KiB)0b00 (Non-shareable)0b00 (Non-shareable)0b00 (Outer Non-cacheable)0b00 (Outer Non-cacheable)0b00 (Inner Non-cacheable)0b00 (Inner Non-cacheable)0x40101000 (k_l0_pgtbl)0x40103000 (u_l0_pgtbl)0xc508390b1 (MMU enabled)0b0 (Alignment fault checking is disabled)0b00b1 (SP Alignment check enabled)0b1 (SP Alignment check enabled for EL0)0b1 (System instruction memory barrier enabled for EL0 Aarch32)0b0 (Access to Stage 1 Normal memory from EL0 & EL1 are Stage 1 Non-cacheable)Westeros Kernel은 마이크로 널 설계를 따릅니다. 다른 사람/org는 마이크로 넬 (예 : L4, Minix)을 설계하는 방법에 대한 해석이 다릅니다. 여기서는 커널을 가능한 한 간단하게 유지하는 마이크로라는 용어를 사용합니다. 이것은 다음을 의미합니다.
위의 모든 내용은 사용자 공간 응용 프로그램으로 구현해야합니다.
커널은 다음과 같은 서비스 및 기능을 제공 합니다 .
mmap() )msgsend() , msgrecv() )thread_create() )intr_attach() )gettimeofday() )yield() ) 커널에는 부트 로더에서 [초기] 사용자 이미지가 필요합니다. 이 이미지에는 커널이 시작될 최초의 ELF 실행 파일 ( root task 및 process manager )가 포함되어야합니다.
사용자 이미지는 Linux 시스템에서 사용되는 InitRD로 생각할 수 있습니다.
커널이 제공하는 모든 것의 전체 목록 및 내부 작업은 나중에 도로 아래로 설명됩니다. 아직 구현 하지 못했어요 ..
참조와 관련하여, 나는 다음 마이크로 커널 및 OS를 많이 사용했습니다.
Todo : 재미있는 것들. 그들이 OS를 시작한 사람을 기다리는 것은 무엇입니까?
다음 서비스가 구현됩니다.
services.config ) 운영 체제를 구축하고 실행하려면 ARM GNU Toolchain , QEMU 및 약간의 Patience ™의 세 가지 주요 사항이 필요합니다.
좋아하는 운영 체제에 모든 것을 구축 할 수 있습니다. ARM GNU Toolchain Windows , MacOS 및 GNU/Linux 에서 사용할 수 있습니다. 그러나 아직 창을 테스트하지 않았습니다. 그래서 당신은 그 공간에 혼자 있습니다. 죄송합니다 :(
아래 단계는 GNU/Linux (AARCH64) 호스트 용입니다.
0. git make 있는지 확인하십시오
$ apt install git make # if using `apt`
$ pacman -S git make # if using `pacman`1.이 저장소를 복제하십시오
$ git clone https://github.com/TunaCici/WesterOS.git 2. 최신 ARM GNU Toolchain 다운로드하십시오
ARM GNU 툴체인 다운로드 웹 페이지로 이동하십시오.
다운로드하려면 적절한 Aarch64 Bare-Matel 대상을 선택하십시오. 버전은 중요 하지 않으므로 최신 버전을 선택하십시오. 그러나 다운로드 한 도구 체인을 호스팅하는 것은 중요합니다. 자신의 운영 체제를 위해 생성 된 것을 선택하십시오.
예를 들어 OS가 GNU/Linux (x86_64) 인 경우 다운로드합니다.
https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
$ cd WesterOS/Toolchain
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xz다운로드 된 파일의 "무결성"및 "서명"을 확인하는 것은 귀하의 책임입니다. 다운로드 페이지에 제공된 SHA256 키를 사용하십시오.
3. 다운로드 된 ARM GNU Toolchain 추출하십시오
Westeros/Toolchain 에서 추출하십시오.
$ tar -xvf arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xz 4. Makefile 에서 TOOLCHAIN_PATH 수정하십시오
TOOLCHAIN_PATH 는 새로 다운로드하고 추출한 ARM GNU Toolchain 가리 려야합니다. 호스트 OS 및 도구 체인 버전은 내 것과 다를 수 있으므로 경로 변수를 편집해야합니다.
올바르게 설정하지 않으면 make 프로세스는 다음과 같은 오류 메시지로 실패합니다.
make[1]: Toolchain/arm-gnu-toolchain-12.2.rel1-darwin-arm64-aarch64-none-elf/bin/aarch64-none-elf-as: No such file or directory
따라서 TOOLCHAIN_PATH 편집하십시오.
# Open the main Makefile /w your favorite text editor
$ vim Makefile
# And change the `TOOLCHAIN_PATH` accordingly. For example..
> TOOLCHAIN_PATH=Toolchain/arm-gnu-toolchain-12.2.rel1-darwin-arm64-aarch64-none-elf
# Save & exit 5. make 사용하여 빌드하십시오
$ make all빌드는 메시지 빌드가 완료되면 끝납니다. 인생을 즐기십시오 <3 . 보지 않으면 저에게 연락하십시오. 문제 수정을 시도하겠습니다>. <
Westeros는 QEMU를 사용 하여만 실행할 수 있습니다. 실제 하드웨어를위한 완전히 부팅 가능한 이미지를 만들 계획이 없습니다. 원래 제 생각은 Raspberrry Pi 4B를 모방하는 것이었지만 테스트하고 탈지 할 때 "초보자 친화적"이 아닐 수도 있음을 깨달았습니다. 그래서, qemu입니다!
뻔뻔한 플러그 시간! QEMU에 대해 더 많이 원한다면 내 qemu_starter github thingy를 방문하십시오.
0. qemu-system-aarch64 설치되어 있는지 확인하십시오
$ apt install qemu-system qemu-utils # if using `apt`
$ pacman -S qemu-full # if using `pacman`1. Westeros를 발사하십시오
$ make run2023 년 7 월 9 일 현재 Westeros는 똑바로 비어 있습니다! 따라서 터미널에서 매우 기본적인 커널 메시지를 보는 것 외에는 아무것도 할 수 없습니다.
그런 다음 Westeros는 애호가 운영 체제 이자 학습 과정 입니다. 실제로 소스 코드를 탐색하려고 노력해야합니다. 나는 당신이 거기에서 더 재미있을 것이라고 확신합니다.
TODO : 기본적으로 문서 인 다른 readme로 사용자를 탐색하십시오.