FAIDE에서 ezboot 컴파일 따라하기 - toolchain 변경에 따른 소스 수정
 
FAIDE에서 ezboot를 컴파일하는 과정을 진행하면서, 발생되는 에러를 하나씩 수정하도록 하겠습니다.
 
 
 
1. toolchain 변경에 따른 소스 수정
 
보드 설정을 부분을 추가한 뒤, Makefile을 선택하고 Build All(단축키 Ctrl + B)를 눌러 컴파일 하여
아래와 같은 에러가 나타났습니다.
 
 
toolchain 이 업데이트 되면서 arm-linux-gcc 4.1.1 버전에서 생기는 문제입니다.
toolchain 이 변경되면서 생기는 문제와 문법적인 문제를 해결하도록 하겠습니다.
 
 
 
1.1 ezboot/arch_s3c2440/makefile_config (19, 20번 줄) 수정
 
※ 수정 전 (붉은 색으로 표시된 부분을 제거해줍니다.)
--------------------------------------------------------------------------------------------------------------------------------------
CFLAGS   += -fno-strict-aliasing -fno-common -pipe -mapcs-32 -fno-zero-initialized-in-bss
CFLAGS   += -march=armv4 -mtune=arm9tdmi -malignment-traps -msoft-float -fno-builtin
--------------------------------------------------------------------------------------------------------------------------------------
 
※ 수정 후
--------------------------------------------------------------------------------------------------------------------------------------
CFLAGS   += -fno-strict-aliasing -fno-common -pipe -fno-zero-initialized-in-bss
CFLAGS   += -march=armv4 -mtune=arm9tdmi -msoft-float -fno-builtin
--------------------------------------------------------------------------------------------------------------------------------------
 
 
 
1.2 ezboot/arch_s3c2440/console.c (26번 줄) 수정
 
※ 수정 전
--------------------------------------------------------------------------------------------------------------------------------------
static volatile u32 *UART = (volatile u32 *) &(S3C2440_REG_UART2_BASE); // UART 베이스 어드레스

#define UART_LCR        ((volatile u32) UART[ 0])       //  UART line control register
#define UART_UCR        ((volatile u32) UART[ 1])       //  UART control register
#define UART_FCR        ((volatile u32) UART[ 2])       //  UART FIFO control register
#define UART_MCR        ((volatile u32) UART[ 3])       //  UART modem control register
#define UART_TRxSTAT    ((volatile u32) UART[ 4])       //  UART Tx/Rx status register
#define UART_ERRSTAT    ((volatile u32) UART[ 5])       //  UART Rx error status register
#define UART_FSR        ((volatile u32) UART[ 6])       //  UART FIFO status register
#define UART_MSR        ((volatile u32) UART[ 7])       //  UART modem status register
#define UART_TXD        ((volatile  u8) UART[ 8])       //  UART transmit buffer register
#define UART_RXD        ((volatile  u8) UART[ 9])       //  UART receive buffer register
#define UART_BAUD       ((volatile u32) UART[10])       //  Baud rate divisor register

--------------------------------------------------------------------------------------------------------------------------------------
 
※ 수정 후
--------------------------------------------------------------------------------------------------------------------------------------
static volatile u32 *UART = (volatile u32 *) &(S3C2440_REG_UART2_BASE); // UART 베이스 어드레스

#define UART_LCR        (*((volatile u32 *) (&UART[ 0])))       //  UART line control register
#define UART_UCR        (*((volatile u32 *) (&UART[ 1])))       //  UART control register
#define UART_FCR        (*((volatile u32 *) (&UART[ 2])))       //  UART FIFO control register
#define UART_MCR        (*((volatile u32 *) (&UART[ 3])))       //  UART modem control register
#define UART_TRxSTAT    (*((volatile u32 *) (&UART[ 4])))       //  UART Tx/Rx status register
#define UART_ERRSTAT    (*((volatile u32 *) (&UART[ 5])))       //  UART Rx error status register
#define UART_FSR        (*((volatile u32 *) (&UART[ 6])))       //  UART FIFO status register
#define UART_MSR        (*((volatile u32 *) (&UART[ 7])))       //  UART modem status register
#define UART_TXD        (*((volatile  u8 *) (&UART[ 8])))       //  UART transmit buffer register
#define UART_RXD        (*((volatile  u8 *) (&UART[ 9])))       //  UART receive buffer register
#define UART_BAUD       (*((volatile u32 *) (&UART[10])))       //  Baud rate divisor register

--------------------------------------------------------------------------------------------------------------------------------------
 
 
 
1.3 ezboot/main/net.c (45번 줄) 수정
 
※ 수정 전 (붉은 색으로 표시된 부분을 변경해줍니다.)
--------------------------------------------------------------------------------------------------------------------------------------
unsigned IPChecksum(char *ptr, int len)
{
    u32     xsum;

    xsum = 0;
    while (len-- > 0) xsum += *((u16 *)ptr)++;
--------------------------------------------------------------------------------------------------------------------------------------
 
※ 수정 후
--------------------------------------------------------------------------------------------------------------------------------------
unsigned IPChecksum(char *ptr, int len)
{
    u32     xsum;

    xsum = 0;
    while (len-- > 0)
    {
         xsum += *((u16 *)ptr);
         ptr  += 2;

    }
--------------------------------------------------------------------------------------------------------------------------------------
 
 
 
1.4 ezboot/arch_s3c2440/timer.c (195번 줄) 수정
 
※ 수정 전 (붉은 색으로 표시된 부분을 변경해줍니다.)
--------------------------------------------------------------------------------------------------------------------------------------
for( lp = 0; lp < delay_limit; lp++ ) usec = lp;
--------------------------------------------------------------------------------------------------------------------------------------
 
※ 수정 후
--------------------------------------------------------------------------------------------------------------------------------------
for( lp = 0; lp < delay_limit; lp++ )
{
    usec = lp;
    asm("nop");
}
--------------------------------------------------------------------------------------------------------------------------------------
 
 
 
위와 같이 수정을 하면 toolchain 관련된 문제는 사라집니다.
 
아직, FAIDE에서 수정 해야 할 부분이 있기에 다음 강좌에서 컴파일을 하면서 발생하는 에러를 수정하도록 하겠습니다.