관리 메뉴

밤색모자이크의 개발이야기

2일차. 부트섹터 분리와 Make 파일 생성 본문

Embedded/OS제작 with OS구조와원리

2일차. 부트섹터 분리와 Make 파일 생성

밤색모자이크 2017. 6. 27. 07:37

안녕하세요. 밤색모자이크입니다.

OS 제작 2일차 입니다.

이번에는 1일차에서 만든 부트섹터 실행하는 파일을 앞으로 만들 OS와 분리 시키는 작업을 합니다.

또, 더 편하게 실행하고 정리하기 위해서 Make파일을 생성하는 것을 하겠습니다.




개발환경


운영체제 : Windows10

텍스트 편집기 : Atom

PC 에뮬레이터 : QEMU




소스코드


ipl.nas code

 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
; ipl.nas
; 부트섹터로 분리
; TAB=4

		ORG		0x7c00			; 메모리 로딩되는 위치

; 표준적인 FAT12 포맷 플로피디스크를 위한 서술

		JMP		entry
		DB		0x90

		DB		"HELLOIPL"		; 부트섹터의 이름을 자유롭게 써도 좋음
		DW		512			; 1섹터의 크기 (바이트 단위 512로 해야함)
		DB		1			; 클러스터의 크기 (1섹터로 해야함)
		DW		1			; 예약된 섹터의 수
		DB		2			; 디스크의 FAT 테이블의 수
		DW		224			; 루트 디렉토리 엔트리의 수 (보통은 224엔트리)
		DW		2880			; 디스커의 총 섹터 수(2880섹터로 해야함)
		DB		0xf0			; 미디어 타입(0xf0으로 해야함)
		DW		9			; 하나의 FAT 테이블의 섹터 수 (9섹터로 해야함)
		DW		18			; 1트랙에 몇 섹터가 있는가 (18로 해야함)
		DW		2			; 헤드의 수 (2로 해야함)
		DD		0			; 파티션을 사용하지 않으므로 이곳은 반드시 0
		DD		2880			; 이 드라이브의 크기를 한 번 더 씀
		DB		0,0,0x29		; 잘 모르곘지만 이 값을 넣어두면 좋다고 함
		DD		0xffffffff		; 볼륨 시리얼 번호
		DB		"HELLO-OS   "		; 디스크의 이름
		DB		"FAT12   "		; 포맷의 이름 (8바이트)
		RESB	18				; 18바이트 남겨둠

; 프로그램 본체

entry:
		MOV		AX, 0			; 레지스터 초기화
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX
		MOV		ES,AX

		MOV		SI,msg
putloop:
		MOV		AL,[SI]
		ADD		SI, 1			; SI에 1을 더한다.
		CMP		AL,0
		JE		fin
		MOV		AH, 0x0e		; 한 문자 표시 가능
		MOV		BX, 15			; 컬러 코드
		INT		0x10			; 비디오 BIOS 호출
		JMP		putloop
fin:
		HLT					; CPU가 정지한다.
		JMP		fin			; 무한 루프

msg:
		DB		0x0a, 0x0a		;줄 바꿈 문자 2개
		DB		"hello, chestnut brown mosaic OS"
		DB		0x0a			;
		DB		0

		RESB	0x7dfe-$
		DB		0x55, 0xaa


1일차의 hellos.nas 프로그램을 더 보기 쉽게 변형하고 부트섹터이기 때문에 파일이름을 ipl.nas 로 수정하였습니다.

5번째 줄의 ORG는 메모리의 시작지점을 지정하는 것인데, 0x7c00으로 고정되어 있다고 합니다.

entrt, putloop, fin, msg는 이름을 지정하고 점프를 이용하여 이쪽으로 이동할 수 있습니다.


자세한 명령어의 구분이나 설명은 책을 참조해주세요. 


Makefile code

 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
32
33
34
35
36
37
38
# Make 파일

default :
	../z_tools/make.exe img

# 파일 생성 규칙

ipl.bin : ipl.nas Makefile
	../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
	../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek \
		wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img

# 명령어

asm :
	../z_tools/make.exe -r ipl.bin

img :
	../z_tools/make.exe -r helloos.img

run :
	../z_tools/make.exe img
	copy helloos.img ..\z_tools\qemu\fdimage0.bin
	../z_tools/make.exe -C ../z_tools/qemu

install :
	../z_tools/make.exe img
	../z_tools/imgtol.com w a: helloos.img

clean :
	-del ipl.bin
	-del ipl.lst

src_only :
	../z_tools/make.exe clean
	-del helloos.img


Make파일입니다. 자동으로 만들어 주는 일련의 명령어를 모아뒀다고 생각하시면 됩니다.

명령 프롬트로를 싱항여 make 명령어 형식으로 실행합니다.

예를 들어, OS를 실행시키고 싶다면 make run 으로 실행합니다.

이미지 파일을 생성을 안하고 run을 하면 파일 생성 규칙에 따라 순서대로 실행합니다.


추가적으로 파일관리는 위하여 clean, src_only를 추가하였습니다.

이는 이미지 파일나 부가적으로 생성된 파일들을 삭제하는 명령어입니다.


make.bat

1
2
#make 파일을 실행합니다.
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9


사실 저도 정확히 무슨 파일인지는 모르겠습니다.

make.exe를 실행하여 일련의 스크립트를 실행하는 것인다.

%1 %2는 순서대로 Makefile에 있는 스크립트를 등록하는 거로 생각하고 있습니다.

책에는 따로 설명이 있지않습니다.





실행



위 소스코드를 다 작성하시면 위에 보이는 화면같이 파일들이 배치되어있습니다.

예제 파일에 있는 helloos5를 복사하셔도 똑같습니다.

여기서 !cons_nt.bat을 실행하면 명령 프롬프트가 나타납니다.




make run 을 바로 입력하고 실행하면 밑에 보이는 것 처럼 이미지파일이 없어도 자동으로 스크립트를 실행하여 생성 후에 OS를 실행합니다.


make run



OS를 실행하고 나면 이미지파일들과 여러가지 부가적인 파일들이 생성된 것을 확인 할 수 있습니다.



make src_only를 실행하면 아래와 같이 초기 파일들만 남고 삭제됩니다.


make src_only







결과



1일차와 달라진 것은 없습니다.

저는 그냥 hello, world에서 제가 그냥 바꿔봤습니다.



참고 자료

OS 구조와 원리, 카와이 히데미 저, 한빛미디어 출판

링크 : http://www.hanbit.co.kr/store/books/look.php?p_code=B9833754652


기존 글 바로가기 링크


Comments