starup코드는 C소스상에서 액세스 하기 힘든 초기화 과정을 C코드의 main함수가 실행되기 이전에 실행되는

ASM코드 입니다. 따라서 주된 내용은 스택의설정, 각 메모리컨트롤러 설정, 익셉션처리 설정, 인터럽트 벡터테이블

설정등입니다. 따라서 startup코드는 프로그램을 작성할 때 항상 따라온다고 보시면됩니다. startup 코드 실행이

끝나면 C소스코드의 main함수가 실행되도록 하는 jump루틴이 들어가 있습니다. 다만 ASM코드만 즉 startup코드만

가지고 간단한 프로그램을 작성하기도 합니다.

 

  Boot코드는 부트과정을 돕는 프로그램으로 사용자에 의해 작성됩니다. S3C2440이나 2410은 NAND부트모드와

NOR부트모드가 있습니다(하드웨어 적으로). NOR부트모드에서는 NOR플래시의 0x0번지에 프로그램을 저장해 두면

그 프로그램이 바로 실행됩니다. 하지만 NAND부트모드는 NAND 플래시 메모리가 랜덤액세스가 가능한 메모리가 아니므로

NAND플래시에서 프로그램 실행이 되지 않습니다. 따라서 NAND플래시에 저장된 프로그램을 SDRAM으로 옮겨서

실행해야 하는데 이 과정을 사용자가 직접 구현해 줘야 합니다. 즉 이게 NAND부팅시의 부트코드가 되는것입니다.

실제프로그램을 실행하기 위해 그 프로그램을 로딩해주는 소형의 코드들이 부트코드로 보시면됩니다.

 

NAND부트 모드에서는 부트코드가 꼭 있어야하고 NOR 부트 모드에서는 있어도 되고 없어도 됩니다. 만약에 NOR부트모드에

서 부트코드를 사용한다면 부트코드가 0x0번지에 위치하고 실행될 프로그램은 NOR플래시 메모리 뒷부분에 위치 시켰다가

부팅될 때 부트코드에 의해 실행될 프로그램을 NOR플래시에서 SDRAM으로 옮긴다음 그 프로그램으로 점프하여 실행시킬 수

있습니다. 이렇게 하는 이유는 SDRAM이 액세스속도가 빠르기 때문에 가급적이면 프로그램을 SDRAM에서 실생시키기 위해

서 이고 부트코드에 의해 본 프로그램을 업데이트 하기 위해서도 사용합니다. 매번 JTAG장비로 NOR플래시에 writing할 수 없

으니 제품을 생산한 후에 부트코드에 의해 펌웨어를 업데이트 시키는 방법도 있습니다.

 
  부트코드에도 startup 코드가 포함됩니다. 부팅을 원하는 형태로 진행하기 위한 코드이므로 어차피 사용자 프로그램이나

마찬가지입니다. 따라서 기본적인 설정에 필요한 startup코드가 포함되어야 합니다. 다만 간단한 부트코드들은 startup코드

상에서 다 구현하기도 합니다.

+ Recent posts