'순대보드'에 해당되는 글 9건

  1. 2009.09.02 순대보드 Kernel Image
  2. 2009.09.02 순대보드 u-boot - 4
  3. 2009.08.11 순대보드 u-boot - 3
  4. 2009.08.11 순대보드 u-boot - 2
  5. 2009.04.02 순대보드 u-boot - 1 4
  6. 2009.04.01 순대보드 CrossCompile 환경 - 2
  7. 2009.03.31 순대보드 CrossCompile 환경 - 1
  8. 2009.03.30 순대보드 사전 작업??
  9. 2009.03.27 순대보드 - AHAV9302 2
2009. 9. 2. 16:00

순대보드 Kernel Image



저번 시간까지 해서 'uboot 포팅'까지 완료되었다. uboot를 통해서 리눅스, WinCE와 같은 운영체제를 올릴 수 있는 기반이 준비된 것이다.

이번에 할 일은.. AHAV9302 순대보드에 올릴 리눅스 커널을 만들것이다.

일단 순대국밥님 강좌에 있는대로 Linux Kernel 2.6.22.8 을 올릴 것이고, ftp://ftp.kernel.org에 들어가서 해당 버전의 리눅스 커널을 /opt/arm9sbc/ahav/backup 디렉토리에 다운로드 받는다.
$ wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.8.tar.bz

커널 작업을 하기 위해서 아래와 같이 /opt/arm9sbc/ahav/kernel 디렉토리에 압축을 푼다.
$ cd ${AHAV_KERNEL_DIR}
$ tar -C ${AHAV_KERNEL_DIR} -xjf ${AHAV_BACKUP_DIR}/linux-${AHAV_KERNEL_VER}.tar.bz2

AHAV9302의 리눅스 커널과 네트웍 포팅을 위해 디렉토리 하나를 추가 생성한다. 나중에 파일시스템 관련해서 꼭 필요한 부분이란다. 미리 만들어 준다.
$ mkdir -p ${AHAV_HOST_DIR}/${AHAV_KERNEL_VER}
$ ln -s ${AHAV_KERNEL_DIR}/linux-${AHAV_KERNEL_VER}/include
          ${AHAV_HOST_DIR}/${AHAV_KERNEL_VER}/include

압축을 해제한 리눅스 커널에서 수정하거나 새로 생성해야하는 파일에는 다음과 같은것들이 있다.
[U] 는 기존의 파일을 수정할 것이고, [N] 은 새로 생성해 주어야 하는 파일을 명시한 것이다.
    [U] arch/arm/mach-ep93xx/Kconfig
    [U] arch/arm/mach-ep93xx/Makefile
    [U] arch/arm/mach-ep93xx/Makefile.boot
    [N] arch/arm/mach-ep93xx/ahav9302.c
    [U] arch/arm/tools/mach-types
    [U] include/asm-arm/arch-ep93xx/hardware.h
    [U] include/asm-arm/arch-ep93xx/memory.h
    [N] include/asm-arm/arch-ep93xx/ahav9302.h
    [U] arch/arm/kernel/setup.c
    [U] arch/arm/boot/Makefile

커널 머신(kernel machine) 선택메뉴(arch/arm/mach-ep93xx/Kconfig)에 AHAV를 선택할 수 있는 메뉴를 추가한다.
$ vi arch/arm/mach-ep93xx/Konfig

Makefile에도 새로운 커널 머신이 추가 되었다는 것을 알려주어야 한다. arch/arm/mach-ep93xx/Makefile 파일을 열어 마지막 부분에 아래와 같이 한줄을 추가한다.
$ vi arch/arm/mach-ep93xx/Makefile

다음은 AHAV9302의 SDRAM 연결을 참조하여 arch/arm/mach-ep93xx/Makefile.boot 의 커널 시작주소를 수정한다. 앞서 말한 적이 있지만 AHAV9302 보드에서 SDRAM의 메모리 맵 주소는 0xC0000000이다.
$ vi arch/arm/mach-ep93xx/Makefile.boot


이제부터는 타겟보드인 AHAV9302에 관련된 파일을 생성해서 작업을 할것이다. 무작정 처음부터 새로 생성해서 하는 것보다 기존에 있는 동일한 혹은 비슷한 칩에대한 파일을 구해서 수정을 하는 것이 정신건강에 좋다고 한다.
"arch/arm/mach-ep93xx/"
디렉토리의 "edb9302.c" 파일을 복사해 "ahav9302.c" 를 만들어 수정하면 된다.
순대국밥님이 미리 수정해 놓은 파일을 사용해도 된다. edb9302.c를 ahav9302.c에 맞게 수정한 파일인데, 두 파일을 비교해보는 것도 좋을 듯 하다. 얼핏 봐서는 이더넷 관련 부분이 추가된듯 하다.

다음은 uboot에서도 살펴본듯한 머신타입(arch/arm/tools/mach-types) 파일에 ahav9302 관련된 부분을 넣어준다.
$ vi arch/arm/tools/mach-types

"include/asm-arm/arch-ep93xx/hardware.h"의 마지막에 새로 생성할 ahav9302.h를 포함시킨다.
$ vi include/asm-arm/arch-ep93xx/hardware.h

SDRAM의 시작주소가 0xC0000000 부터 시작되고 있으니 "include/asm-arm/arch-ep93xx/memory.h" 의 PHYS_OFFSET을 아래와 같이 0xC0000000으로 변경한다.
$ vi include/asm-arm/arch-ep93xx/memory.h

"include/asm-arm/arch-ep9302xx/ahav9302.h" 파일은 현재로썬 별 내용이 없기에 그냥 빈 파일로 만들어 두면 된다. 후에 하드웨어를 구현하면서 필요한 선언들을 넣어주는 용도로 사용하면 된다.

