GNUARMBuild 

GNUARM, Category: EmbeddedSystem, wikiX,

  1. GNUARM
  2. armboot ºôµå
    1. »çÀü¿¡
    2. ºôµå

GNUARM  

freertos.org ¿¡¼­ ã¾Ò½À´Ï´Ù. ȨÆäÀÌÁö´Â www.gnuarm.org ÀÌ°í, ARM¿ë Å©·Î½º ÄÄÆÄÀÏ·¯¸¦ À©µµ¿ìÁî(cygwin)¿ë°ú x86¸®´ª½º, Mac OS X ¿ëÀ¸·Î ÆÐŰ¡ÇØ ¹èÆ÷ÇÕ´Ï´Ù. ²Ï ºü¸¥ ¼Óµµ·Î ¾÷µ¥ÀÌÆ® µÅ¸ç Æ÷ÇÔµÈ c¶óÀ̺귯¸®´Â newlibÀÔ´Ï´Ù.

Àü ÀÌ ÅøüÀÎÀ» °¡Áö°í Á¦ ³ëÆ®ºÏ¿¡¼­ armboot¸¦ ºôµåÇغýÀ´Ï´Ù.

ÀÏ´Ü ÇöÀç ¿Ã¶ó¿ÍÀÖ´Â gccÀÇ ¹öÀüÀº 3.4.3ÀÔ´Ï´Ù. ¾ÆÁ÷±îÁöµµ ¸¹Àº Å©·Î½º ÄÄÆÄÀÏ·¯ ÆÐÅ°Áö°¡ 2.95.3¿¡ ¸Ó¹°·¯ ÀÖ´Â °Í°ú ºñ±³Çؼ­ ÀλóÀûÀ̱º¿ä.

ÀÏ´Ü ¼³Ä¡ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þ¾Ò½À´Ï´Ù. º°·Î °í¹ÎÇÒ °Í ¾øÀÌ ±×³É ¼³Ä¡ÇÏ°í ¸Ç ¸¶Áö¸·¿¡ cygwin1.dllÀ» ¼³Ä¡ÇϳĴ ¿É¼Ç¿¡¼­ Àú´Â cygwinÀÌ ÀÌ¹Ì ¼³Ä¡µÅ ÀÖ¾úÀ¸¹Ç·Î ¼³Ä¡ÇÏÁö ¾Ê´Â´Ù°í Çß½À´Ï´Ù. ¾Æ ±×¸®°í ¹Ù²Û °Ô Àֳ׿ä. GNUARMÀº ±âº»ÀûÀ¸·Î Program Files Æú´õ ¾Æ·¡¿¡ ±ò¸³´Ï´Ù. ÀÌ·¡¼­´Â ³ªÁß¿¡ ºôµåÇÒ ¶§ ¶óÀ̺귯¸®ÀÇ °æ·Î¸¦ Makefile¿¡¼­ ½áÁÙ ¶§ ºóÄ­ ¶§¹®¿¡ °í»ýÇÏ°Ô µË´Ï´Ù. ±×·¡¼­ ºóÄ­ÀÌ ¾ø°Ô ´Ù¸¥ µð·ºÅ丮 ¾Æ·¡¿¡ ±ò¾Ò½À´Ï´Ù. (project/arm)

¼³Ä¡ÇÏ°í ³ª¼­ ÀÏ´Ü ÀçºÎÆà ¾øÀÌ ½ÇÇàÇغ¸±â À§ÇØ PATH¸¦ ¼³Á¤Çß½À´Ï´Ù.
armenv.sh
#!/bin/sh
export PATH="${PATH}:/cygdrive/c/project/arm/GNUARM/bin"

[X20@x20-6rf72xp19yf arm]$ . armenv.sh
[X20@x20-6rf72xp19yf arm]$ echo $PATH
....:/usr/bin:/bin:/cygdrive/c/project/arm/GNUARM/bin

ÀÏ´Ü arm-elf-gcc ½ÇÇàµÇ´ÂÁö º¾´Ï´Ù. (ÀÌ ÆÐÅ°Áö¿¡¼­´Â arm-linux-°¡ ¾Æ´Ï¶ó arm-elf-·Î prefix°¡ µÇ¾îÀÖ½À´Ï´Ù.)
[X20@x20-6rf72xp19yf work]$ arm-elf-gcc -mcpu=arm7tdmi hello.c -o h.out
[X20@x20-6rf72xp19yf work]$ file h.out
h.out: ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, not stripped

armboot ºôµå  

armboot´Â ²Ï ¿¾³¯ ¼Ò½ºÀÔ´Ï´Ù. project°¡ u-boot·Î ppcboot¿Í ÇÕÃÄÁ³½À´Ï´Ù. ±×·±µ¥ u-boot¸¦ ºôµåÇÏ¸é ³Ê¹« ¿¡·¯°¡ ¸¹ÀÌ ³ª¼­ ¾ÈµÇ°Ú´õ±º¿ä. ¾Æ¹«·¡µµ u-boot¿¡ ¿Í¼± libc ÇÔ¼ö¸¦ ´õ ¸¹ÀÌ ¾²´Â °Í °°½À´Ï´Ù. newlibÀ¸·Ð ¾ÈµÇ´Â µí..

»çÀü¿¡  

