임베디드 시스템 개발

- PC랑 달리 용도가 정해지고, 가격, 전력을 고려해서 HW와 SW를 제한해야 함.

- 호스트 PC에서 타겟 디바이스에 맞게 컴파일 후 올려서 동작 시킨다

- Host PC에서 하는 일 : 개발 툴(교차 컴파일러, 디버거 등), 시뮬레이션을 위한 타겟 장치 시뮬레이터 등

- 부트로더 개발 : 타겟 장치에 전원 인가시 부팅 롬에서 가장 먼저 실행. HW 초기화, 커널 로딩, JTAG 인터페이스로 설치

- 커널과 파일 시스템 : 호스트 PC의 개발 환경에서 만듬, 이미지 형태로 부트롬이나 다른 곳에 저장. 

- 임베디드 응용프로그램 : 커널과 파일 시스템위에서 동작.

 

 

 

부트로더

- HW 초기화, OS 커널 메모리로 로드하는 펌웨어

- LILO Linux LOader : 특정 파일시스템에 의존 x, 최대 16개 이미지 시동시 선택 가능, MBR이나 파티션 부트섹터에 위치

- GRUB GNU GRUB : GNU의 부트로더, 동적으로 커널 인자 조정 가능, 다양한 실행 파일 지원, 명령줄 인터페이스 제공

- BLOB BootLoader OBject : 선택 부팅 가능, MBR에서 동작하는 다른 부트로더와는 달리 플레시 메모리 0블록에서 동작

- U-BootUniversal Bootloader : PPC와 ARM 기반의 임베디드 부트로더, ARM, x86, MIPS 등 CPU 지원, 오픈소스

- NTLDR NT Loader : 윈도우 NT 시동 부트로더, 하드디스크 이외의 USB 플래시 드라이브 등 휴대용 장치서도 실행 가능

 

 

 

U-Boot Universal Bootloader

- 다양한 시스템에서 사용가능한 부트로더로 시리얼, 네트워크, USB, Flash 등 지원

- 다양한 아키텍처와 디바이스를 지원하므로 타겟 보드에 맞게 포팅 필요

- 동작 흐름 : Start.s 시작

   * Start.s : CPU 초기화(인터럽트 마스크, 클럭 설정), DRAM 초기화, 플래시 메모리 코드를 DRAM으로 다른 초기화작업

 

https://julrams.tistory.com/category/System%20Programming/Tips?page=4

 

U-boot 구성

- /api : API 코드, 예제

- /arch : 아키텍처 별 code, lib, 시작코드 start.S

- /common : 아키텍처에 독립적인 파일과 명령어

- /drivers : 외부 장치 드라이버들

- /fs : uboot의 파일 시스템 관련

- /include : 헤더  파일

- /net : network 관련

- build.sh : 빌드 스크립트

- Makefile : 빌드 설정 Makefile

ref : https://kergoo.wordpress.com/2017/04/09/u-boot-porting-guide/

 

 

+ Recent posts