AHAV9302 가 64MB 이므로, "arch/arm/kernel/setup.c" 파일의 42번째 줄에서 MEM_SIZE를 (16*1024*1024)에서 (64*1024*1024)로 변경을 해주어야 한다.
$ vi arch/arm/kernel/setup.c

"arch/arm/boot/Makefile"
의 64 번째 줄에 있는 부분을 아래와 같이 변경한다.
이전의 uboot 포팅에서 만들어진 /usr/bin/mkimage가 여기서 사용된다. 커널이 적재되어야 할 주소를  미리 지정해 놓고, 압축이 풀리는 곳의 지정을 다르게 하여 좀 더 효율적으로 한다는데.. 아직 이해 부족.. -_-
$ vi arch/arm/boot/Makefile


자!! 이제부터 커널 컴파일이다.

컴파일 하기 위해서 커널의 설정을 해주어야 하는데.. 음.. 아직 잘 모르겠어.. ㅡ.ㅜ
다행히 순대국밥님이 커널 설정에 대한 컨피그 파일을 미리 준비해 주셨다. 그 놈을 사용해서 커널 컴파일을 하면 될 듯 하다.
위의 파일을 받아서 linux-2.6.22.8 디렉토리로 복사하고, 파일 이름을 .config 라는 이름으로 바꾸어 준다.
아래의 명령을 사용해서 생성하려는 커널의 설정에 대해 확인할 수 있다.
$ cd ${AHAV_KERNEL_DIR}/linux-${AHAV_KERNEL_VER}
$ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

아래의 명령을 사용해 AHAV9302의 리눅스 커널을 컴파일 하자!!
clean은 기존의 것들을 지우고 모두 새로 컴파일을 하겠다는 것이고, uImage는 /usr/bin/mkimage를 이용해서 커널을 uboot Image로 만들겠다는 뜻이다.
$ make ARCH=arm CROSS_COMPILE=arm-linux- clean
$ make ARCH=arm CROSS_COMPILE=arm-linux- uImage

한참을 컴파일을 할 것이다.
정상적으로 컴파일이 되었다면 "arch/arm/boot/"에 커널이미지(uImage)가 생성되었을 것이다.

이 녀석을 다음 작업을 하기위한 경로로 이동을 시키자!!
$ cp ${AHAV_KERNEL_DIR}/linux-${AHAV_KERNEL_VER}/arch/arm/boot/uImage  
       ${AHAV_KERNEL_DIR}/.post/.
$ cp ${AHAV_KERNEL_DIR}/.post/uImage ${AHAV_IMAGES_DIR}/${AHAV_PROJECT_NAME}/.

이렇게 해서 AHAV9302 순대보드를 위한 리눅스 커널은 준비가 된 것이다.

이해 못할 부분들이 많이 있는데.. 일단 따라해보며 순대보드에 리눅스를 올리는 것까지 한 번 해보고, 필요한 부분들을 찾아가며 다시 공부를 해봐야 할 듯 하다.
무작정 하면 첨부터 완전 질려버려 아무것도 못할 듯... -_-;


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 4  (0) 2009.09.02
순대보드 u-boot - 3  (0) 2009.08.11
순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
2009. 9. 2. 13:41

순대보드 u-boot - 4



AHAV9302를 설정하는 파일들을 생성하거나 수정하는 작업이다.

