728x90

운영체제 기초 과정 분석 필요 지식

- 펌웨어와 부트로더 이해 필요

 

펌웨어

- 롬에 저장된 소프트웨어

 

임베디드 시스템 구성

1. 큰 임베디드 시스템

- 어플리케이션 소프트웨어

- 부트로더, 운영체제

- 하드웨어

-> 복잡한 기능, 규모가 큰 임베디드 시스템

2. 작은 임베디드 시스템

- 어플리케이션 소프트웨어

- 하드웨어

-> 단순한 기능, 규모가 작은 임베디드 시스템 구성

 

라즈베리파이3 구성

- 어플리케이션 소프트웨어

- 펌웨어(부트로더), 운영체제(리눅스)

- 하드웨어(라즈베리파이)

-> 일반 피씨와 유사한 다양한 어플리케이션 사용 가능

 

아두이노

- 펌웨어

- 하드웨어(아두이노)

-> atmega328 8비트 마이크로 컨트롤러 사용 -> 규모가 작은 임베디드 시스템

 

펌웨어 개발자란?

- 운영체제 없이 마이크로컨트롤러 제어 소프트웨어 개발자

 

부트로더의 역활과 종류

- 운영체제가 시스템에 로드되어 잘 동작하기 위한 사전 작업 준비

1. 하드웨어 초기화

2. 운영체제 동작 환경 구성

3. 운영체제를 메모리로 로드

 

부트로더 특징

- 시스템 하드웨어 의존성이 강함

- 프로세서 구조, 특징, 사용법 이해 필요

- 어셈블리어로 작성. 프로세서에 따른 명령어 사용법 이해 필요

- 크기가 작야아함

- 오픈소스 소프트웨어가 많아 활용하기 용이함

 

 

오픈소스 부트로더 종류

- 모든 하드웨어를 지원하는 부트로더는 없으나 많이 지원하는 오픈소스 부트로더들이 있음

- grub 그럽 : PC 및 서버에서 사용

- u-boot : arm 기반에서 주로 사용

 

운영체제 부트로더 흐름

1. 전원 인가

2. 하드웨어 초기화

3. 커널 부팅

4. 커널 로딩

 

 

exynos-8890 부팅 과정

- exynos-8890 : 최신 프로세서, 작은용량의 롬과 메모리 가짐. 128kb irom, 320 iram 포함

- rom에는 부트 로더가 있어 ram으로 로드함

1. irom에 있는 부트 코드가 실행. om 핀을 확인 하여 어떤 디바이스로 부팅할지 결정

2. bl1코드를 읽어 internal sram에 복사하여 실행 - 하드웨어 초기화 수행

3. b1의 나머지를 dram으로 복사하여 실행

4. 적재된 커널은 부팅 시작

 

 

 

 

라즈베리 파이 부팅 과정

- 라즈비안 2개의 파티션 가짐 :

 1. 부트 파티션

 - 60mb fat32 포멧 필요

 - gpu 초기화에 필요한 코드와 데이터 포함

 - os 커널을 메모리로 가져와 실행하는 역활

 2. 루트 파티션

 - 나머지 os와 모든 파일

 - ext4 리눅스 파일 시스템으로 구성

 

라즈비안 이미지 파일에 무엇이 있는가?

- dtb device tree block :  하드웨어 컴포넌트 데이터베이스 파일. 

- boot code  : 부트로더 파일 

 - cmdline, config : 환경 설정 텍스트 파일

 - kernel.imz, kearnel7.img : 커널

 

 

 

 

 

펌웨어 요구사항 도출하기

임베디드 시스템부팅시 필요한 주변장치

- uart : 병렬 데이터를 직렬 형태로 보내는 장치

- 이더넷 : 네트워크 간 컴퓨터들이 고유의 맥주소를 가지고 주고받을수 있음

- usb : 직렬,병렬 포트등 기존의 연결방식을 대체하기 위해 만들어짐

- gpio : 마이크로프로세서가 주변 장치와 통신을 위해 범용으로 사용하는 비출력 포트(PORTx, DDRx, PINx)

- HDMI : 영상과 음향을 통합한 단자 구격

 

부트로더가 지원해야하는 명령과 동작

- 하드웨어 초기화

- 메모리 복사

- 명령어 복사

 

부트로더 기능과 동작

- 하드웨어 초기화 : 메모리 설정, cpu 클럭 설정, gpio 설정, 시리얼 설정, 네트워크 설정 

- 메모리 복사 : 커널 이미지 램디스크 이미지, 부트로더 자신을 플래시 롬에서 sdram으로 복사

- 커널 부팅 : 커널 이미지를 메모리로 복사 후 압축을 풀고 실행 -> 부트로더는 끝나고, 커널이 제어권 가짐

- 명령어 지원 : 사용자가 부트로더 기능 사용 가능

- 디버깅 모드 : 부트로더 동작 상태를 보면서 에러 부분을 찾을 수 있음

 

 

시스템 부팅 정차에 따른 하드웨어 초기화 과정

1. dram에서 u-boot 실행

2. 보드 초기화 board_init

3. malloc 초기화

4. 플래시 메모리 장치 초기화

5. nand및 oneram 초기화

6. mmc 초기화

7. 환경변수 초기화

8. ip주소 초기화

9. 표준입출력장치 초기화

10. 기타아키텍처 및 보드 관련 초기화

11. 인터럽트 초기화 및 enable

12. 네트워크 디바이스 초기화

13. 메인 루프 실행 common/main.c

 

 

 

u-boot로 부트로더 구조 분석

- u-boot : 암 계열의 부트로더

 

부트로더 3단계

- bl0, bl1 :  칩 벤더에서 제작 및 릴리스하는 코드 영역, 수정 불가

- bl 2 : 일반적으로 사용하는 부트로더

 

u-boot 소스 코드 다운

- 윈도우나 리눅스에서 가능

- 리눅스에서 깃업으로 소스 받음

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

u-boot 구조 분석

- arch : 각각의 아키텍처에 의존적인 라이브러리 가짐

- board: 보드 관련 소스 제공. 라즈베리파이도 여기있음

 

- driver : uart, gpio 등 외부 장치 관련 드라이버 제공

 

 

 

라즈베리파이3 소스 분석

- find로 bcm 검색

- find ./ -name *bcm*.*

 

- rpi 관련 검색

- find ./-name *rpi*

 

 

오픈소스 부트로더인 uboot 디렉토리 구조와 라즈베리파이 관련 소스 분석 

- 타겟 하드웨어에 맞는 부트로더 개발을 위해 하드웨어 이해와 부트로더 소스 이해 중요

- 구글링으로 정보 검색과 분석 필요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts