Bootloader 부트로더
Bootloader Bootloader 부트로더 부트로더 존재의 이유 Achro-4210 부트로더 소스 위치 부트로더 컴파일 사용가능한 하드웨어를 초기화 시스템 구성을 위한 하드웨어 제어 명령 부트로더 존재의 이유 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
Bootloader 기존 설정 초기화 컴파일 컴파일 완료 …(중간생략)… CROSS_COMPILE = /opt/toolchains/arm-2009q1/bin/arm-none-linux-gnueabi- # make distclean # make
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 # dd if=u-boot.bin of=/dev/sdb bs=1 seek=16896 # sync OM CPU 내부에 위치 MicroSD의 RAW 영역에 위치 BL0 (iROM) BL1 (u-boot 의 상위 16K) BL2 (u-boot.bin)
Bootloader SD메모리 초기화 FLASH RAW AREA 최소요구 사항
Bootloader ACHRO4210의 Fusing 방법 - DNW Host Linux Target Board MINICOM > DNW 0x4000… FLASH Bootloader 컴파일 Kernel 컴파일 SDRAM BL2 relocate 호스트의 USB와 타깃의 USB OTG 가 연결되어야 함. Kernel, Bootloader를 /tftpboot 디렉터리로 복사 Receive Data smdk-usbdl을 이용하여 Usb를 이용 데이터 전송 raw area TERMINAL # smdk-usbdl –f .. BL2
Bootloader ACHRO4210의 Fusing 방법 - TFTP Host Linux Target Board MINICOM FLASH Bootloader 컴파일 Kernel 컴파일 SDRAM BL2 relocate 호스트에는 tftpd 가 구동, 네트워크 로 연결되어야 함 Kernel, Bootloader를 /tftpboot 디렉터리로 복사 Receive Data raw area Xinet Demon.. Service tftpd BL2
Bootloader 부트로더 기록 미니컴 실행 시리얼과 USB OTG케이블 연결 # minicom
Bootloader # dnw 0x40008000 보드 전원 인가 카운트가 0이 되기 전에 키보드의 아무키나 눌러 부트로더 상태로 진입 dnw 를 이용하여 호스트의 u-boot.bin을 다운로드할 준비 # dnw 0x40008000
Bootloader # cd /work/achro4210/u-boot-120516 보드로 부트로더 바이너리 전송 부트로더 소스 디렉터리가 아니라면 부트로더 소스 디렉터리로 이동 dnw 를 이용하여 호스트의 u-boot.bin을 다운로드할 준비 데이터 전송 확인 # cd /work/achro4210/u-boot-120516 # smdk-usbdl -f u-boot.bin
Bootloader 부트로더 명령 도움말 개발보드 정보 출력 # movi write u-boot 0x40008000 플래시 기록 메모리 영역(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
Bootloader 부트로더 명령 메모리 관련 명령 cp md achro4210 # help cp cp - memory copy Usage: cp [.b, .w, .l] source target count achro4210 # cp 40008000 40008100 100 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. (이하 생략)
Bootloader mm mw 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진수가 아닌 값을 됨) 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........
Bootloader microSD Command microSD(NAND) 관련 명령 movi init : SD 정보 출력 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" 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
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 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 achro4210 # movI read rootfs 40008000 100000 reading RFS.. 9265, 2048 MMC read: dev # 0, block # 9265, count 2048 ...2048 blocks read: OK completed 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
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