티스토리 뷰
디렉토리 구조
전체 빌드를 위한 최상위에 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 |