728x90

펌웨어 구조 설계하기

부트로더 기능 분류와 공통요소 추출 방법

- 유부트 기본으로 이해하면 쉽게 이해 가능

- 유 부트 디렉토리 구조는 리눅스 디렉토리 구조와유사

 

부트로더 디렉토리 구조

- 타겟에 맞게 수정해야함

- 최상위 유부트 : makefile, board.cfg 등 주요 파일로 모든 유부트 빌드 동작 실행

- arch : 아키텍처별로 서로다른 디렉토리를 구성, 각 프로세서 아키텍처에 따른 소스 구성하는 디렉토리

- board : 각 제조사별 보드 관련 소스를 구현하는 디렉토리

- common : 유부트에서 공통으로 사용하는 소스 구현한 디렉토리, 유부트 명령어, 환경변수등 소스 구현

- driver : gpio, i2c, pci, serial, sound, usb와 같이 외부장치의 드라이버 소스 제공

- fs : fat, yaffs2와 같이 u

 

 

개발 보드에 대한 환결설정 내용은?

라즈베리 파이의 경우

- 기본 환경 설정을 defconfig 파일로 제공 -> 원하는 설정 변경 가능

 

 

 

단위 sw 모듈 설계하기

오픈소스 부터로더에 기능 수정이나 추가 방법

- 원하는 기능에따라 수정 부분, 추가 부분이 상황에 따라 다름

 

 

특정 하드웨어 개발하는 경우

- 수정을 위한 하드웨어 동작 관련 디렉토리 위주로 보면

- 라즈베리파이는 브로드컴사의 bcm.

u-boot root directory

 

 

아키텍처 디렉토리와 소스

- 이에 대해 알아야함

- 아크 디렉토리의 암에 대해 살펴보자

arch directory

 

타겟보드 디렉토리

- 타겟에 따라 다르지만 공통적으로 가지는 걸보자

- 보드 디렉토리 > 제조사 디렉토리 > 보드명 디렉토리

target board directory

부트로더 명령어는 어디에?

- uboot 디렉토리 > cmd 디렉토리 > 부트로더 명령어

- 새 명령어 추가시 cmd 디렉토리에 추가

cmd 디렉토리

 

부트로더에서 하드웨어 제어 방법

1. 디바이스들의 물리적 주소로 직접 접근하여 제어

 - 물리적 주소를 알아야함 -> SoC에 대한 데이터 시트 참고

2. 부트로더에서 제공하는 함수들을 이용하여 제어

 - 어떤 함수가 있는지 알아야함

 

cmd 디렉토리서 hello.c 작성

- do_hello 함수 

- U_BOOT_CMD 정의하여 hello 가 입력시 do_hello 함수 호출하도록 정의

kconfig 파일 수정

- 메뉴 컨피그에서 사용여부 고를수 있도록 설정

 

 

makefile 수정

- 메뉴컨피그에서 사용 설정시 빌드 과정에서 포함하도록 hello.o 추가

 

부트로더에서 헬로 명령어 사용

 

 

1. 유부트 소스 코드를 파이에 맞게 설정

2. 부트로더에 새 명령어 추가

 

 

유부트 소스 코드 파이에 맞게 설정

1. 유부트 소스 받기

git clone git://git.denx.de/u-boot.git

 

2. uboot 소스에서 파이 관련 소스 분석

- 각 디렉토리는 고유한 목적 가짐. 각 디렉토리들을 타겟에 맞게 수정해야함

- makefile : 소프트웨어 빌드시. 컴파일 과정과 소스파일 관계 정의

- 타겟에 맞는 메이크파일을 찾아서 실행

- defconfig (default configuration) 찾기 : find ./ -name defconfig

 

- pi3의 defconfig

3. 유부트 소스에서 파이3 부트로더 관련 환경 설정

 

 

새 명령어 만들기

- cmd 디렉토리에 새 추가 할 명령어 작성

- hello 입력시 hello ncs 출력 함수

 

 

kconfig 파일 수정

-kconfig : 부트로더 컴파일시 설정할 항목들을 서술한 파일

 

makefile 수정

- menuconfig에서 빌드 가능하도록 설정하기

 

menuconfig로 명령어 추가

- make menuconfig 명령어로 kconfig에서 추가한 명령어 설정

- 커멘드 라인 인터페이스 > 헬로 펌웨어 커맨드 설정 후 저장

=> 부트로더에서 핼로 명령어 사용가능해짐

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts