티스토리 뷰

디렉토리 구조

전체 빌드를 위한 최상위에 makefile 생성 후 내용 작성

all: BootLoader Disk.img

BootLoader:
@echo
@echo ================ Build Boot Loader ================
@echo

make -C 00.BootLoader

@echo
@echo ================ Build Complete ================
@echo

Disk.img: 00.BootLoader/BootLoader.bin Disk.img

@echo
@echo ================ Disk Image Build Start ================
@echo

cp 00.BootLoader/BootLoader.bin Disk.img

@echo
@echo ================ All Build Complete ================
@echo

clean:
make -C 00.BootLoader clean
rm -f Disk.img

그리고 00.BootLoader 밑으로 makefile 생성

all: BootLoader.bin

BootLoader.bin: BootLoader.asm
nasm -o BootLoader.bin BootLoader.asm

clean:
rm -f BootLoader.bin

최상위 폴더에서 make 를 실행했지만 make 명령어를 찾을 수 없다고 나왔고 build-essential 설치

apt-get install build-essential

이제 make 를 입력하게 되면 당연히 BootLoader 가 없다고 나온다. 그럼 make 가 정상적으로 동작한다는 사실이므로 BootLoader.asm 파일을 추가해서 빌드한다.

================ Build Boot Loader ================



make -C 00.BootLoader

make[1]: Entering directory '/home/ubuntu/MINT64/00.BootLoader'

make[1]: *** No rule to make target 'BootLoader.asm', needed by 'BootLoader.bin'. Stop.

make[1]: Leaving directory '/home/ubuntu/MINT64/00.BootLoader'

makefile:4: recipe for target 'BootLoader' failed

make: *** [BootLoader] Error 2

부트로더 작성

BootLoader.asm -> https://github.com/KNero/os-study/blob/master/00.BootLoader/BootLoader.asm

(예제를 계속 진행하다 보면 후에 파일이 변경될 것이다.)

작성 후 최상의 위치의 make 를 실행하면 아래와 같이 빌드가 되고 Disk.img 가 실행된다. (다은 장 부터는 빌드 로그를 포함하지 않을 것이다.)

================ Build Boot Loader ================

make -C 00.BootLoader
make[1]: Entering directory '/home/ubuntu/MINT64/00.BootLoader'
nasm -o BootLoader.bin BootLoader.asm
make[1]: Leaving directory '/home/ubuntu/MINT64/00.BootLoader'

================ Build Complete ================

make: Circular Disk.img <- Disk.img dependency dropped.

================ Disk Image Build Start ================

cp 00.BootLoader/BootLoader.bin Disk.img

================ All Build Complete ================

생성된 이미지를 qemu 를 통해서 실행해 본다.

책의 예제에서는 -M pc 사용항 pc 모드로 실행했지만 지금의 우분투는 그래픽이 없기 때문에 옵션을 바꿔서 실행했다. 그리고 플로피 디스크를 사용하지 않기 때문에 -fda 로 변경해 주었다. (-m 64 는 64M 의 메모리를 사용한다는 의미)

예제 옵션 : qemu-system-x86_64 -L . -m 64 -fda c:/MINT64/Disk.img -localtime -M pc

실제 사용한 옵션 : qemu-system-x86_64 -L . -m 64 -hda ./Disk.img -localtime -display curses


그럼 아래와 같이 부팅화면이 나온다.


실행을 중단하고 싶을 경우 창을 하나 더 열어서 도커에 접속한 뒤 ps -ef 로 pid 를 확인하고 kill 해준다.

'OS 개발' 카테고리의 다른 글

#4 보호 모드 커널로 진입  (0) 2019.02.07
#3 floppy disk 로 부터 OS 이미지 읽기  (0) 2019.01.22
#1 개발환경 세팅 1  (0) 2018.12.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함