이제 본격적으로 Eclipse IDE를 이용하여 앞으로 만들 OS의 뿌리가 되는 작업을 할 것입니다.
이 글은 Ubuntu 환경에서 실행한 것이지만, Windows 환경도 크게 다르지 않습니다.
→ 운영 체제 환경
Parallels 15 -> Ubuntu 20.04 64bit
CPU : 2 core
Ram : 4GB
1. Eclipse 프로젝트 생성
먼저 Eclipse IDE를 켜줍니다.
그리고 아래의 사진과 같이 위의 상단 메뉴에서 File -> New -> C/C++ Project를 눌러 프로젝트 생성 화면으로 들어가 줍니다.
만약 아래의 두번 째 사진과 같은 화면이 뜬다면 C Managed Build를 선택하고 Next를 눌러줍니다.
1-2
먼저 프로젝트의 이름을 지정해주는데, 저는 Fisrt Sean's 64bit OS라는 뜻의 FS64 OS라고 지정했습니다.
그 다음은 경로를 지정해주는데 Eclipse를 처음 실행했을 때 지정했던 기본 디렉터리 경로를 이용하려면 Use default location을 선택하면 되고
만약 다른 위치의 경로를 지정하고 싶다면 Use default location 체크 박스를 해제한 후 지정하면 됩니다.
저는 Eclipse의 기본 디렉터리가 /home/sean/FS64 OS이고 해당 디렉터리 안에 FS64 OS라는 이름의 프로젝트 디렉터리를 생성했습니다.
그리고 Project의 type는 Makefile project -> Empty Project를 선택해준 뒤 Finish를 누르면 자신이 지정한 이름의 프로젝트가 생성됩니다.
1-3
앞으로 만들 OS는 리얼 모드, 보호 모드, IA-32e 모드용 코드를 나눠서 관리하기에 디렉터리 하나로 관리하는 것은 비효율적이므로
부트 로더와 대부분의 유틸리티 디렉터리는 소스 파일 디렉터리와 임시 파일 디렉터리를 구분하진 않고
보호 모드 커널, IA-32e 커널, 각 응용프로그램은 여러 파일로 구성되므로 혼잡함을 줄이는 목적으로 디렉터리를 나눕니다.
아래의 첫 번째 사진과 같이 디렉터리를 구성해줍니다. (아래 1-3-1 참고)
1-3-1
Eclipse IDE에서 자신의 프로젝트 디렉터리 하위에 디렉터리를 생성하려면 아래의 첫 번째 사진과 같이 자신의 프로젝트 디렉터리 -> New -> Folder을 선택합니다.
그리고 두 번째 사진과 같이 상위 디렉터리(프로젝트 디렉터리)는 선택이 되어 있을 것이므로 하위 디렉터리 이름을 입력하여 디렉터리를 만듭니다.
01.Kernel32
02.Kernel64
03.Application
04.Utility
위의 4개의 디렉터리 하위에 있는 Source 디렉터리와 Temp 디렉터리 그리고 HelloWorld 디렉터리와 ImageMaker 디렉터리는 자신의 프로젝트 디렉터리에서 우클릭하는 것이 아닌
각 01.Kernel32, 02.Kernel64, 03.Application, 04.Utility 이름에서 우클릭 -> New -> Foloer을 클릭하여 생성하면 됩니다.
2. Makefile
GNU Make Manual : http://www.gnu.org/software/make/manual
Make 프로그램은 소스 파일을 이용하여 자동으로 실행 파일 또는 라이브러리 파일을 만들어주는 빌드 관련 유틸리티입니다.
소스 파일과 목적 파일을 비교하여 최근 마지막으로 빌드한 뒤 수정된 파일이 있다면, 수정된 파일만 선택하여 빌드를 수행함으로써 빌드 시간을 줄여줍니다.
Makefile은 자동으로 빌드 작업을 수행하기 위해서는 각 소스 파일의 의존 관계나 빌드 순서 그리고 빌드 옵션 등에 대한 정보가 필요한데, 이러한 내용이 저장되어 있는 파일입니다.
→ Makefile 기본 문법
Target: Dependency
<tab> Command
<tab> Command
→ Target
● 일반적으로 생성할 파일을 나타냅니다.
● 특정 레이블을 지정하여 해당 레이블과 관련된 부분만 빌드하는 것도 가능합니다.
→ Dependency
● Target 생성에 필요한 소스 파일이나 오브젝트 파일 등을 나타냅니다.
→ Command
● Dependency에 관련된 파일이 수정되면 실행할 명령을 의미합니다.
(명령창이나 터미널에서 실행할 명령 또는 프로그램을 기술합니다.)
● <tab> 부분은 반드시 TAB 키를 이용하여 띄워야 합니다.
(일반적인 공백(스페이스)으로 탭 문자를 대체하면 make가 정상적으로 실행되지 않습니다.
make는 최종적으로 생성할 Target의 의존성을 추적하면서 빌드하기 때문에 makefile은 역순으로 따라가면 됩니다.
이제 자신이 만들 OS를 위한 Makefile을 만들겠습니다.
저의 기준으로 프로젝트 디렉터리 FS64 OS에서 우클릭 -> New -> File을 누릅니다.
그리고 아래의 두 번째 사진과 같이 File의 이름은 makefile로 하면 됩니다.
2-2
먼저 자신의 프로젝트 디렉터리 하위에 있는 makefile은 OS 이미지 생성을 위해 각 하위 디렉터리의 makefile을 실행하는 것이 목적입니다.
아래의 사진과 같은 내용을 입력해줍니다.
가장 위에 있는 all: BootLoader Disk.img 이라고 되어 있는 Target은 make를 실행하면서 옵션으로 Target을 직접 명시하지 않았을 때 기본적으로 사용하는 Target입니다.
여러 Target을 빌드할 때 'all' Target의 오른쪽에 순서대로 나열하면 한 번에 처리할 수 있습니다.
make에서는 빌드를 수행하는 도중에 다른 make를 실행할 수 있는데, 이는 빌드 단계를 세부적으로 나누고 계층적으로 수행할 수 있다는 의미입니다.
그리하여 make -C 00.BootLoader 이라고 되어 있는 Command는
최상위 디렉터리(FS64 OS) 하위에 00.BootLoader 디렉터리가 있고, 빌드 과정에서 00.BootLoader 디렉터리 하위에 있는 makefile을 빌드해야 하기 때문에 -C 옵션을 사용해서 make을 수행합니다.
2-3
그리고 이제 00.BootLoader 디렉터리 하위에 아래의 내용이 담긴 makefile을 만들어 줍니다.
00.BootLoader 디렉터리 하위에 있는 Makefile의 목적은 BootLoader.asm 파일을 nasm 어셈블리어 컴파일러로 빌드하여 BootLoader.bin 파일을 만드는 것입니다.
이렇게 두 개의 makefile을 만들었다면 아래의 사진처럼 Eclipse의 상단 메뉴에서 Proejct -> Build All(Ctrl+B)을 클릭하거나
Ubuntu 내의 Terminal에서 해당 프로젝트 디렉터리(FS64 OS)로 이동하여 make를 입력했을 때 아래의 사진과 같이 오류가 뜨면 정상적으로 동작한 것입니다.
'시작하지 말았어야 했던 것 > 64비트 멀티코어 OS' 카테고리의 다른 글
64비트 멀티코어 OS[3] - 4. 화면 버퍼와 화면 제어 (0) | 2021.02.18 |
---|---|
64비트 멀티코어 OS[3] - 3. 간단한 부트 로더 만들어보기 (0) | 2021.02.13 |
64비트 멀티코어 OS[3] - 1. 부팅과 부트로더란 (0) | 2021.02.10 |
64비트 멀티코어 OS[2] - 2. 운영 모드와 메모리 관리 기법 (0) | 2021.02.09 |
64비트 멀티코어 OS[2] - 1. 운영 모드와 레지스터 (0) | 2021.02.06 |