SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
부트로더
Hancheol Cho
● 어플리케이션/펌웨어가 실행되기전에 초기화하고 다운로드 기능
부트로더란?
STM BOOTLOADER
● STM MCU 내부에 기본 내장되어 있는 부트로더
○ BOOT 핀 상태로 부트로더 실행 모드 선택함
STM BOOTLOADER
FLASH 메모리 맵
● STM32F746의 FLASH 매모리 구성
FLASH 메모리 맵
● FLASH 메모리의 영역 할당
부트로더 실행
● 부트로더 실행을 위한 별도 버튼 할당
부트로더 실행
● 부팅 순서 정의
펌웨어 이미지 생성
● 부트로더에서 펌웨어 버전을 확인 할 수 있도록 특정 위치에 펌웨어 버전을
위치시킴
프로젝트
Build
펌웨어 버전
인터럽트 벡터
펌웨어 Binary
펌웨어 코드
0x08040000
0x08040800
0x08041000
FLASH
펌웨어 이미지 생성
● 프로젝트 빌드 후에 생성된 펌웨어 Binary에 대한 정보를 Tag정보로 Flash에
저장
○ Tag는 펌웨어 Binary의 유효성 검증용
펌웨어
Binary
프로젝트
Build
펌웨어
Binary
Tag
다운로드 프로그램
Tag
펌웨어
Binary
펌웨어 Tag 구성
펌웨어
Binary
Tag
● 펌웨어 Tag에는 펌웨어 유효성을 검증할 수 있는 데이터가 포함
○ 펌웨어 위치 및 크기와 CRC 데이터를 이용하여 검증 함
Tag를 포함한 Memory Map
Firmware
Tag 32KB
736KB
메모리 정의
● hw_def.h 에 메모리 주소 정의
통신 프로토콜
● 시리얼 통신 프로토콜 정의 - 송신 패킷
STX Cmd Error LENGTH_L LENGTH_H Data[0] ... Data[n] CheckSum ETX
0x02
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
CheckSum 0x03
● 시리얼 통신 프로토콜 정의 - 수신 패킷
STX Cmd Option LENGTH_L LENGTH_H Data[0] ... Data[n] CheckSum ETX
0x02
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
0x00
~
0xFF
CheckSum 0x03
프로토콜 데이터 수신 처리
CMD_STATE_WAIT_STX
CMD_STATE_WAIT_CMD
CMD_STATE_WAIT_LENGTH_L
CMD_STATE_WAIT_LENGTH_H
CMD_STATE_WAIT_DATA
CMD_STATE_WAIT_CHECKSUM
CMD_STATE_WAIT_ETX
데이터 송/수신 타임아웃
Host Slave
STX
CMD_STATE_WAIT_STX
CMD_STATE_WAIT_CMD
CMD
CMD_STATE_WAIT_CMD
CMD_STATE_WAIT_STX
Timeout 발생
● Host->Slave로 전송하는 바이트 사이의 타임아웃 발생 처리
데이터 송/수신 타임아웃
Host Slave
명령 송신
Timeout 발생
● Host->Slave로 전송하는 명령어 패킷에 대한 응답 타임아웃 발생 처리
응답 송신
명령 재송신
응답 송신
명령어 구성
● 부트로더를 위한 명령어
명령어 처리 순서
● cmdReceivePacket함수에서 통신 프로토콜 분석 후 정상 패킷 수신
● 수신된 패킷의 명령어에 따라 해당 함수를 수행함
cmdReceivePacket()
bootProcessCmd()
펌웨어 다운로드 순서
Host Slave
명령 송신
응답 송신
ReadVersion
버전 정보 송부
ReadBoardName
보드 이름 송부
FlashEraseFw
펌웨어 영역을 지움
펌웨어 다운로드 순서
Host Slave
명령 송신
응답 송신
FlashWriteFw
수신된 데이터 만큼
Flash에 저장
FlashWriteTag
FlashVerifyFw Flash에 저장된 펌웨어여여의
Check Sum을 구하고 Tag의
Check Sum과 비교
Tag 정보 Flash에 저장
JumpToFw
펌웨어를 실행함

Mais conteúdo relacionado

Mais procurados

[드론] 펌웨어 분석 [2015.5.23]
[드론] 펌웨어 분석 [2015.5.23][드론] 펌웨어 분석 [2015.5.23]
[드론] 펌웨어 분석 [2015.5.23]chcbaram
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot) Omkar Rane
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequenceHoucheng Lin
 
LCU13: An Introduction to ARM Trusted Firmware
LCU13: An Introduction to ARM Trusted FirmwareLCU13: An Introduction to ARM Trusted Firmware
LCU13: An Introduction to ARM Trusted FirmwareLinaro
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoCMacpaul Lin
 
Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)Macpaul Lin
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料一路 川染
 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoSherif Mousa
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみたwata2ki
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal BootloaderSatpal Parmar
 
Trusted firmware deep_dive_v1.0_
Trusted firmware deep_dive_v1.0_Trusted firmware deep_dive_v1.0_
Trusted firmware deep_dive_v1.0_Linaro
 
from Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu Worksfrom Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu WorksZhen Wei
 
linux device driver
linux device driverlinux device driver
linux device driverRahul Batra
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation Jiann-Fuh Liaw
 

Mais procurados (20)

[드론] 펌웨어 분석 [2015.5.23]
[드론] 펌웨어 분석 [2015.5.23][드론] 펌웨어 분석 [2015.5.23]
[드론] 펌웨어 분석 [2015.5.23]
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot)
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
 
LCU13: An Introduction to ARM Trusted Firmware
LCU13: An Introduction to ARM Trusted FirmwareLCU13: An Introduction to ARM Trusted Firmware
LCU13: An Introduction to ARM Trusted Firmware
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to Yocto
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみた
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
Trusted firmware deep_dive_v1.0_
Trusted firmware deep_dive_v1.0_Trusted firmware deep_dive_v1.0_
Trusted firmware deep_dive_v1.0_
 
Programming guide for linux usb device drivers
Programming guide for linux usb device driversProgramming guide for linux usb device drivers
Programming guide for linux usb device drivers
 
from Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu Worksfrom Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu Works
 
Linux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platformLinux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platform
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
linux device driver
linux device driverlinux device driver
linux device driver
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation
 
A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
 

Semelhante a 강좌 06 부트로더

How to install printer driver into the PC
How to install printer driver into the PC How to install printer driver into the PC
How to install printer driver into the PC samil copy
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debuggerINSIGHT FORENSIC
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드수정 김
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝Byunghyun Ban
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
SkyRover Firmware
SkyRover FirmwareSkyRover Firmware
SkyRover Firmwarechcbaram
 

Semelhante a 강좌 06 부트로더 (8)

How to install printer driver into the PC
How to install printer driver into the PC How to install printer driver into the PC
How to install printer driver into the PC
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
SkyRover Firmware
SkyRover FirmwareSkyRover Firmware
SkyRover Firmware
 

강좌 06 부트로더