20 ARM7/ARM9 커스텀 프로젝트(Custom Project) 만들기
원문 : http://kkamagui.springnote.com/pages/425564
들어가기 전에...
- 이 글은 kkamagui에 의해 작성된 글입니다.
- 마음껏 인용하시거나 사용하셔도 됩니다. 단 출처(http://kkamagui.tistory.com, http://kkamagui.springnote.com)는 밝혀 주십시오.
- 기타 사항은 mint64os at gmail.com 이나 http://kkamagui.tistory.com으로 보내주시면 반영하겠습니다.
- OS 제작에 대한 상세한 내용은 책 "64비트 멀티코어 OS 구조와 원리"를 참고하기 바랍니다.
0.시작하면서
ARM9만 사용해도 어느정도 기능을 갖춘 홈브루를 만들 수 있다. 왠만한 컨트롤은 ARM9에서 할 수 있으며, ARM7에서만 가능한 기능도 IPC를 통해서 libnds가 어느정도 구현해 놓았기 때문이다.
하지만 여기서 안주할 수 없다. ARM7에 특별한 기능을 추가하기 위해서는 당연히 ARM7 작성하는 것이 필수이다. 그럼 어떻게 ARM7 코드를 작성하여 ARM9 코드와 같이 NDS 파일을 만들 수 있는지 알아보자.
1.Root의 makefile
\devkitPro\examples\nds\templates 폴더에 가면 Combine 폴더가 있다. Combine 폴더는 ARM7과 ARM9의 elf 파일을 생성하고 그것을 하나로 뭉쳐 nds 파일을 생성하도록 make 파일이 구성되어있다. 일단 Root 폴더에 있는 makefile을 보자.
- #---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITARM)),)
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM)
endif - include $(DEVKITARM)/ds_rules
- export TARGET := $(shell basename $(CURDIR))
export TOPDIR := $(CURDIR)
.PHONY: $(TARGET).arm7 $(TARGET).arm9- #---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
all: $(TARGET).ds.gba - $(TARGET).ds.gba : $(TARGET).nds
- #---------------------------------------------------------------------------------
$(TARGET).nds : $(TARGET).arm7 $(TARGET).arm9
ndstool -c $(TARGET).nds -7 $(TARGET).arm7 -9 $(TARGET).arm9 - #---------------------------------------------------------------------------------
$(TARGET).arm7 : arm7/$(TARGET).elf
$(TARGET).arm9 : arm9/$(TARGET).elf - #---------------------------------------------------------------------------------
arm7/$(TARGET).elf:
$(MAKE) -C arm7
#---------------------------------------------------------------------------------
arm9/$(TARGET).elf:
$(MAKE) -C arm9 - #---------------------------------------------------------------------------------
clean:
$(MAKE) -C arm9 clean
$(MAKE) -C arm7 clean
rm -f $(TARGET).ds.gba $(TARGET).nds $(TARGET).arm7 $(TARGET).arm9
위에서 보는 것과 같이 ARM7과 ARM9 폴더 각각의 make를 실행하여 .arm7, .arm9 파일을 생성하고 그것을 ndstool로 합쳐서 nds 파일을 만든다.
2.arm9 및 arm7의 makefile
arm9의 makefile에 대한 설명은 00 NDS makefile 및 NDS 파일 생성 과정 분석에서 이미 했으니 찾아보도록 하자. ARM7 또한 ARM9의 makefile과 다른 것이 거의 없으니 위 문서를 참조하면 된다.
3.makefile의 수정
templete 폴더에 있는 makefile은 arm7과 arm9이 거의 비슷하지만 약간 다르다. 아래는 ARM7의 INCLUDES 값이다.
- INCLUDES := include build
arm9 및 arm7에 build 폴더를 추가하자. bin2s.exe 파일을 통해 binary 데이터를 롬파일에 추가하면 build 폴더에 .h 파일이 생성된다. 따라서 편리하게 쓰기위해서 build 폴더를 include에 추가하자.
자작한 Custom Library를 위한 폴더를 추가해서 Custom 폴더에 자주쓰고 거의 변하지 않는 파일들을 넣어서 나중에 다시 사용할 수 있도록 하자. arm7/arm9 makefile의 SOURCES 부분에 MyLibrary 폴더를 추가하고 arm7/arm9 각각의 폴더에 MyLibrary 폴더를 추가한다. 앞으로 이 폴더에는 자체 제작한 라이브러리 파일을 넣을 것이다.
DATA 부분에는 롬파일에 메모리 배열형태로 추가할 데이터가 있는 폴더를 넣는다. data 폴더로 설정하고 .bin 파일의 이름으로 파일을 생성하면 bin2s.exe 실행파일에 의해 .o 파일이 생성되어 같이 링크되게 된다.
- SOURCES := source MyLibrary
- DATA := data
이 프로젝트를 빌드하면 .arm9 및 .arm7 파일이 생성되고 .nds 파일이 만들어 진다.
4.실행 결과
생성된 .nds 파일을 실행하면 터치 스크린의 좌표를 찍어주는 아래와 같은 화면이 보인다.
<실행화면>
5.마치며...
지금까지 ARM7 및 ARM9 모두를 사용하는 Templete 파일을 이용해서 나만의 Custom Project를 생성하는 방법을 알아보았다. 이로써 우리는 ARM7 및 ARM9 코드를 모두 작성할 수 있게 되었다. 폴더가 접혔을 때 백그라운드 처리 또는 끄기, 리부팅과 같은 ARM7에서만 접근 가능한 작업들을 할 수 있게 된 것이다.
이제 마구마구 기능을 추가해서 멋진 홈브루를 만들어 보자. @0@)/~
6.첨부
- MyTemplete.zip : 사용할 Templete 파일
이 글은 스프링노트에서 작성되었습니다.
'NDS 홈브루(Homebrew) > 홈브루 Tutorial' 카테고리의 다른 글
23 Soft Reset 분석 (0) | 2007.11.14 |
---|---|
22 타이머(Timer)를 이용한 프로파일러(Profiler) 만들기 (2) | 2007.11.14 |
10 타이머(Timer) 제어 (0) | 2007.11.14 |
08 사운드(Sound) 제어 (0) | 2007.11.14 |
07 문쉘(Moon shell)의 터치스크린(Touch Screen) 소스 (0) | 2007.11.14 |