Transcript Document

Bootloader
부트로더
-1-
Bootloader
 Bootloader

부트로더
 사용가능한 하드웨어를 초기화
 시스템 구성을 위한 하드웨어 제어 명령

부트로더 존재의 이유
 PC와 달리 CMOS를 이용할 수 없는 특수한 환경

Achro-4210 부트로더 소스 위치
[Achro4210 Disc]/bootloader/u-boot-yymmdd.tar.gz

부트로더 컴파일
 소스 준비
# mkdir /work
# mkdir /work/achro4210
# cd /work/achro4210
# cp –a /media/[Achro4210 Disc]/bootloader/u-boot-120516.tar.gz /work/achro4210
# tar zxvf u-boot-120516.tar.gz
# cd u-boot-120516
 크로스 컴파일러 설정
# vim Makefile
-2-
Huins. R&D Center
2
Bootloader
…(중간생략)…
CROSS_COMPILE = /opt/toolchains/arm-2009q1/bin/arm-none-linux-gnueabi-
 기존 설정 초기화
# make distclean
 컴파일
# make
 컴파일 완료
-3-
Huins. R&D Center
3
Bootloader
 Achro-4210 부트로더 퓨징
microSD메모리의 raw 영역이 지워진 상태에서 부트로더를 퓨징하는 방법
# mkbl1 u-boot.bin u-boot.bin.crc 16392
 생성된 BL1(u-boot.bin.crc)를 MicroSD에 기록
# dd if=u-boot.bin.crc of=/dev/sdb bs=1 seek=512 count=16384
 BL2(u-boot.bin)을 MicroSD에 기록
# dd if=u-boot.bin of=/dev/sdb bs=1 seek=16896
# sync
OM
CPU 내부에 위치
MicroSD의 RAW 영역에 위치
BL1
(u-boot 의 상위
16K)
BL0 (iROM)
-4-
Huins. R&D Center
BL2
(u-boot.bin)
4
Bootloader
 SD메모리 초기화
FLASH
RAW AREA
최소요구 사항
-5-
Huins. R&D Center
5
Bootloader
 ACHRO4210의 Fusing 방법 - DNW
Host Linux
Target Board
FLASH
SDRAM
MINICOM
> DNW 0x4000…
Bootloader 컴파일
Kernel 컴파일
호스트의 USB와
타깃의 USB OTG
가 연결되어야 함.
Kernel, Bootloader를
/tftpboot 디렉터리로 복사
BL2
relocate
raw area
BL2
Receive
Data
TERMINAL
# smdk-usbdl –f ..
-6-
Huins. R&D Center
smdk-usbdl을 이용하여
Usb를 이용 데이터 전송
6
Bootloader
 ACHRO4210의 Fusing 방법 - TFTP
Host Linux
Target Board
FLASH
SDRAM
MINICOM
> TFTP …
Bootloader 컴파일
Kernel 컴파일
BL2
relocate
raw area
BL2
호스트에는 tftpd
가 구동, 네트워크
로 연결되어야 함
Kernel, Bootloader를
/tftpboot 디렉터리로 복사
Receive
Data
Xinet Demon..
Service tftpd
-7-
Huins. R&D Center
7
Bootloader

부트로더 기록
 미니컴 실행
# minicom
 시리얼과 USB OTG케이블 연결
-8-
Huins. R&D Center
8
Bootloader
 보드 전원 인가


카운트가 0이 되기 전에 키보드의 아무키나 눌러 부트로더 상태로 진입
dnw 를 이용하여 호스트의 u-boot.bin을 다운로드할 준비
# dnw 0x40008000
-9-
Huins. R&D Center
9
Bootloader
 보드로 부트로더 바이너리 전송

부트로더 소스 디렉터리가 아니라면 부트로더 소스 디렉터리로 이동
# cd /work/achro4210/u-boot-120516

dnw 를 이용하여 호스트의 u-boot.bin을 다운로드할 준비
# smdk-usbdl -f u-boot.bin

데이터 전송 확인
- 10 -
Huins. R&D Center
10
Bootloader
 플래시 기록

메모리 영역(0x40008000)에 있는 이미지를 microSD로 기록
# movi write u-boot 0x40008000
 부트로더 명령

도움말
achro4210 # help

