Part9. 프레임워크 컴파일 및 링크 방법

원문 :  http://kkamagui.springnote.com/pages/347128

 

들어가기 전에...

0.시작하면서...

 프레임워크는 부트 로더와 커널 로더 그리고 커널의 세가지로 나누어진다고 앞서 이야기 했다. 이제 각각을 컴파일하고 링크하여 커널 이미지를 생성해보자.

 

1.컴파일(Compile) 및 링크(Link) 환경

1.1 프레임워크 1.0.3 버전 이전 사용자

 프레임워크 1.0.3 버전 이전의 사용자는 아래의 배치 파일을 프레임워크 루트 폴더에서 찾을 수 있다.

  • 부트 로더 및 부트 로더 컴파일 및 링크 : MakeBoot.bat
  • 커널 : MakeKernel.bat
  • 커널 이미지 만들기 : MakeImg.bat

 배치 파일로 되어있는데 각 파일을 열어보면 단순한 몇개의 명령으로 되어있다. 만약 위 단계에서 에러가 발생하면 에러메시지가 화면에 출력되게 되고, 해당 열을 찾아서 에러를 수정하고 다시 컴파일 하는 방법으로 작업을 계속 수행하면 된다.

 아마 커널을 자주 수정하게 될 것이므로  MakeKernel.batMakeImg.bat 배치 파일은 마르고 닳도록 입력하게 될 것이다.

 

1.2 프레임워크 1.0.3 버전 이상 사용자

 프레임워크 1.0.3 버전 이상 사용자는 이클립스 환경에서 편리하게 사용하기위해 makefile이 통합되어있다. 빌드하는 방법은 간단히 아래와 같이 입력하면 된다.

make -f makefile 또는 make

 나머지는 makefile이 알아서 처리해준다. 에러가 발생하지 않는다면 disk.img 파일까지 완전히 생성해 줄 것이다. 간혹 종속성의 문제로 인해 제대로 빌드되지 않는 상황이 발생하는데 아래와 같이 입력하여 프로젝트를 깨끗히 정리한다음 다시 빌드를 수행하도록 하자.

make clean

 

1.3 커널 이미지 생성

 커널 이미지 만들기를 수행하면 내부적으로 Boot Image Maker(BIM.exe)라는 파일을 사용하는데, 자작한 프로그램이다. 이 프로그램이 하는 역할은 부트 로더와 커널로더 그리고 커널 이미지를 섹터 크기(512Byte)로 정렬한 다음 하나의 디스크 이미지 파일로 생성하는 것이다.

 부가적인 역할은 부트 로더 영역의 일부를 할애하여 전체 이미지의 크기 및 커널 이미지의 시작 위치 등을 기록하는 것이다. 이 값은 부트 로더가 디스크로부터 메모리에 로딩해야하는 섹터의 크기이며, 커널 로더가 1Mbyte 위치에 재배치해야하는 크기이다.

 BIM 코드는 아직 정리가 안되었기 때문에 추후에 올리기로 하고, 지금은 파일 상에서 어떻게 구성되는지만 확인하고 넘어가자.

 커널이미지.PNG

<Boot Image Maker가 생성하는 이미지의 구성>

 

 위에서 보는 것과 같이 단순히 섹터크기로 맞추어 연결해 주며, 부트 로더의 뒷부분에 전체 이미지의 크기, 커널 시작 섹터, 커널 크기를 넣어주는 역할만 한다.

 

 

2.실제 컴파일 및 링크 화면

2.1 프레임워크 1.0.3 버전 이전 사용자

 아래는 MakeBoot.bat가 정상적으로 실행되었을 때 화면이다.

Makeboot.PNG

<MakeBoot.bat 실행>

 이 화면 외에 다른 메시지가 보인다면 그것은 에러 메시지이므로 에러를 처리하도록 하자.

 

 아래는 MakeKernel.bat가 정상적으로 실행되었을 때 화면이다.

MakeKernel.PNG

<MakeKernel.bat 실행>

 이 화면 외에 다른 메시지가 보인다면 그것은 에러 메시지이므로 에러를 처리하도록 하자.

 

 마지막으로  MakeImg.bat가 정상적으로 실행되었을 때 화면이다.

MakeImg.PNG

<MakeImg.bat 실행>

 이 화면 외에 다른 메시지가 보인다면 그것은 에러 메시지이므로 에러를 처리하도록 하자.

 

2.2 프레임워크 1.0.3 버전 이상 사용자

 아래는 make가 정상적으로 실행되었을 때 화면이다. 프레임워크 1.0.3 이상 버전에 대한 빌드 및 환경 설정은 20 작업환경 설치 문서를 참고하자.

 

 Framework1.PNGFramework2.PNG

<프레임워크 빌드 진행 화면(좌측) 및 빌드 완료 화면(우측)>

 

 

3.커널에 파일 추가 방법

3.1 프레임워크 1.0.3 버전 이전 사용자

 커널에 기능을 추가하다보면 파일을 추가로 더 포함해야하는 경우가 생긴다. 그럴 경우 00Kernel 폴더의 Custom 폴더에 파일을 추가한 뒤에 makefile을 에디터로 열어서 수정하면 된다.

 그럼 어디를 수정해야 할까? 만약 스케줄링 기능을 넣어서 Scheduler.c 파일을 추가해야 한다고 가정하면 아래 부분을 고치면 된다.

  1. # 응용 프로그램 파일
    FW.o : $(CUSTOMDIR)Framework.c
    1. $(GCC) -o FW.o $(CUSTOMDIR)FrameWork.c
  2. KShell.o : $(CUSTOMDIR)KShell.c
    1. $(GCC) -o KShell.o $(CUSTOMDIR)KShell.c
  3. Sch.o : $(CUSTOMDIR)Scheduler.c 
    1. $(GCC) -o Sch.o $(CUSTOMDIR)Scheduler.c 
  4. #Object 파일 이름 다 적기
    #아래의 순서대로 링크된다.
    OBJ = A.o K.o Is.o D.o Int.o Key.o Stdlib.o Task.o FW.o KShell.o Sch.o

  위 처럼 파란색 부분을 추가해서 다시 makekernel.bat를 실행하면 정상적으로 커널에 포함할 수 있다.

 

3.2 프레임워크 1.0.3 버전 이상 사용자

 프레임워크 1.0.3 버전부터는 00Kernel 폴더의 Custom 폴더 및 FW 폴더 밑의 *.c 파일을 모두 찾아서 자동으로 빌드하도록 구성되어있다. 따라서 Custom 폴더 및 FW 폴더 밑에 .c 파일을 생성하고 make를 실행하면 된다.

 

 

4.마치면서...

 프레임워크 각 버전별로 빌드하고 이미지를 생성하는 방법에 대해서 알아보았다. 다음에는 프레임워크의 부트 로더 코드에 대해서 알아보자.

 

 

5.첨부

 

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.

이 글은 스프링노트에서 작성되었습니다.

+ Recent posts