지금부터는 적절하게 디렉토리를 생성하고, 전에 패치해서 생성된 파일들 중 필요한 파일들을 복사해서 수정하는 적업을 할 것이다.
$ mkdir board/ahav9302
$ cp board/cs-e9301/* board/ahav9302/.
$ mv board/ahav9302/cs-e9301.c board/ahav9302/ahav9302.c

새로 생성하고 복사를 한 디렉토리 "/board/ahav9302/"를 보면 총 7개의 파일(Makefile, config.mk, pll_cfg.S, ahav9302.c, sdram_cfg.S, u-boot.lds)이 있는 것을 확인할 수 있다. 각각의 파일은 AHAV9302 보드에 맞도록 이리 저리 수정해야 한다.

그런데.. 어떤 식으로 수정을 해야 한다는 것인지..
"각각의 파일들을 수정하는 이유에 대해서 이 강좌에 일일이 써내려 가다가는 너무 오래 걸릴것으로 판단이 됩니다. 이전의 강좌에서 하드웨어 주소의 설정을 참고하신다면, 수정한 이유등에 대한 것은 그다지 고민할 부분은 아니라고 생각이 듭니다."
라고 강의에는 되어 있는데.. 도통 감이 오질 않는다.
일단 따라하기니깐 나중에 다시 생각하기로 하고.. 따라하자!!! ㅎ

아.. 위처럼 디렉토리를 만들고 파일들을 수정해도 되지만, 아래의 파일을 압축을 풀어서 해당 디렉토리로 복사를 해도 된다. 강의 하시는 "순대국밥"님이 미리 만들어 두신 파일들이다.

7개의 파일 중 flash_cfg.S와 u-boot.lds 파일을 제외한 파일들은 모두 수정이 된 파일이니, 수정되기 전과의 바뀐 부분이 무엇인지 보는 것도 도움이 될 것이다. '데이터 시트'도 꼼꼼히 보라는데.. 개인적으로 데이터 시트만 보면 아직 익숙치 않아 그러는지 눈도 침침해지고 졸리기까지 하다.. -_-


그 이외의 필요한 파일들을 수정해 주어야 한다.

vi 에디터를 사용해 vi common/cmd_boot.c 파일을 연다.
31번 라인 위 아래의 #if, #endif 구문을 주석처리 한다.

62번 라인을 아래와 같이 수정한다.

저장을 하고 파일을 닫는다.

다시 vi 에디터를 사용해 "common/cmd_bootm.c"파일을 열고 아래와 같이 수정을 한다.
470라인 정도에 위의 그림과 같은 부분이 있다. "#ifdef ~ #endif" 부분을 주석처리 한다.


다음은 네트웍과 CPU 관련된 부분의 작업이다. 아래의 "순대국밥"님이 미리 만들어 놓은 파일을 받아서 압축을 풀고 기존의 위치에 복사해 넣으면 된다. 아직 무슨 내용인지는 모른다... -_-;;

압축을 풀면 아래의 4개의 파일이 존재한다. u-boot 루트 디렉토리에서 경로를 찾아 복사를 한다.
    net/eth.c
    net/net.c
    cpu/arm920t/ep93xx/eth.c
    cpu/arm920t/ep93xx/cpu.c

여기까지 진행을 하면 정상적으로 동작하는 u-boot에 대한 수정이 완료된 것이다. 컴파일을 해서 AHAV9302를 위한 u-boot.bin을 생성을 하자.
$ make ARCH=arm CROSS_COMPILE=arm-elf- distclean
$ make ARCH=arm CROSS_COMPILE=arm-elf- clean
$ make ARCH=arm CROSS_COMPILE=arm-elf- ahav9302_config
$ make ARCH=arm CROSS_COMPILE=arm-elf-


컴파일이 완료되면 u-boot.bin 파일이 생성되어 있는 것을 볼 수 있다.

u-boot.bin 을 생성하면 mkimage라는 파일이 하나 생기는데, 이 파일을 다음과 같이 링크를 걸어준다.
$ sudo ln -s /opt/arm9sbc/ahav/build/u-boot-1.1.6/tools/mkimage /usr/bin/mkimage


이제 AHAV9302보드에 생성한 u-boot.bin을 옮기는 작업을 할 것이다.
"Cirrus Logic 사이트"에서 다운로드 툴(Download.zip)을 다운로드 받아서 사용할 것이다.
윈도우즈 상에서 Download.zip를 다운을 받아 압축을 푼다. 그리고 이 디렉토리에 u-boot.bin 파일을 옮긴다. 예전에 삼바를 구축하였기 때문에 삼바로 리눅스 기계로 접근을 해서 u-boot.bin 파일을 복사해 오면 될 것이다.

윈도우즈의 명령 커맨드창(cmd)를 열어 Download 디렉토리로 이동을 한 뒤 다음과 같이 입력하고 엔터키를 누른다.

아래의 화면과 같이 나온다면 정상적으로 u-boot.bin파일을 AHAV9302 보드로 옮긴 것이다.

AHAV9302 보드를 부팅해보자!


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 Kernel Image  (0) 2009.09.02
순대보드 u-boot - 3  (0) 2009.08.11
순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
2009. 8. 11. 20:43

순대보드 u-boot - 3



순대보드의 u-boot를 올리기 위한 마지막 단계(?)로 순대보드에 특화된 동작을 하는 파일을 등록하는 부분이다.
먼저 "include/configs/ahav9302.h"를 생성하고 필요한 부분들을 등록하는 작업을 해야한다.
"순대보드 u-boot - 1"에서 순대보드와 그나마 비슷한 EP9301 패치파일을 사용해서 cs-e9301에 대한 패치를 한 적이 있다. 그리하여 "include/configs/cs-e9301.h"를 참고하여 ahav9302.h를 작성할 수 있다.

ahav9302.h는 순대보드의 u-boot에서 사용하게 될 여러 환경변수 같은 것을 등록하게되는 파일이다.
이 파일의 전체적인 구조는 다음과 같다.
#ifndef__CONFIG_H
#define__CONFIG_H

/*
1. 부트로더 변수의 초기값 및 모니터 설정 등록.
2. 아키텍쳐, 보드, 클럭, MMU 등의 설정.
3. 콘솔 접속을 위한 시리얼 설정 및 등록.
4. 네트웍 설정.
5. 메모리 맵 설정.
6. 플래쉬 메모리 설정.
7. 기타 등등.
*/

#endif

위의 내용을 실제 구현한 ahav9302.h 파일이다.

#ifndef __CONFIG_H
#define __CONFIG_H

/* 1. 부트로더 변수의 초기값 및 모니터 설정 등록. */

#define CONFIG_ETHADDR                 00:60:6E:F0:00:02
#define CONFIG_NETMASK                 255.255.255.0
#define CONFIG_IPADDR                  192.168.100.181
#define CONFIG_SERVERIP                192.168.100.250
#define CONFIG_GATEWAYIP               192.168.100.254

#define CONFIG_BOOTDELAY               3
#define CONFIG_CMDLINE_TAG             1
#define CONFIG_INITRD_TAG              1
#define CONFIG_SETUP_MEMORY_TAGS       1
#define CONFIG_BOOTARGS                "console=ttyAM0,115200 root=/dev/ram0 rw init=/sbin/init initrd=0xc0800000"
#define CONFIG_BOOTFILE                "ahav9302.img"

/* 2. 아키텍쳐, 보드, 클럭, MMU 등의 설정. */

#define CONFIG_ARM920T   1
#define CONFIG_EP93XX    1
#define CONFIG_EP9302    1
#define CONFIG_AHAV9302  1

#define CONFIG_SYS_CLK_FREQ 14745600 /* 14.7456 MHz */

#define CFG_HZ   2048
#undef  CFG_CLKS_IN_HZ

#define USE_920T_MMU    1
#define CONFIG_USE_IRQ  1

/* Monitor Configuration. */
#if defined(USE_920T_MMU)
#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \
              CFG_CMD_DIAG | \
              CFG_CMD_SDRAM | \
              CFG_CMD_JFFS2 | \
              CFG_CMD_DHCP | \
              CFG_CMD_PING | \
              CFG_CMD_NET | \
              CFG_CMD_MII)

