# 출처 : http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidx&kind=52&bid=1329
# toolchain 다운로드기
http://www.mentor.com/ 에 가입(가입해야 툴체인 다운로드 가능)
로그인후 https://sourcery.mentor.com/GNUToolchain/release1294?lite=arm 에서 IA32 GNU/Linux TAR 또는 IA32 GNU/Linux Installer 다운로드
# toolchain 설치
하드커널에서 본 어떤 페이지에서 진저브레드 이후는 64bit OS에서 컴파일 해야 된다는걸 얼핏봐서, 우분투 64bit 를 설치했었습니다. 64bit 환경에서는 32bit 라이브러리가 없어 툴체인이 작동을 제대로 안하거나 설치가 안되니 32bit 라이브러리를 설치해줘야 합니다. OS를 32bit 로 설치하신경우는 상관 없을듯합니다.
-IA32 GNU/Linux Installer 를 이용해 설치하는경우 아래와 같은 에러 메세지가 뜹니다.
-----------------------------------------------------------------------------------------
Error: Missing 32-bit libraries on 64-bit Linux host
Your 64-bit Linux host is missing the 32-bit libraries
required to install and use Sourcery G++.
Please follow this Knowledge Base entry to install the
required 32-bit libraries:
https://support.codesourcery.com/GNUToolchain/kbentry62
Once you have installed the 32-bit libraries, please restart
the installer.
-----------------------------------------------------------------------------------------
-IA32 GNU/Linux TAR 를 이용해 압축을 풀어 설치한 경우는 arm-none-eabi-gcc 파일을 실행하면 그런 파일을 찾을수 없다는 에러가 뜹니다. 분명 경로지정이 제대로 되있는데도 불구하고 실행하면 파일을 찾을수 없다는 에러만 계속 뜸
# 32bit 라이브러리 설치(우분투가 64bit인 경우만)
sudo apt-get install ia32-libs
# toolchain 설치 & path 추가
- IA32 GNU/Linux Installer 로 설치하는경우
sudo chmod a+x arm-2010q1-188-arm-none-eabi.bin
sudo dpkg-reconfigure -plow dash
./arm-2010q1-188-arm-none-eabi.bin
GUI 설치화면이 뜹니다.
- IA32 GNU/Linux TAR 경우는 원하는곳에 압출을 풀기만 하면됩니다.
- path 추가(경로는 자신이 툴체인 설치한곳의 bin 디렉토리를 지정)
cat >> ~/.bashrc <<EOF
export ARCH=arm
export CROSS_COMPILE=arm-none-eabi-
PATH=$PATH:/home/odroid/CodeSourcery/Sourcery_G++_Lite/bin;
EOF
- path 갱신(갱신을 해줘야 바로 path가 적용됨)
source ~/.bashrc
# u-boot 빌드 전 p4412_s_fwbl1.bin , p4412_s_tzsw.bin 백업(uboot/sd_fuse/ 에 있음, make distclean 하면 사라짐)
# 빌드
make distclean
make smdk4412_config
make
# bl2 생성
./mkbl2 u-boot.bin bl2.bin 14336
# 부트로더 SD메모리에 기록(기록 하기 전에 아까 백업한 p4412_s_fwbl1.bin , p4412_s_tzsw.bin 두개 파일을 sd_fuse 디렉토리로 다시 복사해주세요.), /dev/sdb 는 자신의 SD리더에 맞는 장치파일을 적어주시면됩니다.
cd sd_fuse
./sd_fusing_4412.sh /dev/sdb
-------------------------SD에 기록하는 모습--------------------
Exynos4412 BL1 fusing
[sudo] password for odroid:
32+0 records in
32+0 records out
16384 bytes (16 kB) copied, 0.0992948 s, 165 kB/s
16+0 records in
16+0 records out
8192 bytes (8.2 kB) copied, 0.0929718 s, 88.1 kB/s
Exynos4412 BL2 fusing
28+0 records in
28+0 records out
14336 bytes (14 kB) copied, 0.127858 s, 112 kB/s
Exynos4412 bootloader fusing
541+1 records in
541+1 records out
277128 bytes (277 kB) copied, 1.68265 s, 165 kB/s
Exynos4412 tzsw fusing
320+0 records in
320+0 records out
163840 bytes (164 kB) copied, 1.04169 s, 157 kB/s
U-boot image is fused successfully.
Eject SD card and insert it again.
----------------------------------------------------------------
다른 장치들은 bl1 기록하고 바로 그다음에 u-boot를 기록하고 끝나는데 특이하게 Exynos4412용 스크립트는
1.부트섹터 초기화
2.p4412_s_fwbl1.bin -> bl1
3.bl2.bin -> bl2
4.u-boot.bin -> u-boot
5.p4412_s_tzsw.bin -> tzsw(일종의 키파일인거 같습니다)
순으로 SD메모리에 기록합니다.
sd_fusing_4412.sh 라는 스크립트를 통해 SD메모리에 기록할때 p4412_s_fwbl1.bin , p4412_s_tzsw.bin 는 sd_fuze 디렉토리에 위치하고 u-boot.bin과 bl2.bin은 그 상위디렉토리에 파일이 있는걸로 경로를 참조합니다. bl2.bin과 u-boot.bin을 sd_fuze 디렉토리로 복사안하셔도됩니다.
# 우분투 64bit 환경에서 위와 같이 빌드하고 u-boot만 SD메모리에 기록한 상태로 minicom에서 정상적으로 u-boot 작동하는거 확인했습니다.