3.2. ÅøÃ¼ÀÎ

3.2.1. ¹è°æ

ÅøÃ¼ÀÎÀ̶õ ¿©·¯ ´Ù¸¥ ÄÄÆ÷³ÍÆ®·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. °¡Àå Áß¿äÇÑ °ÍÀº gcc ÄÄÆÄÀÏ·¯ ÀÚü´Ù. ¶Ç gcc¸¦ »ç Çϱâ À§ÇØ ÇÊ¿äÇÑ binutilsµµ Æ÷ÇԵȴÙ. binutils´Â ¹ÙÀ̳ʸ®¸¦ ´Ù·ç´Âµ¥ »ç¿ëµÈ´Ù. ÀÌ µÑ·Î C ¶óÀ̺귯¸® ¸¦ »ç¿ëÇÏ´Â °ÍÀ» Á¦¿ÜÇÑ ³ª¸ÓÁö ´ëºÎºÐ°ú Ä¿³ÎÀ» ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù. º¸ÅëÀº ÄÄÆÄÀÏ·¯¸¦ ÄÄÆÄÀÏÇÏ´Â °æ¿ì ºÎÆ®½ºÆ®·¦¿¡ °ü°èµÈ ¹®Á¦ ¶§¹®¿¡ ÅøÃ¼ÀÎÀ» ¸¸µå´Â °ÍÀÌ °£´ÜÄ¡ ¾Ê´Ù.

ÀÌ Àå¿¡¼­´Â ÅøÃ¼ÀÎÀ» ¾î¶»°Ô ¸¸µå´ÂÁö ¾Ë¾Æº»´Ù. ÅøÃ¼ÀÎ ¸¸µé±â·Î ½Ã°£À» ³¶ºñÇϱ⠽Ȱųª ½Ãµµ Çϱ⠽ȴٸé ÀÌ¹Ì ¸¸µé¾îÁø °ÍÀ» »ç¿ëÇØµµ ÁÁ´Ù.

°æÇè¿¡ ÀÇÇϸé È¥ÀÚ ¸¸µå´Â ÅøÃ¼ÀÎÀÇ °æ¿ì Á¶½ÉÇÏÁö ¾ÊÀ¸¸é ³ªÁß¿¡ »ç¿ëÇÒ ¶§ ¾î¶² ÇüÅÂÀÇ ÀÌ»óÇÑ °á°ú ¸¦ ¸¸µé¾î³¾Áö ¸ð¸£±â ¶§¹®¿¡ °ËÁõµÈ ÀÌ¹Ì ¸¸µé¾îÁø ÅøÃ¼ÀÎÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù°í °¨È÷ ¸»ÇÒ ¼ö ÀÖ´Ù. ¶Ç ¸¸µé¾îº¸¸é ¾Ë°ÚÁö¸¸ »ó´çÇÑ ³ë·Â°ú ÁÖÀǸ¦ ±â¿ï¿©¾ßÇϱ⠶§¹®¿¡ ÀÌ¹Ì ¸¸µé¾îÁø °ÍÀ» »ç¿ëÇÏ´Â°Ô ÁÁÀ» °ÍÀÌ´Ù.

±×·¯³ª Çѹø ÂëÀº °æÇèÀ¸·Î¶óµµ ÄÄÆÄÀÏ·¯¸¦ ¸¸µé°í ÀÌ °ÍÀ¸·Î ÇÁ·Î±×·¥À» ¸¸µé¾î »ç¿ëÇØº¸±â ¹Ù¶õ´Ù.

ARM ÇÁ·Î¼¼¼­¿¡ °üÇÑ ÅøÃ¼ÀÎÀº http://www.arm.linux. org.uk ȤÀº http://www.armlinux.org¿¡¼­ ã±â ¹Ù¶õ´Ù.

3.2.2. ¹Ì¸® ¸¸µé¾îÁø ÅøÃ¼ÀÎ

Native Compile