#else
#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \
              CFG_CMD_DIAG | \
              CFG_CMD_SDRAM | \
              CFG_CMD_JFFS2 | \
              CFG_CMD_DHCP | \
              CFG_CMD_PING | \
              CFG_CMD_NET | \
              CFG_CMD_MII & \
              ~CFG_CMD_CACHE)
#endif /* defined(USE_920T_MMU) */

#include <cmd_confdefs.h> /* Must be AFTER any CONFIG_COMMANDS */

#define CFG_PROMPT   "AHAV9302> "

/* Enable "long" help in the monitor */
#define CFG_LONGHELP

#define CFG_CBSIZE  1024  /* Console I/O Buffer Size */
#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
#define CFG_MAXARGS  16  /* max number of command args */
#define CFG_BARGSIZE  CFG_CBSIZE /* Boot Argument Buffer Size */

#define CFG_LOAD_ADDR  0xC0008000 /* default load address */

/* 3. 콘솔 접속을 위한 시리얼 설정 및 등록. */

#define CONFIG_BAUDRATE         115200
#define CFG_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
#define CFG_SERIAL0      (0x808C0000)
#define CFG_SERIAL1      (0x808D0000)

#define CFG_PL010_SERIAL
#define CONFIG_PL01x_PORTS  { (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
#define CONFIG_CONS_INDEX 0

/* 4. 네트웍 설정. */

#define CONFIG_DRIVER_EP93XX_MAC
#define CONFIG_MII
#define CONFIG_MII_SUPPRESS_PREAMBLE
#define CONFIG_PHY_ADDR   (0)
#define CFG_DIRECT_FLASH_TFTP

#undef CONFIG_NETCONSOLE

/* 5. 메모리 맵 설정. */

#define CONFIG_NR_DRAM_BANKS  (8)
   
#define PHYS_SDRAM_1   (0xC0000000)
#define PHYS_SDRAM_1_SIZE  (0x00800000)
#define PHYS_SDRAM_2   (0xC1000000)
#define PHYS_SDRAM_2_SIZE  (0x00800000)
#define PHYS_SDRAM_3   (0xC2000000)
#define PHYS_SDRAM_3_SIZE  (0x00800000)
#define PHYS_SDRAM_4   (0xC3000000)
#define PHYS_SDRAM_4_SIZE  (0x00800000)
#define PHYS_SDRAM_5   (0xC4000000)
#define PHYS_SDRAM_5_SIZE  (0x00800000)
#define PHYS_SDRAM_6   (0xC5000000)
#define PHYS_SDRAM_6_SIZE  (0x00800000)
#define PHYS_SDRAM_7   (0xC6000000)
#define PHYS_SDRAM_7_SIZE  (0x00800000)
#define PHYS_SDRAM_8   (0xC7000000)
#define PHYS_SDRAM_8_SIZE  (0x00800000)

#define CFG_MEMTEST_START  (0xC0000000)
#define CFG_MEMTEST_END   (0x01000000)

#define CONFIG_BOOT_PARAM_ADDR  (PHYS_SDRAM_1 + 0x100)

/* -----------------------------------------------------------------------------
 * Run-time memory allocations
 *
 * The global data area size (must be > sizeof(gd_t)), stack sizes, and heap
 * size are set using the values below.
 */
#define CFG_GBL_DATA_SIZE  (128)

#define CONFIG_STACKSIZE  (128 * 1024)

#if defined(CONFIG_USE_IRQ)
#define CONFIG_STACKSIZE_IRQ  (4 * 1024)
#define CONFIG_STACKSIZE_FIQ  (4 * 1024)
#endif  /* defined(CONFIG_USE_IRQ) */

#define CFG_MALLOC_LEN   (512 * 1024)

/* 6. 플래쉬 메모리 설정. */

/* -----------------------------------------------------------------------------
 * FLASH and environment organization
 *
 * 0x60000000 - 0x6003FFFF    (256KB) u-boot
 * 0x60040000 - 0x6005FFFF    (128KB) environment #1
 * 0x60060000 - 0x6007FFFF    (128KB) environment #2
 * 0x60080000 - 0x6009FFFF    (128KB) unused
 * 0x600A0000 - 0x600BFFFF    (128KB) unused
 * 0x600C0000 - 0x600FFFFF    (256KB) unused
 * 0x60100000 - 0x602FFFFF    (2MB) uImage(kernel image)
 * 0x60300000 - 0x606FFFFF    (4MB) rImage(ramdisk image)
 * 0x60700000 - 0x60FFFFFF    (10MB) (JFFS2)
 */

#define CFG_FLASH_CFI
#define CFG_FLASH_CFI_DRIVER
#define CFG_MAX_FLASH_BANKS  (1)
#define CFG_MAX_FLASH_SECT  (128)

#define PHYS_FLASH_1   (0x60000000)
#define CFG_FLASH_BASE   (PHYS_FLASH_1)
#define CFG_MONITOR_BASE  (CFG_FLASH_BASE)
#define CFG_MONITOR_LEN   (256 * 1024)

#define CONFIG_ENV_OVERWRITE  /* Vendor parameters are unprotected */
#define CFG_ENV_IS_IN_FLASH
#define CFG_ENV_ADDR   (0x60040000)
#define CFG_ENV_ADDR_REDUND  (0x60060000)
#define CFG_ENV_SECT_SIZE  (0x00020000)
#define CFG_ENV_SIZE   (CFG_ENV_SECT_SIZE)
#define CFG_ENV_SIZE_REDUND  (CFG_ENV_SECT_SIZE)

#define CFG_JFFS2_FIRST_BANK  (0)
#define CFG_JFFS2_FIRST_SECTOR  (28)
#define CFG_JFFS2_NUM_BANKS  (1)

