본문 바로가기

운영체제 정리/64비트 OS 만들기 실습

[64비트 멀티코어 OS 원리와 구조] 2장 - OS 개발 환경을 구축하자

나는  맥을 사용하기 때문에 환경설정은 이 책을 보고 따라하기 힘들었음 (책은 윈도우 기반)

그래서 아래 내용도 맥 기준으로 다시 작성하였습니다.

 

1. GCC 설치

- GCC는 GNU Compiler Collection. 무료로 사용할 수 있는 컴파일러 관련 프로그램의 집합. (공식 사이트: https://gcc.gnu.org/)

- mac os는 리눅스 계열이므로 gcc가 설치되어 있을 수 있음.

- 확인은 c 확장자 파일을 생성해서, c언어를 이용해서 아무 코드나 작성해 놓고, 아래 명령어로 컴파일이 되는지 확인하면 된다.

gcc -m32 -o test32 test.c
gcc -m64 -o test64 test.c

gcc - 컴파일 명령어

-m32 옵션: 32비트용 코드를 생성(참고: https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html)

-m64 옵션: 64비트용 코드를 생성

-o 옵션: target의 이름으로 (예제에서는 test32) 컴파일한 출력파일을 만듦 (test32 클릭하면 실행됨)

 

1번은 32비트 환경에서 사용할 수 있도록 컴파일 하는 명령어인데, 맥에서는 아래 오류 메시지를 띄우고 동작하지는 않는다.

주요 원인은 The i386 architecture is deprecated for macOS이고, 현재 macOS에서는 i386 아키텍처를 지원하지 않아서 그런 것 같다. 현재 크게 중요한 것은 아니다.

 

중요한 것은 gcc로 컴파일이 되는지를 확인하는 것! 2번 명령어만 성공해도 된다.

 

 

2. 크로스 컴파일러 만들기

크로스 컴파일러는 자신이 실행되는 플랫폼이 아닌 다른 플랫폼에서 동작하는 실행 파일을 생성하는 컴파일러다.

즉, 대상 플랫폼이 없어도 파일을 생성할 수 있다.

 

gcc 소스 파일을 통해 크로스 컴파일러를 만들려면 먼저 GNU Binutils를 생성해야 한다. 바이너리와 관련된 유틸리티의 집합이다.

컴파일 과정을 거쳐 생성된 오브젝트 파일을 링크하여 실행 파일이나 라이브러리 파일을 생성하는 데 사용한다.

 

이 부분에서 제일 많은 오류가 발생하였다.

 

결국 나는 이런저런 이유로 인해서 맥에서 이 장을 그대로 구현하는 것을 실패했다. (가장 큰 이유는 맥에서 제공하는 링크 스크립트 파일은 크로스 컴파일 할 수 없다는 것이다.)

 

그래서 그냥 32bit, 64bit 모드 별개의 링크 스크립트를 사용하도록 한다.

 

우리는 책처럼 진행하지 않았으니, binutils가 어디있는지 확인해야 한다.

아마 대부분 설치되어있지 않을텐데, 그냥 brew를 통해서 설치하려고 했다.

 

다만 내 시점에서는 brew install을 했을때는 내부에 configure 파일이라던게 아예 없는 것 같아서, gnu의 ftp 서버에서 직접 다운로드를 받기로 했다.

https://ftp.gnu.org/gnu/binutils/

 

Index of /gnu/binutils

 

ftp.gnu.org

 

최신버전 압축 풀수 있는걸로 아무거나 받으면 된다.

 

그리고 현재 프로젝트 (OS 만들기)를 따라서 진행할 폴더에 압축을 풀어준다.

그 다음 아래의 명령어대로 진행해보자.

 

cd binutils-2.39
mkdir build && cd build
../configure --prefix=${HOME}/.local/binutils --target=i386-unknown-linux-gnu
make -j7
make install

64비트 컴퓨터는 --target을 --target=x86_64-unknown-linux-gnu 로 수정하자

참고: https://stackoverflow.com/questions/39059597/how-to-create-an-elf-executable-on-mac-os-x

 

How to create an ELF executable on Mac OS X?

I'm following this tutorial: https://littleosbook.github.io/#linking-the-kernel and I'm on a Mac. I'm at the point where I have an object file created from nasm, and I want to turn it into an ELF

stackoverflow.com

 

3. NASM 설치

- 무료로 사용할 수 있는 우수한 어셈블러.

- 맥에서는 brew로 설치하자 (https://formulae.brew.sh/formula/nasm)

- nasm -version 명령어를 통해 버전이 잘 나오면 설치 완료!

 

4. IDE 설치

- 본인이 사용하던 IDE가 있다면 그걸로 진행해도 무방하다.

 

5. QEMU 설치

- QEMU는 오픈 소스 프로세서 에뮬레이터다. 다양한 종류의 프로세서를 소프트웨어적으로 구현하였다. (공식 홈페이지: https://www.qemu.org/)

- 여기는 친절하게 다운로드 방법을 운영체제에 따라 알려준다. 역시 여기서도 brew로 설치를 안내하고 있다.

- 설치가 완료되면 qemu-system-x86_64 명령어를 실행하면 작은 터미널이 띄워질텐데, 정상적으로 띄워지기만 하면 설치 성공이다.

 

 

 

 

 

https://product.kyobobook.co.kr/detail/S000001223755

 

64비트 멀티코어 OS 원리와 구조 1 | 한승훈 - 교보문고

64비트 멀티코어 OS 원리와 구조 1 | 부트 로더에서 GUI까지, 운영체제의 모든 것을 직접 제작한다!OS 개발 60일 프로젝트『64비트 멀티코어 OS 원리와 구조』제1권. 이 책은 저자가 직접 OS를 개발하

product.kyobobook.co.kr