PSP의 sceIoDread 함수의 버그? 로 인하여 다국어 문자셋을 얻어올 수 없는 문제때문에 FAT 에 직접 접근하여 한글 파일명을 얻어와야만 했다. 개발하면서 문자셋 때문에 꽤나 애 먹었었다.
FAT 관련 자료는 인터넷에 꽤나 많이 널려 있으니 각자 찾아보길 바란다.
********************************************************************* 대부분의 메모리스틱이 1G 이상이고 FAT32를 사용하고 있으므로 FAT32 만을 지원한다. FAT12와 FAT16은 앞으로도 지원하지 않을 계획이다. *********************************************************************
내부적으로 숨겨진 자료형에 대해서는 굳이 알 필요가 없으며 필요하다면 자료를 찾아보도록 하라. 아래에 있는 file_t 구조체에 파일에 대한 정보를 담아 온다.
평소하던대로 중간중간에 디버그용 printf 를 넣어놓고 감으로 디버깅을 해왔었다. 맨날 하던 짓이지 왠만한 버그는 잡을 수 있었지만 그래도 가끔은 속썩이는 것들이 있다. 결국 PSPLink 를 깔고 GUI 디버그 툴을 설치하고 말았다.
원래 툴이 좋다는 것이야 잘 알지만 이것을 사용하는 것을 별로 안좋아하는데다가 평소 밥벌이로 죽자사자 하다보니 그리 필요로 하지도 않게 되었지만 생소한 크로스컴파일러의 불편함 때문에 결국 사용한다.
이 글은 PSP 프로그래밍에서 디버깅 때문에 고생하는 사람들이 있으면 도움이 될 것이다.
1. ps2dev.org 에 가서 PSPLink v2.0 을 다운받는다.
2. 다운 받은 파일을 풀면 v1.5 또는 v1.5_nocorrupt 가 있다. 해당 디렉토리 안에 있는 두개의 디렉토리를 ms0:/PSP/GAME150/ 으로 복사한다.
3. ms0:/PSP/GAME150/ 안에 복사한 디렉토리 중 한 곳에 psplink.ini 파일을 아래와 같이 편집한다. usbmass=0 usbhost=1 sioshell=0 kprintf=0 wifi=0 wifishell=0 usbshell=1 usbgdb=1 conshell=0 이것은 PSP를 USB B-type 으로 연결하여 USB shell로 GDBServer를 사용하겠다는 것이다.
4. PC에서 USB 드라이버를 설치해야 한다. 드라이버의 위치는 압출을 풀었을때 pc\windows\driver 안에 있다.
5. PC에서 usbhostfs_pc 를 빌드한다. usbhostfs_pc 의 경우 Cygwin 에서 빌드 해주어야 하는데 pc\usbhostfs_pc 디렉토리에 소스와 Makefile 이 있으니 Cygwin에서 해당 디렉토리로 이동하여 make 해주자. 만약 빌드가 제대로 되지 않는 경우 Cygwin 쉘에서 export BUILD_WIN32=1 를 해주고 다시 make 한다. 싫다면 Makefile 를 직접 손대도 된다. 컴파일 하기 위해선 pc\windows\lib 디렉토리도 반드시 필요하니 드라이버 설치후 삭제하지 않도록 한다.
6. PSP에서 PSPLink를 실행한다. 화면에 메세지 하나 달랑 뿌려지고 아무 동작도 없다.
7. Cygwin에서 usbhostfs_pc를 실행한다.
8. 터미널 프로그램 아무거나 사용해서 telnet 127.0.0.1 10000 으로 접속한다. host0:/> 가 나오면 PSPLink 가 성공적으로 동작 한 것이다. 터미널에서 디버깅 작업을 시작 할 수 있지만 GUI 툴인 psp-insight 를 설치하는 것이 좋다. 텔넷으로 접속후 elf 가 있는 디렉토리로 이동 후 debug xxx.elf 로 실행하면 GDBServer 가 실행된다.
9. psp-insight 의 설치는 PSPSDK 설치 과정에서 psptoolchain 에 마지막 과정에 들어 있다. 하지만 psptoolchain 안에 script 디렉토리 안에 008-insight.sh 을 수정해 주어야 한다. 파일을 열어서 쉘 스크립트가 시작하자 마자 실행되는 exit 를 제거해주고 toolchain 을 설치한다. 이미 설치되어 있다면 psp-insight 만 개별적으로 설치해주어도 된다. 이때는 psp용 패치를 직접 해주어야만 한다.
10. psp-insight 를 실행하고 GDBServer 127.0.0.1 10001 로 접속하면 소스레벨의 디버깅이 가능하다.