'u-boot'에 해당되는 글 3건

  1. 2009.08.11 순대보드 u-boot - 3
  2. 2009.08.11 순대보드 u-boot - 2
  3. 2009.04.02 순대보드 u-boot - 1 4
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