개발보드 정보 출력
achro4210 # bdinfo
arch_number = 0x00000B16
env_t = 0x00000000
boot_params = 0x40000100
DRAM bank = 0x00000000
-> start = 0x40000000
-> size = 0x10000000
ethaddr = 00:40:5C:26:0A:5B
ip_addr = 192.168.1.121
baudrate = 115200 bps
- 11 -
Huins. R&D Center
11
Bootloader
 부트로더 명령

메모리 관련 명령
 cp
achro4210 # help cp
cp - memory copy
Usage:
cp [.b, .w, .l] source target count
achro4210 # cp 40008000 40008100 100
 md
achro4210 # help md
md - memory display
Usage:
md [.b, .w, .l] address [# of objects]
achro4210 # md 40008000
40008000: 00002000 00000000 00000000 00000000 . ..............
40008000: ea000013 e59ff014 e59ff014 e59ff014 ................
40008000: e59ff014 e59ff014 e59ff014 e59ff014 ................
40008000: 2fe001e0 2fe00240 2fe002a0 2fe00300 .../@../.../.../
40008000: 2fe00360 2fe003c0 2fe00420 12345678 `../.../ ../xV4.
(이하 생략)
- 12 -
Huins. R&D Center
12
Bootloader
 mm
achro4210 # help mm
mm - memory modify (auto-incrementing address)
Usage:
mm [.b, .w, .l] address
achro4210 # mm 40008000
40008000: 00002000 ? 11112222
40008000: 00000000 ? 33334444
40008000: 00000000 ? q (mm 명령을 종료할 때는 16진수가 아닌 값을 됨)
 mw
achro4210 # help mw
mw - memory write (fill)
Usage:
mw [.b, .w, .l] address value [count]
achro4210 # mw 40008000 00002000
achro4210 # md 40008000 4
40008000: 00002000 33334444 00000000 00000000 . ..DD33........
- 13 -
Huins. R&D Center
13
Bootloader

microSD Command
 microSD(NAND) 관련 명령
achro4210 # help movi
movi init - Initialize moviNAND and show card info
movi read {u-boot | kernel} {addr} - Read data from sd/mmc
movi write {fwbl1 | u-boot | kernel} {addr} - Write data to sd/mmc
movi read rootfs {addr} [bytes(hex)] - Read rootfs data from sd/mmc by size
movi write rootfs {addr} [bytes(hex)] - Write rootfs data to sd/mmc by size
movi read {sector#} {bytes(hex)} {addr} - instead of this, you can use "mmc read"
movi write {sector#} {bytes(hex)} {addr} - instead of this, you can use "mmc write"
 movi init : SD 정보 출력
achro4210 # movi init
Device: S3C_HSMMC2
Manufacturer ID: 1b
OEM: 534d
Name: 00000
Tran Speed: 0
Rd Block Len: 512
SD version 2.0
High Capacity: No
Size: 1910MB (block: 3911680)
Bus Width: 2-bit
- 14 -
Huins. R&D Center
14
Bootloader
 movi read {u-boot | kernel} { addr}
SD의 u-boot, kernel 이미지를 읽어 SDRAM 번지에 로드
achro4210 # movi read u-boot 40008000
reading bootloader.. 49, 1024
MMC read: dev # 0, block # 49, count 1024 ...1024 blocks read: OK
completed
achro4210 # movi read kernel 40008000
reading kernel.. 1073, 8192
MMC read: dev # 0, block # 1073, count 8192 ...8192 blocks read: OK
completed
 movi read rootfs {addr} [bytes(hex)]
achro4210 # movI read rootfs 40008000 100000
reading RFS.. 9265, 2048
MMC read: dev # 0, block # 9265, count 2048 ...2048 blocks read: OK
completed
 movi write {u-boot | kernel} {addr}
memoy의 u-boot, kernel 데이터를 읽어 SD에 기록
achro4210 # movi read u-boot 40008000
reading bootloader.. 49, 1024
MMC read: dev # 0, block # 49, count 1024 ...1024 blocks read: OK
completed
achro4210 # movi read kernel 40008000
reading kernel.. 1073, 8192
MMC read: dev # 0, block # 1073, count 8192 ...8192 blocks read: OK
completed
- 15 -
Huins. R&D Center
15
Bootloader
 movi write rootfs {addr} [bytes(hex)]
achro4210 # movi write rootfs 40008000 100000
writing RFS.. 9265, 2048
MMC write: dev # 0, block # 9265, count 2048 ... 2048 blocks written: OK
completed
- 16 -
Huins. R&D Center
16