#endif  /* __CONFIG_H */

아직은 잘 모르겠다.
걍 u-boot README 파일을 참고해가며 보면 알 수 있다고 한다.
실제 cs-e9301.h파일과 비교해보면 몇 군데를 제외하고는 거의 같음을 알 수 있다. 조만간 시간을 내서 README 파일을 한번 읽어는 봐야 할것 같은데... -_-;;


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 Kernel Image  (0) 2009.09.02
순대보드 u-boot - 4  (0) 2009.09.02
순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
2009. 8. 11. 20:17

순대보드 u-boot - 2



새로운 보드에 u-boot를 올리기 위해선 몇가지 해주어야 하는 작업이 있는데.. 대략 순서를 말하자면 이렇다.
1. 해당 보드의 Machine Type을 생성하고 이를 "include/asm-arm/mach-types.h"에 등록한다.
2. 순대보드를 컴파일 할 수 있도록 Makefile을 수정한다.
3. 순대보드의 초기화를 위해 필요한 부분들을 생성한다.

먼저 첫번째 작업 Machine Type을 생성하고 등록하자.
u-boot의 최상위 디렉토리에서 작업을 하면 된다.
$ vi include/asm-arm/mach-types.h
...
671 #define MACH_TYPE_NEC_MP900            659
672 #define MACH_TYPE_VVTK1000               661
...

중간 쯤.. 그러니깐 라인수로 671번 째 라인을 보면 MACH_TYPE_NEC_MP900이라는 부분이 있다. 그 녀석 아래에 순대보드의 Machine Type를 추가해 넣는다.

671 #define MACH_TYPE_NEC_MP900            659
672 #define MACH_TYPE_AHAV9302               660

673 #define MACH_TYPE_VVTK1000               661

또, 라인수로 8590라인 정도에
#ifdef CONIFG_MACH_NEC_MP900
...
#endif
라는 부분이 있다.
그 아래 순대보드에 관련된 부분을 추가해 준다. 그냥 "NEC_MP900"   된 부분을 "AHAV9302"로 바꾸어주면 된다.

 ...

   8590 #ifdef CONFIG_MACH_NEC_MP900
   8591 # ifdef machine_arch_type
   8592 #  undef machine_arch_type
   8593 #  define machine_arch_type     __machine_arch_type
   8594 # else
   8595 #  define machine_arch_type     MACH_TYPE_NEC_MP900
   8596 # endif
   8597 # define machine_is_nec_mp900() (machine_arch_type == MACH_TYPE_NEC_MP900)
   8598 #else
   8599 # define machine_is_nec_mp900() (0)
   8600 #endif
   8601
   8602 #ifdef CONFIG_MACH_AHAV9302
   8603 # ifdef machine_arch_type
   8604 #  undef machine_arch_type
   8605 #  define machine_arch_type     __machine_arch_type
   8606 # else
   8607 #  define machine_arch_type     MACH_TYPE_AHAV9302
   8608 # endif
   8609 # define machine_is_ahav9302()  (machine_arch_type == MACH_TYPE_AHAV9302)
   8610 #else
   8611 # define machine_is_ahav9302()  (0)
   8612
#endif
   ...

위와 같은 작업을 통해 생각보다 간단하게 순대보드(AHAV9302)를 새로운 머신 아키텍쳐(Machine Architecture)로 u-boot에 등록하게 된다.

다음은 순대보드(AHAV9302)용 u-boot를 컴파일 하기 위해 Makefile을 수정해야 한다.
역시 u-boot의 최상위 디렉토리에서 작업을 하면 된다.
vi 에디터를 열어 아래와 같이 ARM92xT Systems라는 부분을 찾아서 그 부분의 가장 아래 ahav9302_config를 추가한다.
$ vi Makefile

   ...

1756##########################################################

1757 ## ARM92xT Systems
1758##########################################################

   ...

1782 ahav9302_config :       unconfig
1783         @$(MKCONFIG) $(@:_config=) arm arm920t ahav9302 NULL ep93xx

   ...


"ARM92xT Systems" 라고 된 부분은 ARM92xT의 여러 보드들을 등록해 놓은 곳이다. 물론 순대보드의 경우 등록이 되지 않았기 때문에 추가로 등록을 해주는 것이다.
아래로 쭉 내려가다 보면.. 어디선가 많이 들어본듯한 smdk2440, smdk2410 보드도 등록되어 있음을 볼 수 있다.

실제 u-boot를 컴파일 할 때 다음과 같은 구문을 사용하게 된다.
$ make ARCH=arm CROSS_COMPILE=arm-elf- ahav9302_config

이런식으로 하여 여러 보드 중 ahav9302의 u-boot.bin을 생성하게 되는 것이다.

다음은 순대보드(AHAV9302)에 특화된 동작을 하는 부분을 생성하는 부분인데.. 양이 좀 많아질듯 하니깐 다음번에..


[참고] 당근이의 AVR 갖고 놀기


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 4  (0) 2009.09.02
순대보드 u-boot - 3  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
순대보드 CrossCompile 환경 - 1  (0) 2009.03.31
2009. 4. 2. 20:20

순대보드 u-boot - 1



uboot라는 녀석을 설치하려 한다. 임베디드 환경에서 가장 많이 사용하는 부트로더라고 한다.

일단 uboot의 소스를 다운로드 받자!!
현재의 버전은 u-boot-1.1.6 u-boot-1.3.4 이고, 소스포지의  uboot 사이트에서 다운로드를 받을 수 있다.
http://sourceforge.net/project/showfiles.php?group_id=65938

최신 버전이 1.1.6인지 1.3.4인지 정확히 모르겠다..
-_- 소스포지에서는 1.1.6으로 나오긴 하는데.. ftp://ftp.denx.de/pub/u-boot에 가보니 1.3.4 버전이 보이네.. ㅋㅋ