ARM »ó¿¡¼­ µµ´Â Native ÄÄÆÄÀÏ·¯ÀÇ ¾ÈÁ¤È­ ¹öÀü ¹ÙÀ̳ʸ®´Â ¾Æ·¡ »çÀÌ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

arm.linux.org.uk ¹öÀü

°ø½Ä ARM ¸®´ª½º »çÀÌÆ®¿¡¼­ ¹èÆ÷ÇÏ´Â °ÍÀÌ´Ù.

Embedian - ÇÊÀÚ´Â µ¥ºñ¾ÈÀ» »ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ½ÇÁ¦ ÀÌ ÅøÀÌ ¾î¶²Áö´Â Àß ¸ð¸¥´Ù.

Embedian ¹öÀüÀº gcc 2.95.2, binutils 2.9.5.0.37°ú glibc 2.1.3À» Æ÷ÇÔÇÑ´Ù. ÀνºÅçÀº °£´ÜÇØ µ¥ºñ¾È ½Ã½ºÅÛÀ» »ç¿ëÇϸé apt¸¦ »ç¿ëÇØ ½±°Ô ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª /usr/bin¿¡ ¼³Ä¡µÇ¹Ç·Î ÀÌ¹Ì ½Ã½ºÅÛ¿¡ ±ò¸° °Í¿¡ ¾þ¾î ¾²Áö ¾Êµµ·Ï ÁÖÀǸ¦ ¿äÇÑ´Ù.

LART

LART Ÿ¸£º¼Àº ¾Æ·¡¿Í °°Àº °ÍÀ» Æ÷ÇÔÇÑ´Ù.

  1. gcc 2.95.2

  2. binutils 2.9.5.0.22

  3. glibc 2.1.2

¼³Ä¡´Â ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù.

mkdir /data
mkdir /data/lart
cd /data/lart
bzip2 -dc somewhere/arm-linux-cross.tar.bz2 | tar xvf -

±×¸®°í /data/lart/cross/binÀ» path¿¡ Ãß°¡ÇØÁØ´Ù. C¿Í C++ ÄÄÆÄÀÏ·¯´Â arm-linux-gcc¿Í arm-linux-g++¿Í °°ÀÌ ¸í·ÉÀ» »ç¿ëÇØ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.

Compaq - ItsyÀΰ¡ ÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡ Àִµ¥ »ç¿ëÇØ º¸Áø ¾Ê¾Ò´Ù.

ÄÄÆÑ Å©·Î½º ÅøÃ¼ÀÎÀº ´ÙÀ½°ú °°Àº °ÍÀ» Æ÷ÇÔÇÑ´Ù.

  1. gcc 2.95.2

  2. binutils 2.9.5.0.22

  3. glibc 2.1.2 with international crypt library

ÀÌ ÅøÃ¼ÀÎÀº È£½ºÆ®´Â i386, Ÿ°ÙÀº armv4lÀÌ´Ù.

¼³Ä¡´Â ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù. ÀÌ ÅøÃ¼ÀÎÀº ¹Ýµå½Ã /skiff/local¿¡ ¼³Ä¡µÇ¾ßÇÑ´Ù. ±×¸®°í ¾Æ·¡¿Í °°ÀÌ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé¾îÁà¾ßÇÑ´Ù.

ln -s /usr/src/linux/include/asm /skiff/local/arm-linux/include/asm
ln -s /usr/src/linux/include/linux /skiff/local/arm-linux/include/linux

3.2.3. ÅøÃ¼ÀÎ ¸¸µé±â

¿ì¼± Å©·Î½º ÄÄÆÄÀÏ·¯¸¦ ¸¸µé¾îº¸ÀÚ. root·Î ½ÃÀÛÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù. ȤÀº Àû¾îµµ ¼³Ä¡ÇÒ ¶© root·Î ÇÒ Çʿ䰡 ÀÖ´Ù. binutils¿Í gcc¸¦ ´ÙÀ½ »çÀÌÆ®¿¡¼­ ´Ù¿î ¹Þ´Â´Ù.

