운영체제 기초 과정 분석 필요 지식
- 펌웨어와 부트로더 이해 필요
펌웨어
- 롬에 저장된 소프트웨어
임베디드 시스템 구성
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 디렉토리 구조와 라즈베리파이 관련 소스 분석
- 타겟 하드웨어에 맞는 부트로더 개발을 위해 하드웨어 이해와 부트로더 소스 이해 중요
- 구글링으로 정보 검색과 분석 필요
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
임베디드 SW 엔지니어링 - 5 펌웨어 구현 환경 구축 (0) | 2020.05.25 |
---|---|
임베디드 SW 엔지니어링 - 4 펌웨어 설계 (0) | 2020.05.25 |
임베디드 SW 엔지니어링 - 2 하드웨어 분석 (0) | 2020.05.24 |
임베디드 SW 엔지니어링 - 1 임베디드 시스템 개요 (0) | 2020.05.24 |
펌웨어구현 환경구축 12 - 메모리 맵의 구성 및 운용 (0) | 2020.05.07 |