콘솔 상에서 다운로드를 받아도 된다.
$ cd /opt/tools/crus
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.1.6.tar.bz2
...

다운로드 받은 u-boot를 /opt/arm9sbc/ahav/backup 에 복사한 후 작업을 하도록 한다.
$ copy u-boot-1.1.6.tar.bz2 /opt/arm9sbc/ahav/backup
$ cd /opt/arm9sbc/ahav
$ . .init-ahav
$  cd ${AHAV_BUILD_DIR}
$ tar -C ${AHAV_BUILD_DIR} -xjf ${AHAV_BACKUP_DIR}/u-boot-1.1.6.tar.bz2
$ cd u-boot-1.1.6

압축을 푼 uboot의 루트 디렉토리의 모양새는 아래와 같다.

일단 기본적으로 u-boot에서 제공하는 파일들은 위에서 보는 것과 같고, 실제 작업을 해야하는 부분들이 존재한다.
실제 순대보드의 메인칩 EP9302는 u-boot에서 기본적으로 제공을 하지 않는다.
하지만, EP9301이라고 하는 비슷한 녀석의 패치파일이 웹상에 있으므로 그놈을 구해서 이리 저리 수정을 해주면 된다고 한다.

일반적으로 u-boot의 작업은 그렇게들 이루어진다고 한다.
제일 좋은 것은 본인이 구현하려는 녀석에 관한 모든 정보가 공개된 것이지만, 그렇지 않다면, 최대한 비슷한 녀석을 구해서 수정을 해줘가며 작업들을 한다고 한다.

EP9301에 대한 패치파일이다.

이 패치를 다운로드 받아서 /opt/arm9sbc/ahav/backup에 저장한다.
그리고 u-boot-1.1.6 디렉토리로 이동하여 패치해준다.
아.. 그전에 리눅스에 패치 툴이 깔려있지 않은 경우 설치를 해주어야 한다.
$ cd ${AHAV_BUILD_DIR}/u-boot-1.1.6
$ sudo apt-get install patch
...
$ patch -p1 -E -d ${AHAV_BUILD_DIR}/u-boot-1.1.6 < ${AHAV_BACKUP_DIR}/u-boot-ep93xx.patch

패치를 실행한 뒤의 모습이다.

아래는 앞으로 우리가 해주어야 할 작업들을 나열한 것이다.
[U] Makefile
[U] include/asm-arm/mach-types.h
[N] include/asm-arm/arch-ep93xx/ep93xx.h
[N] include/configs/ahav9302.h
[N] board/ahav9302/Makefile
[N] board/ahav9302/config.mk
[N] board/ahav9302/u-boot.lds   
[N] board/ahav9302/ahav9302.c
[N] board/ahav9302/flash_cfg.S   
[N] board/ahav9302/pll_cfg.S
[N] board/ahav9302/sdram_cfg.S

[R] cpu/arm920t/ep93xx/Makefile
[R] cpu/arm920t/ep93xx/cpu.c
[R] cpu/arm920t/ep93xx/eth.c
[R] cpu/arm920t/ep93xx/interrupts.c
[R] cpu/arm920t/ep93xx/lowlevel_init.S
[R] cpu/arm920t/ep93xx/speed.c

[U]로 표시된 것은 update(수정)을 의미하고, [N]은 new(새로 생성)을 의미한다. 마지막으로 [R]은 위의 패치를 풀어 생성된 파일을 의미한다.
중점적으로 작업을 해주어야 할 부분은 빨간 색으로 되어 있는 부분이 될 것이다. 녹색으로 된 부분도 이리 저리 세팅에 관련 된 부분은 수정을 해주어야 할 것이고, [R]로 표시된 부분은 왠지 ep93xx에 공통적으로 필요한 녀석들일것 같다는 느낌이.. 그냥 두어도 될 듯하다..

참고로 include/asm-arm/arch-ep93xx/ep93xx.h는 칩 제조사인 Cirrus Logic에서 EP93xx 시리즈를 내어 놓을 때, 레지스터의 주소 등을 정의해 놓은 헤더파일이라고 한다. 이녀석을 참조할 필요가 있다고 한다.

당근이의 AVR 갖구 놀기 까페 참조..



'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 3  (0) 2009.08.11
순대보드 u-boot - 2  (0) 2009.08.11
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
순대보드 CrossCompile 환경 - 1  (0) 2009.03.31
순대보드 사전 작업??  (0) 2009.03.30
2009. 4. 1. 18:30

순대보드 CrossCompile 환경 - 2



이제 순대보드에 사용할 크로스 컴파일러를 설치할 것이다.

순대보드에 사용할 크로스 컴파일러는 제조사에서 작업을 해 놓은 것이 있어서 그놈을 그냥 가져다가 쓰면 된다고 한다. 뭐지... 그렇게 간단하단 건가?? -_-

http://arm.cirrus.com/files/index.php?path=tools/ 에 방문을 해서 필요한 파일을 다운로드 받으면 될 것이다.

/opt에 tools라는 디렉토리를 하나 만들고 그 디렉토리안에 여러 필요한 툴들을 모아놓고 작업을 할 것이다.
$ cd /opt
$ sudo mkdir tools
$ sudo chown ID:users tools
$ mkdir tools/crus
$ wget http://arm.cirrus.com/files/tools/arm-elf-gcc-3.2.1-full.tar.bz2
...
$ wget http://arm.cirrus.com/files/tools/arm-linux-gcc-4.1.1-920t.tar.bz2
...
$ tar -xjf arm-elf-gcc-3.2.1-full.tar.bz2
...
$ cd usr/local/arm
$ mv 3.2.1-elf /opt/tools/crus
$ cd /opt/tools/crus
$ rm -rf usr
$ tar -xjf arm-linux-gcc-4.1.1-920t.tar.bz2

