

ARM의 64 비트 ARMV8-A 아키텍처에 익숙하지 않은 취미 OS 개발자를위한 튜토리얼 시리즈입니다. 이 자습서는 embedded system 에 대한 모 놀리 식 운영 체제 kernel 처음부터 처음부터 작성하는 방법에 대한 가이드의 단계별 여행을 제공합니다. 직렬 콘솔에 쓰기, 가상 메모리 설정 및 HW 예외 처리와 같은 일반적인 운영 체제 작업의 구현을 다룹니다. Rust 의 독특한 기능을 활용하여 안전과 속도를 제공합니다.
재미있게 보내세요!
안부,
Andre (@Andre-Richter)
추신 : 다른 언어는 대체 readme 파일을 찾으십시오. 예를 들어, README.CN.md 또는 README.ES.md . 번역가들에게 감사드립니다.
kernel 바이너리가 포함되어 있습니다.README 에는 짧은 tl;dr 섹션이 추가에 대한 간단한 개요를 제공하고 소스 코드가 이전 튜토리얼에 diff 표시하여 변경/추가 사항을 편리하게 검사 할 수 있습니다.tl;dr 섹션 외에도 본격적인 자세한 텍스트가 있습니다. 장기 계획은 모든 튜토리얼이 전문을 얻는다는 것입니다. 그러나 지금은 tl;dr 과 diff 아이디어를 얻기에 충분하지 않다고 생각하는 튜토리얼에만 해당됩니다.QEMU 에서만 실행하는 데만 적합한 토대 코드입니다.UART 의 출력을 관찰 할 수 있습니다.make doc 명령을 확인하십시오. 그것은 당신이 편리한 방식으로 광범위하게 문서화 된 코드를 탐색 할 수 있습니다.make doc 의 출력 
자습서는 주로 Linux 기반 배포판을 대상으로합니다. 대부분의 물건은 MacOS 에서도 작동하지만 이것은 실험적 입니다.
Docker Engine을 설치하십시오.
( Linux 만 해당 ) 사용자 계정이 Docker Group에 있는지 확인하십시오.
Rust 도구 체인을 준비하십시오. 대부분은 Rust-Toolchain.toml 파일을 통해 처음으로 사용됩니다. 우리가해야 할 일은 다음과 같습니다.
이미 Rust 버전이 설치된 경우 :
cargo install cargo-binutils rustfilt처음부터 녹을 설치 해야하는 경우 :
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt Visual Studio Code 사용하는 경우 Rust Analyzer Extension을 설치하는 것이 좋습니다.
( MacOS 만 해당 ) 몇 개의 Ruby 보석을 설치하십시오.
이것은 macOS Monterey 에서 Ruby 버전 3.0.2 로 저자가 마지막으로 테스트했습니다. rbenv 사용하는 경우 각 .ruby-version 파일이 이미 제자리에 있습니다. rbenv 에 대해 들어 본 적이 없다면이 작은 가이드를 사용해보십시오.
저장소 루트 폴더에서 실행하십시오.
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install 이 시리즈는 사용자의 친근감에 중점을 두려고합니다. 따라서, 내장 된 개발에서 가장 큰 진통 점을 최대한 많이 제거하려는 노력이 이루어졌다 : Toolchain hassle .
Rust 자체는 크로스 컴파일에 대한 내장 된 지원을 받았기 때문에 이미 많은 도움을주고 있습니다. x86 호스트에서 Raspberry Pi의 AArch64 아키텍처에 이르기까지 크로스 컴파일에 필요한 모든 것은 rustup 에 의해 자동으로 설치됩니다. 그러나 Rust 컴파일러 외에도 더 많은 도구를 사용합니다. 무엇보다도 :
QEMU 호스트 시스템에서 커널을 모방합니다.Minipush 라는 자체 제작 도구는 UART 위의 Raspberry Pi On-Demand에 커널을로드합니다.OpenOCD 및 GDB .호스트 시스템에 각 도구의 올바른 버전을 설치 및/또는 컴파일하는 동안 잘못 될 수있는 것이 많이 있습니다. 예를 들어, 분포는 필요한 최신 버전을 제공하지 않을 수 있습니다. 또는 이러한 도구 중 하나의 편집에 대한 수익이 어려운 종속성을 놓치고 있습니다.
이것이 우리가 가능할 때마다 Docker를 활용하는 이유입니다. 우리는 필요한 모든 도구 또는 종속성이 사전 설치된 컨테이너를 제공하고 있으며 필요하면 자동으로 당겨집니다. Docker에 대해 자세히 알고 제공된 컨테이너를 엿보기 위해 리포지토리의 Docker 폴더를 참조하십시오.
튜토리얼에서 개발 된 커널은 실제 하드웨어에서 실행되므로 USB 직렬 케이블을 통해 전체 경험을 얻는 것이 좋습니다.
CP2102 칩을 기반으로합니다.GND 및 GPIO PINS 14/15 에 연결합니다.chainloader 개발되며 SD 카드에서 잠시 동안 수동으로 복사 해야하는 파일이됩니다. UART 를 통해 주문형 부팅 중에 튜토리얼 커널을로드 할 수 있습니다. 
튜토리얼의 원래 버전은 C 의 베어 메탈 프로그래밍에 대한 Zoltan Baldaszti의 멋진 튜토리얼의 포크로 시작되었습니다. 나에게 헤드 스타트를 주셔서 감사합니다!
어느 쪽에도 라이센스가 부여되었습니다
귀하의 선택에.
귀하가 명시 적으로 명시 적으로 명시하지 않는 한, Apache-2.0 라이센스에 정의 된대로 귀하의 작업에 포함되도록 의도적으로 제출 된 기부금은 추가 이용 약관이나 조건없이 위와 같이 이중 라이센스를받습니다.