<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Gentoo_Cross_Toolchain_hotwo</id>
	<title>Gentoo Cross Toolchain hotwo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Gentoo_Cross_Toolchain_hotwo"/>
	<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=Gentoo_Cross_Toolchain_hotwo&amp;action=history"/>
	<updated>2026-04-19T18:31:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://workspace.onionmixer.net/wiki/index.php?title=Gentoo_Cross_Toolchain_hotwo&amp;diff=1267&amp;oldid=prev</id>
		<title>Onionmixer: 링크 오류 수정</title>
		<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=Gentoo_Cross_Toolchain_hotwo&amp;diff=1267&amp;oldid=prev"/>
		<updated>2016-02-20T04:12:43Z</updated>

		<summary type="html">&lt;p&gt;링크 오류 수정&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;Gentoo linux 64bit system에서 arm용 cross toolchain(until gcc) HOWTO&lt;br /&gt;
&lt;br /&gt;
작성자 : 새벽녘의 흡혈양파&lt;br /&gt;
&lt;br /&gt;
==prescript==&lt;br /&gt;
&lt;br /&gt;
# 이 문서는 falinux 에서 판매하는 EZ-X5용 툴체인을 빌드하려하는 사람들을 대상으로한 기초문서입니다.&lt;br /&gt;
# 대상을 EZ-X5로 하고있는 이유는 kernel때문에 그렇습니다. 결과적으로 다른 커널을 사용하시는 경우에도 커널만 맞춰주신다면 별도의 문제가 없을것으로 생각됩니다.&lt;br /&gt;
# 환경 및 디렉토리는 제가 빌드하는 환경을 기준으로 설명합니다. 추가적인 질문사항은 gentoo kr의 게시판인 [http://www.gentoo-kr.org/qna 이곳] 으로 부탁드립니다.&lt;br /&gt;
# 환경이 저와 틀린경우 문서의 내용을  100% 보장하지는 않습니다.&lt;br /&gt;
# 결과적으로 제대로 설명을 해주신 한글문서가 제가 찾았을때는 없는거같아서 만듭니다...-.-;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==reuqire==&lt;br /&gt;
&lt;br /&gt;
# host : gentoo 64 bit system (다른 linux도 상관은 없을거같지만)&lt;br /&gt;
# files&lt;br /&gt;
#* binutils-2.20.1.tar.bz2&lt;br /&gt;
#* gcc-4.4.4.tar.bz2&lt;br /&gt;
#* glibc-2.11.2.tar.bz2&lt;br /&gt;
#* glibc-ports-2.11.tar.bz2&lt;br /&gt;
# 그외 몇개의 patch&lt;br /&gt;
# 그리고 rar프로그램 (emerge rar로 손쉽게 설치할 수 있습니다)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위의 파일과 관련된 path들은 아래의 link를 누르시면 받으실 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
http://onionmixer.net/~onion/embedded/ez-x5_crosstoolchain.rar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==prebuild==&lt;br /&gt;
&lt;br /&gt;
이 문서는 다음과 같은 환경을 기준으로 설명됩니다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
export XTARGET=arm-unknown-linux-gnueabi &lt;br /&gt;
export XBUILDROOT=/mnt/compile/compile_source/embedded/&lt;br /&gt;
export XBUILDSRC=/mnt/compile/compile_source/embedded/src/ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* XTARGET&lt;br /&gt;
** 자신이 cross compile을 하려는 대상환경을 설정&lt;br /&gt;
* XBUILDROOT&lt;br /&gt;
** cross compile환경이 들어갈 build root&lt;br /&gt;
* XBUILDSRC&lt;br /&gt;
** 빌드하는 소스들이 들어있는 디렉토리. Kernel source등이 위치합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그리고 $XBUILDROOT/bin 을 현재 사용하는 계정의 PATH에 추가를 해주시면 됩니다. 저는 ~/.bashrc에 넣었습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Build Phase==&lt;br /&gt;
&lt;br /&gt;
===kernel unpack===&lt;br /&gt;
&lt;br /&gt;
위의 관련파일 압축을 다운로드 받아서 해제하시면 여러개의 파일이 있습니다.&lt;br /&gt;
&lt;br /&gt;
그중 ez-x5_kernel_2.6.rar의 압축을 해제하셔서 그 안에 있는 linux-2.6.21.tar.gz 파일의 압축을 해제합니다&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
결과물인 linux-2.6.21 디렉토리를 $XBUILDSRC로 옮긴다음 linux라는 이름으로 심볼릭링크를 걸어줍니다. 이후 linux폴더로 들어가서 다음의 명령을 실행합니다. (물론 문제가 있는경우에는 make distclean.. 아시죠?)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
make ARCH=arm menuconfig &lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위의 과정을 진행한후 에러와 상관없이 include/linux/version.h 파일이 생겼는지를 확인합니다&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
파일이 생성되었는지를 확인하면 toolchain build을 하기위한 kernel 준비는 종료입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===binutils===&lt;br /&gt;
&lt;br /&gt;
소스 구해서 압축풀고 아래대로 진행해주시면 됩니다. 저도 자세한건 뭔뜻인지 잘....(먼산)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkdir buildx ; cd buildx &lt;br /&gt;
&lt;br /&gt;
../configure --host=x86_64-pc-linux-gnu --target=arm-unknown-linux-gnueabi --prefix=/mnt/compile/compile_source/embedded/ --enable-64-bit-bfd &lt;br /&gt;
&lt;br /&gt;
make ; make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이렇게 설치가 진행되면 binutils 준비는 끝이 납니다. 아마도 make install까지 하게되면 $XBUILDROOT에는 디음과같은 디렉토리들이 있을겁니다.&lt;br /&gt;
&lt;br /&gt;
* 이녀석과&lt;br /&gt;
** arm-unknown-linux-gnueabi&lt;br /&gt;
* 떨거지들&lt;br /&gt;
** include&lt;br /&gt;
** lib&lt;br /&gt;
** libexec&lt;br /&gt;
** bin&lt;br /&gt;
** info&lt;br /&gt;
** lib64&lt;br /&gt;
** man&lt;br /&gt;
** share&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
arm.. 으로 시작하는 디렉토리는 arm에서 실행가능한 바이너리들이 들어가고, 그외 디렉토리에는 HOST머신에서 실행가능한 cross compiler들이 들어갑니다. 이후 참고하시면 되겠습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===gcc bootstrap===&lt;br /&gt;
&lt;br /&gt;
gcc에서 bootstrap이라는것은 gentoo의 그것과 기본적인 의미가 같습니다. 이 이후의 작업을 준비하기 위해서 가장 기본적인 compiler를 준비하는 과정입니다. 여기서 준비되는 gcc는 오직 c compiler하나밖에 없습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bootstrap compiler는 다음과 같은 과정으로 준비합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# gcc의 source를 unpack합니다.&lt;br /&gt;
# 그리고 소스 압축을 해제한 디렉토리로 이동합니다.&lt;br /&gt;
# 아래의 명령을 실행시켜줍니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
perl -pi -e &amp;#039;s/^(TARGET_LIBGCC2_CFLAGS.*)/$1 -Dinhibit_libc -D__gthr_posix_h/&amp;#039; gcc/config/arm/t-linux &lt;br /&gt;
&lt;br /&gt;
echo &amp;#039;T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h&amp;#039; &amp;gt;&amp;gt; gcc/config/arm/t-linux &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그리고 첨부파일안에 있는 다음의 패치를 적용시켜줍니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cat ../gcc-4.4.x-use-embedded.patch | patch -p1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
패치의 적용이 무사이 끝났으면 아래의 명령어로설치를 진행하도록 합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkdir buildx ; cd buildx &lt;br /&gt;
&lt;br /&gt;
../configure --target=arm-unknown-linux-gnueabi --prefix=/mnt/compile/compile_source/embedded --disable-multilib --with-newlib --disable-nls --disable-threads --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c --disable-shared --with-float=soft --enable-cxx-flags=-msoft-float --without-headers --disable-libmudflap --disable-libssp --disable-libgomp &lt;br /&gt;
&lt;br /&gt;
make ; make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이렇게 gcc가 설치되되면 이미 path가 추가되어있을테니 간단하게 테스트를 해보도록 할까요?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
./arm-unknown-linux-gnueabi-gcc &lt;br /&gt;
arm-unknown-linux-gnueabi-gcc: no input files &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이렇게 나오면 glibc를 위한 bootstrap compiler의 준비가 끝나게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===arm glibc compile===&lt;br /&gt;
&lt;br /&gt;
지금부터는 target platform(이하 arm이라고 하겠습니다)을 위한 glibc compile을 진행해보도록 하겠습니다.&lt;br /&gt;
&lt;br /&gt;
일단 glibc소스를 준비합니다. 그리고 압축해제를 진행합니다. 아래의 내용대로 압축해제를 한후 관련된 디렉토리의 후처리를 진행하도록 합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mv glibc-ports-2.11.2 ./glibc-2.11.2 &lt;br /&gt;
&lt;br /&gt;
mv glibc-2.11.2/glibc-ports-2.11.2 glibc-2.11.2/ports &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
glibc의 소스가 풀려있는 디렉토리 내에서 patch를 진행하도록 합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd glibc-2.11.2 &lt;br /&gt;
cat ../6020_all_alpha-floor_ceil_fix.patch | patch -p0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
패치를 적용한후 Makeconfig에서 -lgcc_eh 라고 되어있는 문자열을 제거합니다. 아마도 2곳정도 될겁니다. 이건 glibc의 버전마다 틀린듯하니 참고해주세요.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkdir buildx ; cd buildx &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
glibc configure 를 진행하기전에 아래의 2줄을 console에서 진행합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;libc_cv_forced_unwind=yes&amp;quot; &amp;gt; config.cache &lt;br /&gt;
echo &amp;quot;libc_cv_c_cleanup=yes&amp;quot;    &amp;gt;&amp;gt; config.cache &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 glibc의 build 및 설치를 진행합니다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
../configure --prefix=/mnt/compile/compile_source/embedded/arm-unknown-linux-gnueabi/ --host=arm-unknown-linux-gnueabi --without-cvs --disable-profile --disable-debug --without-gd --enable-shared --enable-add-ons=ports,nptl --with-headers=/mnt/compile/compile_source/embedded/src/linux/include --with-tls --with-__thread  --disable-sanity-checks --cache-file=config.cache &lt;br /&gt;
&lt;br /&gt;
make ; make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
보시면 알겠지만 glibc는 그 자체로 무언가를 만들어내는게 아니기때문에 별도로 target이 지정되지 않습니다. 그리고 실제 arm에서 사용될것이기때문에 당연히 $XBUILDROOT/arm-unknown-linux-gnueabi/ 안쪽으로 내용들이 설치되게 됩니다.&lt;br /&gt;
&lt;br /&gt;
configure를 잡으실때는 --with-headers쪽을 잘 참고해주세요. Kernel source의 include디렉토리를 정확하게 지정해주셔야 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===target platform용 gcc cross compiler full build===&lt;br /&gt;
&lt;br /&gt;
위의 gcc가 c compiler만 있는 glibc를 위한 상태라면 지금 빌드하는것은 위에서 만들어진 glibc와 kernel source를 이용해서 실제 arm용 binary를 만들어낼 수 있는 compiler를 만드는 과정입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 과정에서 별도의 patch는 적용할 필요가 없습니다. (특정플랫폼용 버그가 있는경우는 예외가 되겠습니다만)&lt;br /&gt;
&lt;br /&gt;
gcc source의 압축을 해제합니다. 다만 위쪽에서 만든 gcc의 source와 섞일 수 있는 가능성이 있기때문에 bootstrap gcc 디렉토리의 이름을 다른이름으로 변경하도록 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
디렉토리 정리 및 압축해제가 끝나면 아래의 명령어로 gcc 빌드를 진행합니다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkdir buildx ; cd buildx &lt;br /&gt;
&lt;br /&gt;
../configure --target=arm-unknown-linux-gnueabi --prefix=/mnt/compile/compile_source/embedded/ --disable-nls --enable-__cxa_atexit --enable-languages=c,c++,fortran,objc --enable-c99 --enable-long-long --enable-shared --enable-multilib --with-float=soft --enable-cxx-flags=-msoft-float –with-headers=/mnt/compile/compile_source/embedded/src/linux/include/&lt;br /&gt;
&lt;br /&gt;
make ; make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이상으로 가장 기본적인 toolchain의 빌드가 종료되었습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===toolchain의 기본 테스트===&lt;br /&gt;
&lt;br /&gt;
제대로 toolchain이 빌드되었는지 확인하기위해서 다음의 명령어를 진행해 보도록 합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;int main() {return 0;}&amp;quot; &amp;gt; test.c &lt;br /&gt;
arm-unknown-linux-gnueabi-gcc test.c -o test.bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
test.bin이라는 파일이 나오면 성공입니다. 이 파일을 file이라는 명령어를 통해서 상태를 점검해보도록 하겠습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
file test.bin &lt;br /&gt;
test.bin: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
자! 이로서 intel에서는 실행될 수 없는 arm용 바이너리를 PC에서 만들 수 있었습니다. 이외에 더 진행해야될 부분들이 많겠습니다만... toolchain에 대한 기본적인 내용은 이것으로 준비가 되는 것이기 때문에 이 글은 여기서 마치도록 하겠습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==참고문서==&lt;br /&gt;
&lt;br /&gt;
* [Cross Compiler] ARM Toolchain 빌드하기 : added eabi[100914] http://soul-partita.com/blog/tc/partita/entry/Cross-Compiler-ARM-Toolchain-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B8%B0?category=22&amp;amp;TSSESSIONsoulpartitacomblogtc=75ca3af17fa64d7c5b51612f6e4c014a&lt;br /&gt;
&lt;br /&gt;
* Cross-compilation for gentoo linux : http://www.sable.mcgill.ca/~dbelan2/crossdev/crossdev-powerpc-i686.html&lt;br /&gt;
&lt;br /&gt;
* FA-linux 개발환경 구축 : http://www.falinux.com/win/02_config/010_XScaleToolChain/index.htm&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>