이렇게 해서 순대보드용 크로스 컴파일러를 설치했다. 너무 간단해서 당황...-_-;;

추가로  링크를 걸어서 추후에 사용하기 편하게 하도록 한다.
$ sudo mkdir /usr/local/arm
$ cd /usr/local/arm
$ ln -s /opt/tools/crus/3.2.1-elf 3.2.1-elf
$ ln -s /otp/tools/crus/4.1.1-920t 4.1.1-920t

제대로 동작하는지 확인해 보자!!

음.. 세상에나.. 크로스 컴파일러 설치가 원래 이렇게 쉬운건가? 라는 생각이 든다..

여튼 일단 크로스 컴파일러 설치까지 성공을 했고.. 시간 되는대로 짬짬히 공부도 해가면서 봐야할 듯 하네..



'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 1  (0) 2009.03.31
순대보드 사전 작업??  (0) 2009.03.30
순대보드 - AHAV9302  (2) 2009.03.27
2009. 3. 31. 20:44

순대보드 CrossCompile 환경 - 1



임베디드 작업은 'Cross Compile(크로스 컴파일)'환경이 갖추어진 상태라야 비로소 제대로 된 작업을 할 수 있다.

근데... '크로스 컴파일' 환경이란 뭐지? -_-

일반적으로 사용하는 데스크톱의 환경을 네이티브 개발환경이라고 한다. 해당하는 플랫폼에서 개발을 하고, 개발을 한 그 플랫폼에서 이런 저런 것들을 실행시키는 환경을 말한다.
쉽게 설명하자면, 리눅스나 윈도우즈가 설치된 데스크톱 기계(x86)에서 어떠한 프로그램을 작성하고, 작성한 프로그램을 동일한 플랫폼(x86)에서 실행시키는 것을 생각하면 될 것이다.

크로스 컴파일환경은 이와는 조금 다르다.
일반적으로 프로그램등을 작성할 때에는 흔히 사용하는 데스크톱(x86) 환경에서 작성을 하게 된다. 하지만 실제 작성한 프로그램 등은 개발한 플랫폼에서 동작하는 것이 아니고, arm 과 같은 별도의 임베디드 기계에서 동작을 하게 된다. 실제 프로그램이 동작해야할 플랫폼에 맞게 컴파일을 해주도록 해주는 녀석을 크로스 컴파일러라고 한다. 그리고 이런 크로스 컴파일을 할 수 있도록 해주는 환경을 크로스 컴파일 환경이라고 한다.

에이.. 그냥 arm 과 같은 임베디드 기계에서 프로그램을 작성하고, 컴파일을 하면 되지 않을까? 라고 생각 할 수도 있지만, 실제 임베디드 기계가 가지고 있는 성는은 데스크톱에 비하면 매우 빈약하다. 좀더 효과적인 작업을 하기 위해 성능이 좋은 데스크톱을 빌려 작업을 한다라고 생각하면 편할 듯 하다.

사실.. 본인도 잘 모른다. 그냥 그런 것 같다 ㅎㅎ

서론이 길긴 했는데.. 그럼 일단 순대보드(AHAV9302)의 크로스 컴파일을 위한 환경을 만들어 보려 한다. 크로스 컴파일을 위한 전용 디렉토리를 만들고, 몇 가지의 환경변수를 등록할 것이다.
'당근이의 AVR 갖구 놀기'에 설명된 대로 따라할 것이다.

리눅스 기계의 /opt 디렉토리로 이동을 하여 다음의 디렉토리들을 생성해 준다.
/opt/arm9sbc                                   
/opt/arm9sbc/ahav
/opt/arm9sbc/ahav/backup           => 포팅할 패키지들과 패치들을 보관하는 곳.
/opt/arm9sbc/ahav/build               => 컴파일 시 사용할 임시 디렉토리.
/opt/arm9sbc/ahav/host               => 컴파일 시 필요한 헤더와 명령어들을 임시로 보관하는 곳.
/opt/arm9sbc/ahav/images           => 램디스크 이미지를 생성하는 곳.
/opt/arm9sbc/ahav/kernel            => 커널 컴파일을 하는 곳.
/opt/arm9sbc/ahav/kernel/.post   => 후기 작업을 위해서 필요한 곳...??
/opt/arm9sbc/ahav/nfs                  => NFS를 사용할 경우에 사용.

/opt 디렉토리로 이동 한 후 아래와 같이 입력을 한다.
$ sudo mkdir arm9sbc
[sudo] password for ID :
$ sudo chown ID:users arm9sbc

위와 같이 해주는 것으로 생성한 arm9sbc는 root 계정이 아닌 일반 사용자 계정으로 사용을 할 수 가 있다. 
ID는 사용자가 접속시 사용하였던 ID가 된다.
참고로.. 이것은 ubuntu 리눅스에서만.. 이런식으로 사용한다.

mkdir 명령을 사용하여 위의 디렉토리들을 생성해 준다.
$ mkdir arm9sbc/ahav
$ mkdir arm9sbc/ahav/backup
...
$ mkdir arm9sbc/ahav/nfs