ÀÎÅÚ SA1100 Assabet º¸µå¿¡ °üÇÑ ¸®´ª½º °³¹ß »çÀÌÆ®¸¦ ÂüÁ¶ÇÏ¸é º¸´Ù ÀÚ¼¼ÇÑ »çÇ×À» ¾Ë ¼ö ÀÖ´Ù. ÀÎÅÚ »çÀÌÆ®.

¹ÞÀº ÆÄÀÏÀÌ /devel/arm/assabet¿¡ µé¾ú´Ù°í °¡Á¤ÇÏ°í ±× µð·ºÅ丮¿¡¼­ ´ÙÀ½°ú °°Àº ÀýÂ÷¸¦ »ç¿ëÇØ ÄÄÆÄÀÏ·¯¸¦ ¸¸µç´Ù.

  1. binutils

    %cd /devel/arm/assabet
    %tar xzf binutils-2.11.2.tar.gz
    %cd binutils-2.11.2
    %./configure --target=arm-linux --prefix=/usr/local/arm
    %make
    %make install

    configureÇÒ ¶§ÀÇ --targetÀº ¸¸µé¾îÁú binutils°¡ arm-linux¿ëÀ̶õ °ÍÀ» ³ªÅ¸³»°í, --prefix´Â ¸¸µé¾îÁø binutils°¡ ¼³Ä¡µÉ µð·ºÅ丮¸¦ ³ªÅ¸³½´Ù.

    ¼³Ä¡µÈ µð·ºÅ丮ÀÇ ¸®½ºÆ®´Â ´ÙÀ½°ú °°ÀÌ µÉ °ÍÀÌ´Ù.
    drwxr-xr-x    4 root     root           16  2¿ù 26 09:58 arm-linux
    drwxr-xr-x    2 root     root         4096  2¿ù 26 09:58 bin
    drwxr-xr-x    2 root     root           48  2¿ù 26 09:58 include
    drwxr-xr-x    2 root     root         4096  2¿ù 26 09:58 lib
    drwxr-xr-x    3 root     root            8  2¿ù 26 09:58 man
    drwxr-xr-x    2 root     root            1  2¿ù 26 09:58 share

    Á¤»óÀûÀ¸·Î ¸¸µé¾î Á³À¸¸é ´ÙÀ½ ÀýÂ÷¿¡¼­ »ç¿ëµÇ°Ô Çϱâ À§ÇØ path¿¡ Àӽ÷ΠÃß°¡ÇØ ÁØ´Ù. bash¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤Çß´Ù.
    export PATH=/usr/local/arm/bin:$PATH

  2. gcc

    gcc¸¦ ¸¸µé±â À§Çؼ± ¸®´ª½º Ä¿³ÎÀÇ Çì´õ ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù. ¿ì¼± Ä¿³Î ¼Ò½º¸¦ Ç®°í 2°³ÀÇ µð·ºÅ丮¸¦ ¸µÅ©ÇØ ÁØ´Ù. »ç¿ëµÈ Ä¿³ÎÀº ¿øÇÏ´Â ¹öÀüÀ» ¹Þ¾Æ »ç¿ëÇϱ⠹ٶõ´Ù. ¿©±â¼± 2.4.17À» »ç¿ëÇß´Ù.

    %cd /devel/arm/assabet
    %tar xvjf linux-2.4.17.tar.bz2
    %mv linux linux-2.4.17
    %cd /usr/local/arm/arm-linux
    %mkdir include
    %cd include
    %ln -s /devel/arm/assabet/linux-2.4.17/include/asm-arm asm
    %ln -s /devel/arm/assabet/linux-2.4.17/include/linux linux
    %ls asm
    %ls linux
    %cd /devel/arm/assabet
    %tar xzf gcc-2.95.3.tar.gz
    %cd gcc-2.95.3
    %./configure --target=arm-linux --prefix=/usr/local/arm
    %make LANGUAGES="c"

    make¸¦ ÁøÇàÇÏ´Â Áß¿¡ stdlib.h, unistd.h¿Í °°Àº ¸î °³ÀÇ ÆÄÀÏÀÌ ¾ø´Ù°í ¿¡·¯°¡ ³¯ °ÍÀÌ´Ù. ARM ¸®´ª½º »çÀÌÆ®¿¡¼­ ¾òÀº Á¤º¸¿¡ ÀÇÇϸé, gcc/config/arm/t-linux¶õ ÆÄÀÏÀ» ¼öÁ¤Ç϶ó°í µÇ¾îÀÖ´Ù.¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÑ´Ù.

    %cd gcc/config/arm
    %vi t-linux

    Á¦ÀÏ À§¿¡ ÀÖ´Â ÁÙÀ» ã¾Æº¸¸é 'TARGET_LIBGCC2_CFLAGS='¶õ ÁÙÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÁÙÀÇ ³¡¿¡ '-Dinhibit_libc -D__gthr_posix_h'¸¦ Ãß°¡ÇØ ÁØ´Ù. ±×¸®°í configure¸¦ ½ÇÇàÇÒ ¶§ --disable-threads¸¦ Ãß°¡ÇØ ÁÖ°í ´Ù½Ã configure°ú make¸¦ ½ÇÇàÇÑ´Ù.

    %./configure --target=arm-linux --prefix=/usr/local/arm --disable-threads
    %make LANGUAGES="c"

    ÄÄÆÄÀÏ ÈÄ ¿¡·¯°¡ ³ª´Â °Í ó·³ º¸ÀÌÁö¸¸ ¿¡·¯ ³ªµµ ÇÊ¿äÇÑ ÆÄÀÏÀº ¸¸µé¾îÁ³À¸¹Ç·Î ¾Æ·¡ ¸í·ÉÀ¸·Î È®ÀÎ ÇÑ´Ù. ¸¸¾à gcc/xgcc°¡ ¾ø´Ù¸é make°¡ Á¦´ë·Î µÇÁö ¾ÊÀº °ÍÀÌ´Ù. ¾Æ·¡ ¸í·ÉÀÇ Ãâ·ÂÀº 'arm-linux'°¡µÈ´Ù.

    %./gcc/xgcc -dumpmachine
    arm-linux

    À§¿Í °°ÀÌ Ãâ·ÂµÈ´Ù¸é Á¦´ë·Î µÈ °ÍÀ̹ǷΠÀνºÅçÇÑ´Ù.

    %make LANGUAGES="c" install

  3. glibc¸¦ ¸¸µå´Â ÀýÂ÷¿¡¼± Ä¿³ÎÀÇ version.h°¡ ÇÊ¿äÇÏ´Ù. version.h´Â make dep¸¦ ÇÏ¸é »ý¼ºµÈ´Ù.

    %cd /devel/arm/assabet
    %cd linux-2.4.17
    %zcat ../patch-2.4.17-rmk5.gz | patch -p1

    patch±îÁö Àû¿ëÇÏ°í ³ª¼­ MakefileÀ» ¼öÁ¤ÇÑ´Ù. /devel/arm/assabet/linux-2.4.17/MakefileÀ» ¿­¾î 'ARCH := arm'À¸·Î ¼öÁ¤Çϰí 'CROSS_COMPILE =/usr/local/arm/bin/arm-linux-'À¸·Î ¼öÁ¤ÇÑ´Ù.

    %make assabet_config
    %make config

    ±×³É enter¸¸ Ãļ­ ÀÏ´Ü default settingÀ¸·Î ÀúÀåÇÑ´Ù.

    %make dep
    %find -name "version.h"

    version.h°¡ include/linux¿¡ ¾ø´Ù¸é ¿¡·¯!

    glibc°¡ ¼³Ä¡µÉ µð·ºÅ丮¸¦ ¸¸µé¾î ÁØ´Ù.

    %mkdir /usr/local/arm/glibc
    %mkdir /usr/local/arm/glibc/arm-linux-glibc
    %cd /devel/arm/assabet
    %tar xzf glibc-2.1.3.tar.gz
    %cd glibc-2.1.3
    %tar xzf ../glibc-linuxthreads-2.1.3.tar.gz
    %tar xzf ../glibc-crypt-2.1.tar.gz
    %CC=arm-linux-gcc ./configure arm-linux --build=i686-pc-linux-gnu \
    --prefix=/usr/local/arm/glibc/arm-linux-glibc --enable-add-ons \
    --with-headers=/devel/arm/assabet/linux-2.4.17/include
    %make
    %make install

    ¼Óµµ°¡ ´À¸° È£½ºÆ®¸¦ »ç¿ëÇÑ´Ù¸é ¾Æ¸¶µµ Áý¿¡ Åð±ÙÇϱâ Àü¿¡ make ½ÇÇàÇØ ³õ°í Áý¿¡ °¬´Ù ¿À¸é ¿¡·¯°¡ ³ª ÀÖ´øÁö Á¦´ë·Î ÄÄÆÄÀÏÀÌ µÇ¾î ÀÖ´øÁö ÇÒ °ÍÀÌ´Ù. Àü¿¡ P-II 400MHz¿¡¼­ ¾à 1½Ã°£ °É¸° ±â¾ïÀÌ ÀÖ´Ù. ÇöÀç Athlon 1GHz¿¡¼­ ¾à 10ºÐ °É¸°°Í °°´Ù.

  4. c++

    c++ ÄÄÆÄÀÏ·¯µµ ¸¸µé¾îº¸ÀÚ.

    %cd /devel/arm/assabet
    %cd gcc-2.95.3
    %./configure --host=i686-pc-linux-gnu --target=arm-linux \
    --prefix=/usr/local/arm \
    --with-headers=/usr/local/arm/glibc/arm-linux-glibc/include \
    --with-libs=/usr/local/arm/glibc/arm-linux-glibc/lib
    %make LANGUAGES="c c++"
    %make LANGUAGES="c c++" install

  5. Å×½ºÆ®

    ´Ù ¸¸µé¾îÁø ÄÄÆÄÀÏ·¯, ¶óÀ̺귯¸®¸¦ Å×½ºÆ® ÇØº»´Ù. Å×½ºÆ® Àü¿¡ /usr/local/arm/binÀÌ ÆÐ½º¿¡ ¼³Á¤µÆ´ÂÁö È®ÀÎ. ¾ø´Ù¸é ³Ö¾î Áְųª ¾Æ·¡ compiler ¸í·É¿¡¼­ Àû´çÈ÷ path¸¦ »ðÀÔÇØ ÁÙ°Í.

    %cat > hello.c
    /*
     * hello.c
     */
    #include <stdio.h>
    
    int main()
    {
    	printf("hello.\n");
    	return 0;
    }
    
    %arm-linux-gcc -o hello hello.c

    ¿¡·¯ ¾øÀÌ ÄÄÆÄÀϵǰí hello°¡ ¸¸µé¾îÁ³´ÂÁö È®ÀÎÇÒ °Í. ±×¸®°í file ¸í·ÉÀ¸·Î ¸¸µé¾îÁø hello°¡ ¾î¶² ³»¿ëÀÎÁö È®ÀÎÇØ º»´Ù. ¾Æ·¡ ó·³ ELFÀ̰í ARM¿ëÀ̸é OK.

    %file hello
    hello: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), not stripped

¿©±â±îÁö ÅøÃ¼ÀÎÀ» ¸¸µé¾î ºÃ´Ù. Ä¿³ÎÀÌ Àß µ¹¾Æ°£´Ù¸é ¸¸µç ÅøÃ¼ÀÎÀº Àß µ¿ÀÛÇÑ´Ù°í ºÁµµ µÉ°ÍÀÌ´Ù.