- 1 - 부트로더 bootloader. - 2 - huins. r&d center bootloader bootloader 부트로더...
TRANSCRIPT
- 1 -
부트로더Bootloader
- 2 -Huins. R&D Center
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
- 3 -Huins. R&D Center
Bootloader
기존 설정 초기화
컴파일
컴파일 완료
…(중간생략 )…CROSS_COMPILE = /opt/toolchains/arm-2009q1/bin/arm-none-linux-gnueabi-
# make distclean
# make
3
- 4 -Huins. R&D Center
Bootloader
Achro-4210 부트로더 퓨징 microSD 메모리의 raw 영역이 지워진 상태에서 부트로더를 퓨징하는 방법
생성된 BL1(u-boot.bin.crc) 를 MicroSD 에 기록
BL2(u-boot.bin) 을 MicroSD 에 기록
# mkbl1 u-boot.bin u-boot.bin.crc 16392
# dd if=u-boot.bin.crc of=/dev/sdb bs=1 seek=512 count=16384
4
# dd if=u-boot.bin of=/dev/sdb bs=1 seek=16896# sync
BL0 (iROM)BL1
(u-boot 의 상위 16K)
BL2 (u-boot.bin)
MicroSD 의 RAW 영역에 위치 CPU 내부에 위치OM
- 5 -Huins. R&D Center
Bootloader
SD 메모리 초기화
5
FLASH
RAW AREA
최소요구 사항
- 6 -Huins. R&D Center
Bootloader
ACHRO4210 의 Fusing 방법 - DNW
6
FLASH SDRAM
BL2
BL2
MINICOM> DNW 0x4000… Bootloader 컴파일
Kernel 컴파일
Kernel, Bootloader 를/tftpboot 디렉터리로 복사
smdk-usbdl 을 이용하여Usb 를 이용 데이터 전송TERMINAL
# smdk-usbdl –f ..
호스트의 USB 와 타깃의 USB OTG가 연결되어야 함 .
ReceiveData
raw area
Target Board Host Linux
relocate
- 7 -Huins. R&D Center
Bootloader
ACHRO4210 의 Fusing 방법 - TFTP
7
FLASH SDRAM
BL2
BL2
MINICOM> TFTP … Bootloader 컴파일
Kernel 컴파일
Kernel, Bootloader 를/tftpboot 디렉터리로 복사
Xinet Demon..Service tftpd
호스트에는 tftpd가 구동 , 네트워크로 연결되어야 함Receive
Dataraw area
Target Board Host Linux
relocate
- 8 -Huins. R&D Center
Bootloader
부트로더 기록 미니컴 실행
시리얼과 USB OTG 케이블 연결
# minicom
8
- 9 -Huins. R&D Center
Bootloader
보드 전원 인가 카운트가 0 이 되기 전에 키보드의 아무키나 눌러 부트로더 상태로 진입 dnw 를 이용하여 호스트의 u-boot.bin 을 다운로드할 준비
# dnw 0x40008000
9
- 10 -Huins. R&D Center
Bootloader
보드로 부트로더 바이너리 전송 부트로더 소스 디렉터리가 아니라면 부트로더 소스 디렉터리로 이동
dnw 를 이용하여 호스트의 u-boot.bin 을 다운로드할 준비
데이터 전송 확인
# cd /work/achro4210/u-boot-120516
# smdk-usbdl -f u-boot.bin
10
- 11 -Huins. R&D Center
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
- 12 -Huins. R&D Center
Bootloader
부트로더 명령 메모리 관련 명령
cp
md
achro4210 # help cpcp - memory copyUsage: cp [.b, .w, .l] source target countachro4210 # cp 40008000 40008100 100
achro4210 # help md md - memory display Usage: md [.b, .w, .l] address [# of objects] achro4210 # md 4000800040008000: 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
- 13 -Huins. R&D Center
Bootloader
mm
mw
achro4210 # help mm mm - memory modify (auto-incrementing address) Usage: mm [.b, .w, .l] address achro4210 # mm 4000800040008000: 00002000 ? 1111222240008000: 00000000 ? 3333444440008000: 00000000 ? q (mm 명령을 종료할 때는 16 진수가 아닌 값을 됨 )
achro4210 # help mw mw - memory write (fill) Usage: mw [.b, .w, .l] address value [count] achro4210 # mw 40008000 00002000achro4210 # md 40008000 440008000: 00002000 33334444 00000000 00000000 . ..DD33........
13
- 14 -Huins. R&D Center
Bootloader
microSD Command microSD(NAND) 관련 명령
movi init : SD 정보 출력
achro4210 # help movimovi init - Initialize moviNAND and show card infomovi read {u-boot | kernel} {addr} - Read data from sd/mmcmovi write {fwbl1 | u-boot | kernel} {addr} - Write data to sd/mmcmovi read rootfs {addr} [bytes(hex)] - Read rootfs data from sd/mmc by sizemovi write rootfs {addr} [bytes(hex)] - Write rootfs data to sd/mmc by sizemovi 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"
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
- 15 -Huins. R&D Center
Bootloader
movi read {u-boot | kernel} { addr}SD 의 u-boot, kernel 이미지를 읽어 SDRAM 번지에 로드
movi read rootfs {addr} [bytes(hex)]
movi write {u-boot | kernel} {addr}memoy 의 u-boot, kernel 데이터를 읽어 SD 에 기록
achro4210 # movi read u-boot 40008000reading bootloader.. 49, 1024 MMC read: dev # 0, block # 49, count 1024 ...1024 blocks read: OKcompletedachro4210 # movi read kernel 40008000reading kernel.. 1073, 8192 MMC read: dev # 0, block # 1073, count 8192 ...8192 blocks read: OKcompleted
achro4210 # movI read rootfs 40008000 100000reading RFS.. 9265, 2048 MMC read: dev # 0, block # 9265, count 2048 ...2048 blocks read: OKcompleted
achro4210 # movi read u-boot 40008000reading bootloader.. 49, 1024 MMC read: dev # 0, block # 49, count 1024 ...1024 blocks read: OKcompletedachro4210 # movi read kernel 40008000reading kernel.. 1073, 8192 MMC read: dev # 0, block # 1073, count 8192 ...8192 blocks read: OKcompleted
15
- 16 -Huins. R&D Center
Bootloader
movi write rootfs {addr} [bytes(hex)]
achro4210 # movi write rootfs 40008000 100000writing RFS.. 9265, 2048 MMC write: dev # 0, block # 9265, count 2048 ... 2048 blocks written: OKcompleted
16