U-Boot 빌드하고 iMX233 기반 iMaker 보드에 설치하기

How to build U-Boot and install it to iMaker based on iMX233 ?

iMaker 개발 보드는 전원이 인가되면 iMaker 보드의 시스템을 초기화하고 SD 카드로부터 리눅스를 메모리로 로드하고 실행하는 부트로더의 역할을 하는 U-Boot가 필요합니다.

이 자료에서는 iMaker 보드를 위한 U-Boot 소스를 다운로드하고 컴파일한 후에 SD 카드에 인스톨하는 과정을 설명합니다.

U-Boot 란?

U-BootEmbedded linux device를 위한 부트로더 입니다.

부트로더는 시스템의 전원을 켰을 때 리눅스 커널이 부팅되기 전에 실행되어 하드웨어의 초기화 및 커널 로드와 같은 작업을 하고 최종적으로 리눅스 커널을 부팅시키는 작업을 합니다.

U-Boot 소스 가져오기

먼저 Ubuntu에서 터미널을 실행시키고 나서 아두눅스 github 사이트로부터 iMaker 개발 보드에 설치하기위해 빌드하려고 하는 U-Boot 소스를 가져옵니다.

U-Boot 소스는 다음과 같은 sh 명령어를 이용해서 다운로드합니다.

$ mkdir workspace
$ cd workspace
$ git clone https://github.com/Ardunux/Ardunux-iMaker-uboot-v2013.10.git
$ cd Ardunux-iMaker-uboot-v2013.10
$ git checkout v2013.10
$ git branch
  master
* v2013.10

U-Boot 빌드 작업을 위한 툴 확인

U-Boot 소스의 컴파일 작업과 SD 카드에 설치할 수 있는 이미지 파일로 변환해 주는 유틸리티의 확인 작업을 진행합니다.

$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/4.8.2/lto-wrapper
Target: arm-none-eabi
Configured with: ../gcc-4.8.2/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/lib/include' --mandir='/usr/lib/share/man' --infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var --libexecdir='/usr/lib/lib/gcc-arm-none-eabi' --disable-maintainer-mode --disable-dependency-tracking --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info --mandir=/usr/share/man --htmldir=/usr/share/doc/gcc-arm-none-eabi/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --with-system-zlib --enable-multilib --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-libstdc++-v3 --disable-nls --disable-shared --disable-threads --disable-tls --disable-plugin --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-none-eabi --with-gnu-as --with-gnu-ld --with-headers=no --without-newlib --with-pkgversion=4.8.2-14ubuntu1+6 --without-included-gettext --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r CFLAGS='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat' CPPFLAGS=-D_FORTIFY_SOURCE=2 CXXFLAGS='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat' FFLAGS='-g -O2' LDFLAGS=-Wl,-z,relro AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm OBJDUMP_FOR_TARGET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib READELF_FOR_TARGET=arm-none-eabi-readelf STRIP_FOR_TARGET=arm-none-eabi-strip
Thread model: single
gcc version 4.8.2 (4.8.2-14ubuntu1+6) 

$ elftosb -v
elftosb 2.6.1
Copyright (c) 2004-2010 Freescale Semiconductor, Inc.
All rights reserved.

arm-none-eabi-gcc 또는 elftosb 유틸리티가 설치되어 있지 않은 경우에는 Ubuntu에서의 패키지 설치 및 환경 준비 자료를 참고하여 패키지를 설치하실 수 있습니다.

U-Boot 빌드 작업

빌드 전 클린 작업:

$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- distclean

 

config 작업:

$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- mx23_imaker_config
Configuring for mx23_imaker board...

 

빌드 작업:

$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- u-boot.sb

...

elftosb -zf imx23 -c /home/imaker/workspace/Ardunux-iMaker-uboot-v2013.10/arch/arm/cpu/arm926ejs/mxs/u-boot-imx23.bd -o /home/imaker/workspace/Ardunux-iMaker-uboot-v2013.10/u-boot.sb
$ ls
api CREDITS fs mkconfig snapshot.commit u-boot.lds
arch disk include nand_spl spl u-boot.map
board doc lib net test u-boot.sb
boards.cfg drivers Licenses post tools
common dts MAKEALL README u-boot
config.mk examples Makefile rules.mk u-boot.bin

빌드 작업이 끝나고 “ls” 명령을 실행하면 “u-boot.sb” 이미지 파일이 생성된 것을 확인할 수 있습니다.

U-Boot 이미지 파일의 설치

사용중인 SD 카드를 카드리더에 꼽고 노트북이나 컴퓨터의 USB에 연결합니다.

이때 SD 카드가 인식되어 자동으로 마운트됩니다.

마운트 위치를 확인하고 빌드된 u-boot.sb 파일을 SD 카드에 설치하는 작업을 진행합니다.

mount 명령으로 SD 카드가 마우트된 디바이스 정보를 확인합니다.

$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
none on /sys/fs/pstore type pstore (rw)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=imaker)
/dev/sdb3 on /media/imaker/df31fc67-a2e6-4345-a68d-8cb275c2220c type ext4 (rw,nosuid,nodev,uhelper=udisks2)

18라인에서 “/dev/sdb3″가 마운트된 것을 확인할 수 있습니다.

따라서 U-Boot를 빌드한 디렉토리에서 다음 명령으로 U-Boot 이미지 파일을 설치하는 것이 가능합니다.

$ sudo dd if=u-boot.sb of=/dev/sdb1 bs=512 seek=4
$ sync
$ sudo unmount /dev/sdb

SD 카드에서 설치하는 작업이 끝나면 sync 명령을 한번 실행해주고 언마운트합니다.

이로서 U-Boot 부트로더를 빌드하고 SD 카드에 설치하는 모든 과정이 끝났습니다.

카드 리더에서 SD 카드를 꺼내서 iMaker 보드의 SD 카드 슬롯에 꼽고 전원을 넣어 주고 부팅 과정을 확인합니다.

U-Boot 이미지와 부팅 메시지의 날자 확인

U-Boot를 빌드하고 생성되는 u-boot.sb 파일과 부팅 메시지의 날자를 비교해서 정상적으로 SD 카드에 u-boot.sb 파일이 설치되었는지 확인 작업을 합니다.

U-Boot를 빌드하고 생성되는 u-boot.sb 파일의 생성 날자가 5월 11일 00시 16분이라고 표시 됩니다.

부팅 과정에 화면에 표시되는 날자가 2017년  5월 11일 00시 15분 32초라고 표시 됩니다.

빌드 날자와 부팅 메시지의 날자가 같은 것으로 확인 되어 정상적으로 U-Boot 부트로더가 설치되었다는 것을 알 수 있습니다.

관련 게시물

댓글 남기기