2011.09.02 00:05
     

제 책 "64비트 멀티코어 OS 원리와 구조"가 나온지도 벌써 2달 이상 지났습니다. ^^;;; 책이 출간됨과 동시에 가장 많이 질문을 받는 것이 OS 제작을 위한 환경 구축 방법인데요... 얼마전부터 환경 구축에 어려움을 겪는 분들이 많아지셔서 Cygwin 최신 버전을 다운 받아서 빌드를 해봤습니다. ^^;;; 실제로 빌드를 진행하다보니 한가지 변경점이 보이더군요. ㅠㅠ 그래서 그 내용을 여기다가 정리해놓습니다. ㅠㅠ


<출처 - yes24.com>



Cross Compiler를 만들려면 먼저 Cygwin 사이트(http://www.cygwin.com/install.html)로 이동해서 Cygwin Installer를 다운로드 받습니다. Setup.exe 파일을 다운하면 됩니다. ^^;;;

다운로드 후 파일을 실행하면 어떻게 설치할 것이고 패키지 소스는 어디에서 다운 받을 것인지 선택하는 부분이 나오는데,

책에 나와있는 카이스트 사이트(ftp://ftp.kaist.ac.kr)가 더이상 유효하지 않으니 다른 사이트를 선택해야합니다.


우리나라 근처에 있는게 아무래도... 속도도 빠르니 가까운 일본 주소인 ftp://ftp.jaist.ac.jp를 선택하면 됩니다. ^^;;;

패키지 소스를 다운 받을 주소를 선택하고 난 뒤에는 "Select Package" 화면이 나올 때까지 적당히 Next를 선택해주면 됩니다. ^^;;;

"Select Package" 화면이 나오면 아래의 항목들을 설치해줍니다. 책을 쓸 때는 C++ 관련 항목이 없어도 정상적으로 빌드가 되었지만, 지금은 C++ 컴파일러를 설치하지 않으니 configure 중에 오류가 발생하더군요. ㅠㅠ
(굵게 표시한 부분이 책의 내용과 비교했을 때 바뀐 부분입니다.)

+Devel
    + binutils - 2.21.53-2 버전, 소스 및 바이너리 모두 설치
    + bison - 2.4-2-1 버전, 바이너리만 설치
    + flex - 2.5.35-1 버전, 바이너리만 설치
    + gcc4-core - 4.3.4-3 버전, 소스 및 바이너리 모두 설치
    + gcc4-g++ - 4.3.4-4 버전, 바이너리만 설치
    + libiconv - 1.14-1 버전, 바이너리만 설치
    + libtool - 2.2.7a-15 버전, 바이너리만 설치
    + make - 3.81-2 버전, 바이너리만 설치
    + patchutils - 0.3.1-1 버전, 바이너리만 설치
+Libs
    + libgmp-devel - 4.3.2-1 버전, 바이너리만 설치
    + libmpfr-devel -3.0.1-1 버전, 바이너리만 설치
    + libmpc-devel - 0.8-1 버전, 바이너리만 설치

위의 항목이 설치되고 나면 binutils부터 차례대로 빌드를 시작하면 됩니다.



binutils를 빌드하려면 /usr/src 디렉터리 아래에 있는 binutils 디렉터리로 이동해서 다음과 같은 순서로 커맨드를 입력하면 빌드와 설치가 끝납니다.

// 디렉터리 이동 후 아래 작업 수행
$> cd /usr/src/binutils-2.21.53-2 <== 디렉터리 이름은 binutils 버전에 따라 다를 수 있음
            $> export TARGET=x86_64-pc-linux
            $> export PREFIX=/usr/cross
            $> ./configure --target=$TARGET --prefix=$PREFIX --enable-64-bit-bfd --disable-shared            
              --disable-nls

            $> make configure-host
            $> make LDFLAGS="-all-static"
            $> make install

            // 아래는 테스트를 위한 부분 커맨드를 실행했을 때 x86_64 관련 항목이 보이면 제대로 된 것입니다. ^^;;;;
            $> /usr/cross/bin/x86_64-pc-linux-ld --help | grep "supported "
            /usr/cross/bin/x86_64-pc-linux-ld: supported targets: elf64-x86-64 elf32-i386 a.
            out-i386-linux efi-app-ia32 efi-bsdrv-ia32 efi-rtdrv-ia32 efi-app-x86_64 efi-bsd
            rv-x86_64 efi-rtdrv-x86_64 elf64-little elf64-big elf32-little elf32-big srec sy
            mbolsrec tekhex binary ihex
            /usr/cross/bin/x86_64-pc-linux-ld: supported emulations: elf_x86_64 elf_i386 i38
            6linux


binutils 빌드 및 설치가 끝났다면 gcc를 cross compile할 차례입니다. gcc는 아래와 같은 순서로 입력하면 빌드와 설치가 완료됩니다. ^^;;;

// 압축 해제, 파일명은 cygwin에서 다운받은 GCC 버전에 따라서 다를 수 있으니 실제 디렉터리를 확인하여 입력해야 합니다. ^^;;; 아래 패치 파일도 모두 마찬가지 입니다.
$> cd /usr/src
$> tar -xvf gcc-4.3.4.tar.bz2
$> patch -p1 < gcc4-4.3.4-3.src.patch
$> patch -p1 < gcc4-4.3.4-3.cygwin.patch
$> export TARGET=x86_64-pc-linux
$> export PREFIX=/usr/cross
$> export PATH=$PREFIX/bin:$PATH

// 압축 해제가 끝났으니 소스가 있는 디렉터리 이동 후 나머지 작업 수행
$> cd /usr/src/gcc-4.3.4 <== 디렉터리 이름은 GCC 버전에 따라 다를 수 있음
            $> ./configure --target=$TARGET --prefix=$PREFIX --disable-nls --enable-languages=c
               --without-headers --disable-shared --enable-multilib

            $> make configure-host
            $> cp /lib/gcc/i686-pc-cygwin/4.3.4/libgcc_s.dll.a /lib/gcc/i686-pc-cygwin/4.3.4/libgcc_s.a
            $> cp /lib/libmpfr.dll.a /lib/libmpfr.a
            $> cp /lib/libgmp.dll.a /lib/libgmp.a
            $> make all-gcc
            $> make install-gcc

            // 테스트용입니다. 아래와 같이 입력했을 때 m64가 보이면 정상적으로 설치된 것입니다.
            $> /usr/cross/bin/x86_64-pc-linux-gcc -dumpspecs | grep -A1 multilib_options
            *multilib_options:
            m64/m32

자, 이제 64비트 바이너리를 생성할 수 있는 gcc가 생성되었으니,
즐거운 OS 프로그래밍하세요 ;)

Mittm

Android App

Posted by kkamagui

댓글을 달아 주세요

  1. phoenix 2011.11.27 00:12 신고  댓글주소  수정/삭제  댓글쓰기

    Libs의 libmpc-devel 바이너리도 설치해야 gcc컴파일이 진행됩니다.

  2. Reign 2011.12.30 14:42 신고  댓글주소  수정/삭제  댓글쓰기

    아하 이래서 리눅스에서는 컴파일 되는게 여기선 안된 거였군요!!

  3. 뭘까요? 2012.02.29 12:37 신고  댓글주소  수정/삭제  댓글쓰기

    디텍터리?

  4. 질문 2012.07.31 17:12 신고  댓글주소  수정/삭제  댓글쓰기

    54페이지에서 설치 확인을 하는데 엑세스가 거부되었다고 나오면 어떻게하나요?

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2012.08.05 00:15 신고  댓글주소  수정/삭제

      안녕하세요 ^^

      gcc를 실행했을 때 엑세스가 거부되었다고 나오는 문제는
      제 글 http://kkamagui.tistory.com/754 를 참고하시기 바랍니다. ^^

      그럼 좋은 하루 되세요 ;)

  5. hoho313 2013.01.09 11:38 신고  댓글주소  수정/삭제  댓글쓰기

    책 정말 아무나 쓰는게 아닌거 같네요
    꼼꼼하게 잘 포스팅 해주셔서 정말 도움이 되었습니다 ^^*

  6. kangpangi 2013.02.24 00:03 신고  댓글주소  수정/삭제  댓글쓰기

    책을 구입해서 오늘 부터 차근차근 따라 해보는 초보 개발자입니다.
    일단 너무 좋은 책을 써주셔서 감사합니다. 하나하나 정말 고생한 흔적과 노력이 엿보이네요.
    혹시 도움이 될까하여 제가 cygwin설치하며 헷갈렸던 부분을 적습니다.
    제가 착각해서 고생했던 부분은 binutils설치때 플랫폼 및 경로 설정 바로 밑에 "이와 같이 설정하고 빌드와 설치과정을 마치면 'usr/cross' 디렉토리에 'x86_64-pc-linux-'로 시작하는 파일들이 생성됩니다." 라는 부분이였습니다.
    물론 글을 자세히 읽어보면 빌드와 설치과정을 마쳐야만 파일들이 생성된다라는 것을 알 수 있지만 플랫폼 및 경로 설정만 하면 파일들이 생성된다라고 착각 할 수 있을 것 같습니다. 저만 그런 것인지도 모르겠지만 ㅜㅜ 제가 이 부분에서 계속 파일이 아니라 폴더조차 안생기길래 몇시간을 재설치 검색을 했습니다.
    그리고 $> patch -p1 < gcc4-4.3.4-3.src.patch(물론 버젼은 바꿧습니다.) 이 명령어 실행시 파일이 없다고 나와 그냥 무시하고 진행하였는데 후에 문제가 안되는지 궁금합니다.

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2013.03.01 05:49 신고  댓글주소  수정/삭제

      안녕하세요, kangpangi님 ^^

      혼란스럽게 해드려서 죄송합니다. 다시 읽어보니 헷갈릴 수도 있겠네요. ㅠㅠ 다음판이 나오면 수정을 하겠습니다.

      gcc 버전이 책과 다르다면 빌드과정에 차이가 있을 수 있습니다. 말씀하신 patch -p1 < gcc... 라는 부분도 그런 부분 중에 하나구요,

      빌드가 정상적으로 수행되었다면 크게 걱정하지 않으셔도 될 것 같습니다.

      그럼 즐거운 OS 프로그래밍하세요 ;)

  7. Favicon of http://jsyj0720.tistory.com BlogIcon JC2 2014.03.02 16:16 신고  댓글주소  수정/삭제  댓글쓰기

    어려운 내용을, 쉽고 재미있게 설명해주셔서 감사합니다.
    책이 재미있어 자꾸 보게 됩니다. 항상 응원합니다! 열심히 공부하겠습니다.

    +
    개발환경을 구축하는데만 일주일이 넘게 걸렸습니다. 여전히 설치중입니다..^^;;
    오류가 날 때 마다 열심히 구글에 검색을 하면서 진행했는데,우연히 선생님의 블로그에 들어오게 되었습니다..
    글 열심히 읽고, 다시 해봐야겠습니다. 포스팅 감사합니다.

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2014.03.03 07:33 신고  댓글주소  수정/삭제

      안녕하세요, HSCD님 ^^
      만나서 반갑습니다. ^^

      응원 말씀 감사드리구요, 번거롭게 헤드려서 죄송합니다. ㅠㅠ

      http://www.mint64os.pe.kr 로 오셔서 공지사항쪽을 보시면 제가 사용하던 환경을 그대로 사용할 수 있는 방법이 있습니다.

      아래 방법을 사용하시면 더 편리하게 작업할 수 있으실 것 같네요. ^^
      http://jsandroidapp.cafe24.com/xe/3171

      그럼 즐거운 OS 프로그래밍하세요 ^^

  8. mycst107 2014.04.02 23:46 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~ 64비트 멀티코어~~를 최근에 알게되서 구매한 독자입니당.. 초보인데 .. 가장 기초적인 지식으로 접하다 보니 설치과정인데도 어려움이 많아 이렇게 댓글을 남겨요ㅠㅠ
    책의 67페이지 gcc설치부분에서 저는..
    Verify that you have permission to grant a GFDL license for all
    new text in tm.texi, then copy it to ../.././gcc/doc/tm.texi.
    Makefile:3703: recipe for target 's-tm-texi' failed
    make[1]: *** [s-tm-texi] Error 1
    make[1]: Leaving directory '/usr/src/gcc-4.8.2/host-x86_64-unknown-cygwin/gcc'
    Makefile:3962: recipe for target 'install-gcc' failed
    make: *** [install-gcc] Error 2
    요렇게 마지막에 에러가 납니당..ㅠㅠ
    그리고 혹시나해서
    Kahee.Park@KaheePark-PC /usr/cross
    $ ls
    bin include lib libexec share x86_64-pc-linux

    Kahee.Park@KaheePark-PC /usr/cross
    $ cd bin

    Kahee.Park@KaheePark-PC /usr/cross/bin
    $ ls
    x86_64-pc-linux-addr2line.exe x86_64-pc-linux-ld.exe
    x86_64-pc-linux-ar.exe x86_64-pc-linux-nm.exe
    x86_64-pc-linux-as.exe x86_64-pc-linux-objcopy.exe
    x86_64-pc-linux-c++filt.exe x86_64-pc-linux-objdump.exe
    x86_64-pc-linux-cpp.exe x86_64-pc-linux-ranlib.exe
    x86_64-pc-linux-elfedit.exe x86_64-pc-linux-readelf.exe
    x86_64-pc-linux-gcov.exe x86_64-pc-linux-size.exe
    x86_64-pc-linux-gprof.exe x86_64-pc-linux-strings.exe
    x86_64-pc-linux-ld.bfd.exe x86_64-pc-linux-strip.exe

    확인했떠니 gcc, ld 기타 파일을.. 확인할 수 없네요ㅠㅠ
    어찌해야하나용.... ?!

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2014.04.07 07:16 신고  댓글주소  수정/삭제

      안녕하세요, mycst107님 ^^
      만나서 반갑습니다. ^^

      x86_64-pc-linux-ld.exe 파일이 있는 걸 보니 ld는 잘 생성된 것 같은데... x86_64-pcl-linux-gcc.exe 파일은 혹시 없나요?

      빌드에 계속 문제가 발생한다면...
      http://jsandroidapp.cafe24.com/xe/3171 글에 포함된

      http://ethobis.tistory.com/63 링크로 이동하셔서 부록 CD에 있는 파일을 그대로 활용하는 방법도 있습니다. ^^

      그럼 즐거운 OS 프로그래밍하세요 ^^

  9. mycst107 2014.04.02 23:46 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~ 64비트 멀티코어~~를 최근에 알게되서 구매한 독자입니당.. 초보인데 .. 가장 기초적인 지식으로 접하다 보니 설치과정인데도 어려움이 많아 이렇게 댓글을 남겨요ㅠㅠ
    책의 67페이지 gcc설치부분에서 저는..
    Verify that you have permission to grant a GFDL license for all
    new text in tm.texi, then copy it to ../.././gcc/doc/tm.texi.
    Makefile:3703: recipe for target 's-tm-texi' failed
    make[1]: *** [s-tm-texi] Error 1
    make[1]: Leaving directory '/usr/src/gcc-4.8.2/host-x86_64-unknown-cygwin/gcc'
    Makefile:3962: recipe for target 'install-gcc' failed
    make: *** [install-gcc] Error 2
    요렇게 마지막에 에러가 납니당..ㅠㅠ
    그리고 혹시나해서
    Kahee.Park@KaheePark-PC /usr/cross
    $ ls
    bin include lib libexec share x86_64-pc-linux

    Kahee.Park@KaheePark-PC /usr/cross
    $ cd bin

    Kahee.Park@KaheePark-PC /usr/cross/bin
    $ ls
    x86_64-pc-linux-addr2line.exe x86_64-pc-linux-ld.exe
    x86_64-pc-linux-ar.exe x86_64-pc-linux-nm.exe
    x86_64-pc-linux-as.exe x86_64-pc-linux-objcopy.exe
    x86_64-pc-linux-c++filt.exe x86_64-pc-linux-objdump.exe
    x86_64-pc-linux-cpp.exe x86_64-pc-linux-ranlib.exe
    x86_64-pc-linux-elfedit.exe x86_64-pc-linux-readelf.exe
    x86_64-pc-linux-gcov.exe x86_64-pc-linux-size.exe
    x86_64-pc-linux-gprof.exe x86_64-pc-linux-strings.exe
    x86_64-pc-linux-ld.bfd.exe x86_64-pc-linux-strip.exe

    확인했떠니 gcc, ld 기타 파일을.. 확인할 수 없네요ㅠㅠ
    어찌해야하나용.... ?!

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2014.04.15 07:14 신고  댓글주소  수정/삭제

      안녕하세요, mycst107님 ^^
      만나서 반갑습니다.

      최신 cygwin으로 크로스 컴파일러를 만드는 방법은 http://jsandroidapp.cafe24.com/xe/3171 에 업데이트해 놓았습니다.

      곧 빌드용 이미지도 올려놓을 예정이니 잠시만 기다려주세요 ^^

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2014.04.18 08:35 신고  댓글주소  수정/삭제

      빌드에 오류가 발생할 경우 사용할 가상머신 이미지를 http://jsandroidapp.cafe24.com/xe/3171 에 업데이트 해두었으니 참고하시기 바랍니다. ^^

  10. jungjinwoo217 2018.03.14 02:27  댓글주소  수정/삭제  댓글쓰기

    관리자의 승인을 기다리고 있는 댓글입니다


티스토리 툴바