728x90

펌웨어 설계 문서 분석

펌웨어 구현 개발 도구

- 소스 코드 및 컴파일을 호스트 PC에서 작성 하여 임베디드 보드에 다운로드 후 실행

- 호스트 시스템 : 프로그램 개발 PC환경

- 타겟 시스템 : 프로그램이 실행되는 임베디드 시스템

-> 호스트 시스템과 타겟 시스템 사이 통신, 디버그 정보를 얻기위해 추가적인 개발환경 필요 : 에디터, 컴파일러, 디버거, 링커 등

 

호스트와 타겟 시스템의 운영체제 제한

- 호스트 시스템 운영체제는 대중적인 OS 지원

- 타겟 시스템 : 펌웨어 상태서 하드웨어 스펙에 의존. 

 

운영체제 외 개발에 필요한 도구

- 컴파일 : 소스프로그램을 실행 파일로 변환하는 과정

 

컴파일 과정

1. 전처리 : 소스코드 전처리

2. 컴파일러 : 전처리 코드를 어셈블리 코드로 변환

3. 어셈블러 : 어셈블리 코드를 재배치 가능한 기계어 코드로 변환

4. 링커 : 외부 라이브러리와 기계어 코드를 합쳐 실행가능 기계어 코드 작성

5. 로더 : 메모리에 올려 실행

6. 메모리

- 툴체인 : 소스 파일을 실행파일로 만드는데 사용되는 도구들이 연결된것

 -> 타겟에 따라 다른 툴체인 설치

 

GNU

- gcc, binutill, gnu c library 등이 있으며 버전 의존성 존재

 

라즈베리파이 툴체인 설치 방법

- git에서 다운

 

 

 

 

하드웨어 데이터 시트 분석

펌웨어 구현시 데이터 시트

- 펌웨어는 하드웨어에 의존하는 프로그램

- 마이크로 프로세서 제조사나 평가 보드 제조사의 데이터 시트 기반으로  프로그램 작성

 

라즈베리파이3 예시

- bcm2837(arm cortex-a53 프로세서)의 gpio 

 

bcm2837arm 주변장치에 대한 데이터 시트 분석

- 회로도, 하드웨어 구성, 가이드 등 모든 내용 포함

 

 

 

 

arm 물리적 주소

- 물리적 주소 범위 : 0x3F00 0000 ~ 0x3FFFF FFFF

- 주변장치 버스 어드레스 범위 : 0x7E00 0000 ~

 

 

 

GPIO 레지스터 뷰

- 주변장치 베이스 가상 주소 0x7E00 0000

- GPIO 시작 가상 주소 0x7E20 0000

- GPIO Base offset 0x20 0000(0x7E20 0000 - 0x7E00 0000)

- GPIO 시작 실제 물리 주소 : 0x3F20 0000(0x3F00 0000 + offset)

 

 

개발환경 구축 실습

1. 부트로드 소스 컴파일을 위해 크로스컴파일러 설치

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

 

 

크로스 컴파일러

- 컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행가능한 코드를 크로스 컴파일해주는 컴파일러

- 노트북 <- 크로스 컴파일 -> 라즈베리파이

- 라즈베리파이에서 실행가능하도록 크로스 컴파일

* 크로스 컴파일러 :  aarch64-linux-gnu 사용

 

1. 크로스 컴파일러 설치

2. 유부트 소스에서 라즈베리파이3 부트로더 이미지 생성

- 크로스컴파일러를 지정하는 환경변수 설정

필수 라이브러리 설치

- bison, flex



파이 보드에 맞게 설정 하기

-config 디렉토리 : rpi_3_defconfig폴더에서 지정

- make rpi_3_defconfig

 

부트로더 컴파일

-make

 

 

부트로더 확인

- ls로 컴파일 결과 확인 uboot.bin

 

 

3. 라즈비안 이미지 파일 받고 부트로더 이식하기

- win32diskimager

 

 

라즈비안 이미지 파일 분석

- 커널 이미지 : 부트로더는 커멀 이미지 숫자가 더큰걸 불러옴. kernel7.img

 

 

부트로더 넣기

- uboot.bin -> kernel8.img 로 이름 변경 후

 

 

부트로더 진입

- 부팅 시. 3초 이내 키보드 입력시 uboot 명령어 모드로 진입

- ? 로 명령어 확인

 

 

 

GPIO 명령어로 LED 제어

- 내장 LED는 GPIO29번과 연결

- help gpio로 확인

 

 

 

 

 

 

300x250

+ Recent posts