¸ÕÀú gcc°¡ ±ò·ÁÀÖ¾î¾ß ÇÕ´Ï´Ù. cygwin gcc¸¦ ±î¼¼¿ä. ±âº» ÅøµéÀ» ÄÄÆÄÀÏÇÒ ¶§ ÇÊ¿äÇÕ´Ï´Ù.(´Ù¿î·Î´õµî) »ç½Ç ´Ù¿î·Î´õµî ÅøÀº ¾ÆÁ÷ ½ÇÇàµÇ´Â Áö ½áº¸Áö ¸øÇß½À´Ï´Ù. -_-;;
armboot È¨ÆäÀÌÁö¿¡ °¡¼­ armboot-1.1.0.tgz¸¦ ¹Þ½À´Ï´Ù.
±×¸®°í u-boot È¨ÆäÀÌÁö¿¡ °¡¼­ ÃֽŠu-boot ¼Ò½ºµµ ´Ù¿î¹Þ½À´Ï´Ù. ²À ÀÌ°Ô ¾Æ´Ï¾îµµ µÇ´Âµ¥ ¿Ö ÇÊ¿äÇϳĸé elf.h ÆÄÀÏÀÌ ¾ø¾î¼­ ÀÔ´Ï´Ù. ¿ø·¡ ¸®´ª½º¿£ elf.h°¡ ±âº» include¿¡ ÀÖÀ»ÅÙµ¥ cygwin¿¡¼± ¾ø´Â °Í °°½À´Ï´Ù. ±×·¡¼­ ±×°É Ä«ÇÇÇؼ­ include µð·ºÅ丮¿¡ ³ÖÀ¸·Á°í ¹Þ¾Æ¿À´Â °Ì´Ï´Ù.

ºôµå  

ÀÏ´Ü ¾ÐÃàÀ» DZ´Ï´Ù. (¹ÞÀº ¾ÐÃàÆÄÀÏÀº data¿¡ ÀÖ°í ÀÛ¾÷µð·ºÅ丮´Â work¶ó°í °¡Á¤)
$ cd work
$ tar zxvf ../data/armboot-1.1.0.tgz
$ tar jxvf ../data/u-boot-1.1.1.tar.bz2
±×·¯¸é ÇöÀç µð·ºÅ丮 ¾Æ·¡¿¡ armboot-1.1.0 ÀÌ ÂÓ Ç®¸³´Ï´Ù. u-bootµµ DZ´Ï´Ù.
$ cd armboot-1.1.0
$ cp ../u-boot-1.1.1/include/elf.h include/
±×¸®°í À§Ã³·³ elf.h¸¦ Ä«ÇÇÇØÁÝ´Ï´Ù.

ÀÌÁ¦ Çѹø makeÇغ¾½Ã´Ù. ¸ÕÀú configuration. arm7tdmi º¸µåÀÎ ep7312¸¦ ÇÏ°Ú½À´Ï´Ù.

$ make ep7312_config
rm -f include/config.h include/config.mk include/epxa/excalibur.h
Configuring for ep7312 Board...

±×´ÙÀ½Àº ¹°·Ð Çѹø¿¡ µÇÁø ¾ÊÁÒ. MakefileÀ» ¿­¾îº¾´Ï´Ù.
CROSS_COMPILE = arm-linux-
À̺κÐÀ»
CROSS_COMPILE = arm-elf-
ÀÌ·¸°Ô ¹Ù²ãÁà¾ß ÇÕ´Ï´Ù.

±×¸®°í
88c88
<               cp armboot.bin /tftpboot/armboot.bin
---
>               cp armboot.bin ./tftpboot/armboot.bin
98c98
<               cp armboot.bin /tftpboot/armboot.bin
---
>               cp armboot.bin ./tftpboot/armboot.bin
ÀÌ·¸°Ô Ç¥½ÃµÈ ºÎºÐÀ» ¹Ù²ãÁÖ°í (.Ãß°¡)
mkdir tftpboot
ÇÕ´Ï´Ù.

±×¸®°í ºôµåÇÏ´Ùº¸¸é short-load-bytes ¶ó´Â ¿É¼ÇÀÌ ¾ø´Ù¸é¼­ ¾ÈµÉ °Ì´Ï´Ù. ÀÌ ÀÌÀ¯´Â gcc ¹öÀüÀÌ ¿Ã¶ó°¡¸é¼­ ÀÌ ¿É¼ÇÀÇ À̸§ÀÌ ¹Ù²î¾ú±â ¶§¹®ÀÔ´Ï´Ù. cpu/arm720t/config.mkÀÇ ³»¿ëÁß -mshort-load-bytes¸¦ -malignment-traps ·Î ¹Ù²ãÁÝ´Ï´Ù.

±×¸®°í ¼Ò½ºÁß¿¡ Á¶±Ý¾¿ ¹Ù²ã¾ß ÇÒ °Ô Àִµ¥ ¹¹³Ä¸é "·¹ÀÌºí µÚ¿¡ ¾Æ¹« Äڵ嵵 ¾ø´Ù." ¶ó´Â ¿¡·¯ÀÔ´Ï´Ù. break³ª returnÀ» Ãß°¡ÇÏ¸é µË´Ï´Ù.
board/ep7312/flash.cÀÇ 119Çà¿¡ return; À» Ãß°¡ÇÏ°í
net/net.cÀÇ 561Çà¿¡ break;¸¦ Ãß°¡ÇÕ´Ï´Ù.

ºôµåÇغ¸¸é ÀÌÁ¦ Àß µÉ °Ì´Ï´Ù. ¸î¸î °æ°í´Â ³ª¿ÀÁö¸¸ armboot.bin±îÁö Àß ³ª¿É´Ï´Ù.