/opt/arm9sbc/ahav에 환경변수를 설정한다.
$ cd /opt/arm9sbc/ahav
$ vi .initrc-ahav
export PATH=/usr/local/arm/4.1.1-920t/bin:/usr/local/arm/3.2.1-elf/bin:${PATH}
export AHAV_PROJECT_NAME="AHAV9302"
export AHAV_BASE_DIR=/opt/arm9sbc/ahav
export AHAV_BACKUP_DIR=${AHAV_BASE_DIR}/backup
export AHAV_BUILD_DIR=${AHAV_BASE_DIR}/build
export AHAV_HOST_DIR=${AHAV_BASE_DIR}/host
export AHAV_IMAGES_DIR=${AHAV_BASE_DIR}/images
export AHAV_ROOT_DIR=${AHAV_IMAGES_DIR}/root
export AHAV_KERNEL_DIR=${AHAV_BASE_DIR}/kernel
export AHAV_KERNEL_VER="2.6.22.8"
export AHAV_NFS_DIR=${AHAV_BASE_DIR}/nfs

$ chmod 750 .initrc-ahav

$ . .initrc-ahav

여기까지 진행을 하면, 크로스 컴파일 환경을 위한 사전 작업을 마친 것이다.
사전 작업이라고 해봤자... 크로스 컴파일러를 설치할 경로 정도를 설정해 준 것이긴 하지만... -_-

다음 시간에 나머지 작업을 진행해야지...... 슬슬 귀찮아지는데... ㅜ


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
순대보드 사전 작업??  (0) 2009.03.30
순대보드 - AHAV9302  (2) 2009.03.27
2009. 3. 30. 20:45

순대보드 사전 작업??



순대보드는 리눅스 상에서 작업이 이루어 질 것이므로.. 일단 리눅스 기계가 하나 있어야 한다.
하지만.. 없는데..-_-

그리하여.. 윈도우즈 기계에 VMWare를 이용하여 셋방살이라도 하나 장만했다.ㅎ
VMWare에 Ubuntu 리눅스 8.10 을 설치하였다. 설치 방법같은 것은 웹검색을 하면 빵빵하게 나올 것이니 그쪽을 참조하는 편이.. 귀찮아.. -_-;;

http://felicity.tistory.com/584 여기에 설치하는 방법 있음...
뉘신지는 모르지만..

대충 설치를 끝내고 몇가지 업데이트 작업을 해준다. 추가로 ssh 를 설치해서 putty 와 같은 터미널을 사용하여 작업을 할 것이다.
$ sudo apt-get update
...
$ sudo apt-get upgrade
...
$ sudo apt-get install ssh
...
$ sudo apt-get install vim
...

ssh 를 설치했으므로.. 이제부터는 터미널로 붙어서 작업을 하면 될 듯 하다.

아... 좀더 예쁜 프롬프트에서 작업하고 싶다면... 여기 를 참조하면 될듯.. ㅋㅋ

vim 세팅을 해주어 좀더 편하게 프로그래밍을 할 수 있도록 한다. 안해도 뭐...
$ vi .vimrc
set cindent
set ai
set si
set tabstop=4
set shiftwidth=4

syntax on

이것 저것 하려하면 한도 끝도 없는데.. 그냥 이정도로 한다.
더 필요하다면.. 웹검색 페이지에서 찾아서 하면 될 듯...

임베디드 리눅스관련해서 검색을 해보니.. NFS, SAMBA, TFTP.. 등 필요한 작업들이 있는 듯 하다. 뭐 필요할 때마다 포스팅을 하기로 하고.. 일단 오늘은 리눅스 깔고 기본적인 개발 환경 세팅까지 마무리!!!


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
순대보드 CrossCompile 환경 - 1  (0) 2009.03.31
순대보드 - AHAV9302  (2) 2009.03.27
2009. 3. 27. 11:16

순대보드 - AHAV9302



"당근이의 AVR 갖고 놀기"라는 네이버 까페에서 예전에 공동 구매를 했었던 "AHAV9302" 일명 "순대보드"라는 녀석을 구해서 이런 저런 것들을 해보려 한다.

ARM9 보드로 자세한 스펙같은 것은 제조사인 Cirrus Logic 사이트에서 확인할 수 있다.

홈페이지에 나와있는 스펙을 보면 다음과 같다.
  • 200 MHz ARM920T processor
    • 16 KB data cache and 16 KB instruction cache
    • MMU enabling Linux® and Windows CE®
    • 100 MHz system bus
  • MaverickCrunch™ math engine
    • Floating point, integer and signal-processing instructions
    • Optimization for digital music compression algorithms
    • Hardware interlocks allow in-line coding
  • MaverickKey™ IDs for digital rights management or design IP security (special order feature)
    • 32-bit unique ID
    • 128-bit random ID
  • Integrated peripheral interfaces
    • Five-input A/D converter with 12-bit resolution
    • 1/10/100 Mbps Ethernet MAC
    • Two-port USB 2.0 Full Speed host (OHCI)
    • Two UARTs (16550 type), including soft modem support
    • IrDA interface, slow mode
    • SPI port
  • Interfaces for AC '97 and I²S
  • External memory options
    • 16-bit SDRAM interface, up to two banks
    • 16/8-bit SRAM/Flash/ROM I/F
    • Serial EEPROM interface
  • Internal peripherals
    • Real-time clock with software trim
    • 12 DMA channels for data transfer that maximizes system performance
    • Boot ROM
    • Dual PLLs to control all clock domains
    • Watchdog timer
    • Two general-purpose 16-bit timers
    • General-purpose 32-bit timer
    • 40-bit debug timer
  • General-purpose I/Os (GPIOs)
    • 16 enhanced GPIOs including interrupt capability
    • Eight additional optional GPIOs multiplexed on peripherals
  • Lead-free package

최종적으로 순대보드란 녀석은...
이렇게 생겨먹었다.. ㅋ
사진은 DIYTOY 네이버 카페에서 사알짝 퍼왔음..

꽤 단순해 보이기도 하고 LCD도 없고.. 한데.. 이걸로 뭘 해야할까?? -_-;;


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
순대보드 CrossCompile 환경 - 1  (0) 2009.03.31
순대보드 사전 작업??  (0) 2009.03.30