일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OS 제작
- os 만들기
- 운영체제
- 운영체제 정리
- 운영체제 제작
- 30일
- OS 강의
- hg
- OS
- Project Euler Problem
- 쉽게 배우는 운영체제 연습문제
- 맛집 추천
- 프라모델
- OS강의
- OS 그래픽 처리
- 건프라
- 건담
- 운영체제 만들기
- Project Euler 해답
- 운영체제 문제 풀이
- 쉽게 배우는 운영체제
- project euler
- 쉽게 배우는 운영체제 풀이
- OS 구조와 원리
- 건담 프라모델
- Gundam
- 맛집
- 쉽게 배우는 운영체제 솔루션
- rg
- 건담 엑스포
- Today
- Total
밤색모자이크의 개발이야기
2일차. 부트섹터 분리와 Make 파일 생성 본문
안녕하세요. 밤색모자이크입니다.
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
'Embedded > OS제작 with OS구조와원리' 카테고리의 다른 글
4일차. C언어와 화면 표시 - (2) 사각형 띄우기 (0) | 2017.07.09 |
---|---|
4일차. C언어와 화면 표시 - (1) 줄무늬 화면띄우기 (0) | 2017.07.09 |
3일차. 32비트 모드와 C언어 도입 (0) | 2017.07.07 |
1일차. 어셈블리 입문과 Helloworld 띄우기 (1) | 2017.06.20 |
OS 제작 공부 시작! (0) | 2017.06.20 |