안녕하세요 여러분,이 튜토리얼은 64 비트 X86_64 아키텍처에 더 중점을 둔 기존 자습서에 대한 업데이트 된 확장입니다. C 또는 어셈블리에 대한 소개가 아니므로 먼저 다른 곳에서 배우고 싶을 수도 있습니다. 우리는 모든 것을 올바르게 문서화하기 위해 최선을 다 했으므로 이해하지 못하는 것이 있다면 몇 장을 되돌아 가야 할 수도 있습니다.
아직 완성되지는 않았지만 도움이 될 수 있다고 생각하는 시점에 도달했습니다.
이 튜토리얼은 C와 어셈블리에 대해 일반적인 이해를 가진 사람들을 대상으로하지만 반드시 컴퓨터 전문가는 아닙니다. 그것은 가능한 한 접근 할 수 있도록 설계되었으므로 우리가 일부 개념을 과도하게 설명하는 것처럼 느낄 수 있습니다 (그리고 괜찮습니다). 그러나 당신이 절망적으로 잃어버린 것을 발견하면 알려주십시오. 우리는 OS 개발에서 볼 수있는 게이트 키핑이 마음에 들지 않았기 때문에이 프로젝트를 만들었으며, 설명을 수정하거나 더 도움이 될 수있는 다른 리소스를 기꺼이 지적하게되어 기쁩니다.
이 프로젝트에 기여하거나 자신의 것을 추가하려면 풀 요청을 제출하십시오. 나는 가능한 빨리 그들에게 다가 가려고 노력할 것이다 :)
이 자습서는 clang 및 ld.lld 포함한 LLVM 컴파일러 제품군을 사용합니다. 설치되지 않은 경우 설치하지 않으면 경로에 추가해야합니다. 우리는 또한 어셈블러에 nasm 사용하고 qemu-system-x86_64 에뮬레이터로 사용합니다. 선택적으로 gdb 사용하여 커널 코드를 디버그 할 수 있습니다. 필수는 아니지만이 자습서는 쉘 스크립트를 사용하여 구축 및 디버깅을보다 쉽게 만들 수 있습니다. /bin/bash 에 bash 설치하는 것이 좋습니다 (또는 적어도 symlinked). 그렇지 않은 경우 bash 명령을 사용하여 스크립트를 실행할 수 있습니다.
전체 경로를 지정하지 않고 위의 모든 명령을 터미널 창에서 실행할 수 있어야합니다. 당신이 할 수 없다면, 당신은 아마 그것들을 설치하고 당신의 경로에 추가해야 할 것입니다. 이 튜토리얼은 Ubuntu (20.04)뿐만 아니라 MacOS (Catalina 및 Big SU)에서 테스트되었습니다. 대부분의 *닉스 머신에서는 잘 작동하지 않지만 다른 운영 체제는 공식적으로 지원되지 않습니다.
참고 : MACOS
gdb커널 (ELF64)의 디버그 기호에 어려움이 있습니다. Debug 출력 레벨을 MakeFiles에서 -GLLDB로 변경하고 대신 사용하거나 소스에서 새gdb구축해야 할 수도 있습니다.
그게 다야! Clang이 이미 다루었 기 때문에 CrossCompiler 또는 기타 도구를 설치할 필요가 없습니다. 행운을 빕니다. 문제가 있으면 언제든지 알려주십시오!