최종적(?)으로 Nucleus 에 대한 사용법에 대한 설명을 하고 있다.
연구실에서 Nucleus 를 구입한지는 거의 1년이 되고, 내가 Nucleus 를 사용한지는 6 개월이 넘은 것 같다.
그동안 지리하게 끌어오던 Nucleus 에 대한 문제를 해결하고, 이에 대한 사용방법에 대해서 설명하고자 한다.
설치 및 컴파일 환경 설정에 대한 사항은 [“EDGE 를 이용한 디버깅”] 을 참고하기 바란다.
그대신 여기서는 EDGE 를 이용한 디버깅 에서 언급하지 않았던, 내용들에 대해서 중점적으로 다룬다.
또한 각각의 net, file, plus 가 제대로 동작하는지 여부를 확인하는 방법도 설명한다.
컴파일 하기
모든 컴파일 환경을 갖췄다는 가정하에, 소스 파일을 다운로드 받는다.
위 소스 파일은 file, plus, net 이 모두 포함된 것이다. 압축을 풀고, c:\source 라는 디렉토리 아래로 옮긴다.
그리고 edge 를 실행시켜서, 프로젝트에 소스 파일들을 추가시킨다.
여러 가지의 모듈 프로젝트가 있지만, 내가 궁극적으로 사용할 것들은 모두 _demo 라는 이름의 프로젝트들 이다.
컴파일하면, 자동으로 elf 파일과 bin 파일이 생성된다. 모든 프로젝트를 무사히 컴파일했다면, 총 3 개의 elf 파일과 3 개의 bin 파일이 생성된다.
elf 파일은 sdram 에 올려서 실행시켜볼 수 있고, bin 파일은 flash 에 write 해서 실행할 수 있다.
컴파일 환경만 제대로 갖췄다면, 컴파일은 이상없이 수행될 것이다. 이제 각각의 file, plus, net 을 테스트 해보자!
plus_demo
Nucleus 커널 자체라고 보면 된다. 기본 Nucleus 에 아무것도 올라가있지 않은 것이다. 커널이 가지고 있어야할 것들(메세지, 세마포어등)을 API 형태로 제공한다. 이것에 대한 내용은 관련 문서를 참고하면 된다.
plus_demo 는 간단히 3 개의 태스크를 생성시켜서, 번갈아가며 출력문을 뿌리는 테스트 프로그램이다. 물론 elf 나 bin 모두 출력 결과는 동일하다.
참고로 plus 는 board_sp, plus, plus_sp, serial 모듈을 참조한다.
file_demo
파일시스템을 마운트해서 사용할 수 있게 해주는 모듈(?)이다. 현재, FAT, ISO9660 을 지원하고 있다. 이중 연구실에서 구입한 것은 FAT 이다.
또한 여러가지의 디바이스들 중에서 SD card 타입을 구입했다. 때문에 테스트하기 위해서는 SD card 가 필요하다. 포맷 시에는 FAT 계열로 해야 한다.
이 테스트 프로그램은 SD card 를 마운트해서 여러가지 디렉토리와 파일을 생성하고 지우는 역할을 한다.
만일 기존의 테스트 했던 SD card 를 삽입해서 테스트를 하면, 출력문에 'Errors' 횟수가 증가할 수 있다.
flash 테스트 시에 아래와 같은 메세지가 출력되면서 멈춘다면,
[NUF_STS] FILE:src\sd_disk.c sd_disk_ope***********************************
SD card 를 포맷하고 다시 테스트해본다.
참고로 file 은 file, plus, plus_sp, sd_mmc, serial, board_sp 모듈을 참조한다.
net_demo
TCP/IP 스택이다. 기본적으로 제공하는 것은 tftp 와 ping 이다.
테스트 프로그램을 사용해서는 ping 테스트를 할 수 있다. 이를 위해서는 프로그램을 수행하고, 보드에 랜선을 연결해야 한다.
정상적인 테스트를 위해서는 타겟보드와 호스트 간에 IP 주소를 맞춰 주어야 한다. demoi.c 파일에 보드의 IP 를 선언하는 부분이 있다.
/* CONFIGURABLE PARAMETERS */ CHAR DEMOI_SMTP_Server[] = {(CHAR) 0,(CHAR) 0,(CHAR) 0,(CHAR) 0}; /* Not used for loopback demo */ CHAR DEMOI_FTP_Server[] = {(CHAR) 0,(CHAR) 0,(CHAR) 0,(CHAR) 0}; /* Not used for loopback demo */ CHAR DEMOI_Local_Ip[] = {(CHAR) 166,(CHAR) 104,(CHAR) 30,(CHAR) 16}; CHAR DEMOI_Subnet[] = {(CHAR) 255,(CHAR) 255,(CHAR) 255,(CHAR) 0};
적당히 수정해준다. net 테스트 프로그램은 별다른 출력문이 없기 때문에, 제대로 수행되는지 확인하기 위해서는 반드시 ping 테스트를 해야 한다.
참고로 net 은 cs8900, fal, net, plus, plus_sp, serial, board_sp 를 참조한다.
flash write 하기
삼성에서 제공하는 test program 을 사용해서 동일한(?) 방법으로 0x0 번지 부터 write 하면 된다.