리눅스데브코스 [7주차 - 5(1)]<시스템 소프트웨어 개발 생태계>

심우열·2023년 5월 19일
0

1. 시스템 소프트웨어 개발자의 업무

1. 브링업

1. 브링업이란?

  • 한번도 부팅이 안된 디바이스를 살리는 작업
  • 시스템 소프트웨어 개발의 첫 단계
  • 부트 로더, 리눅스 드라이버 코드 수정

2. 실전 개발에서 브링업의 종류

  • 소스 브링업
  • 타겟 브링업
  • 페리퍼럴 브링업

3. 부팅 과정

4. 브링업 업무의 패턴

  • 프로그래밍
  • UART 커넥터(UART 콘솔 사용)를 보드에 연결 한 후 전원 인가
  • 디버깅
  • 동작 확인

5. 브링업 과정에서 겪는 주요 이슈

  • 크래시
  • 부팅 진전이 안됨
  • 페리퍼럴 동작 안함(ex. 화면 출력 안됨, 오디오 플레이 안됨, 센서 동작 안함)

6. 브링업을 잘 하는 방법

  • SoC나 MCU 칩셋의 부팅과정 이해
  • 부트로더 동작 원리 이해
  • ARM 아키텍처에 대한 이해
  • 리눅스 디바이스 드라이버 이해
  • 리눅스 커널의 다양한 디버깅 기능 활용 능력
  • Troubleshooting 능력이 가장 중요(TRACE32, 커널 패닉)

2. Bug Fix

1. 버그의 종류

  • 크래시, 리셋
  • 성능 이슈: 시스템 느려짐, 화면 깨짐
  • 기능 동작: 스펙에 맞게 동작 못함

2. Bug Fix 단계

1. 문제 증상을 직접 확인

  • 로그(UART, 커널 로그)나 메모리 덤프를 추출
  • Q/A 인증 팀에서 받은 로그(UART, 커널 로그)나 메모리 덤프 활용

2. 디버깅으로 원인 분석

  • 로그나 덤프를 분석
  • 문제의 원인을 정확히 파악(디버깅 능력이 요구됨)

3. 테스트 진행해 패치가 유요(Valid)한지 검증

  • 문제가 발생한 테스트 진행
  • 테스트를 통해 패치가 유효한 지 스스로 검증(필요시 레포트 작성)

3. 리눅스 시스템 개발자의 Tech Area

Tech Area

2. 리눅스 시스템 개발 생태계

1. 리눅스 커널 오픈 소스 프로젝트

1. 리눅스 커널 커뮤니티란?

  • 리눅스 커널 개발의 심장으로 리눅스 커널의 기능을 개발
  • 리눅스 커널을 구성하는 서브시스템 기능 개선, 논리적 오류나 문제점을 개선하는 패치를 논의
  • https://lkml.org
  • https://www.kernel.org/

2. 리눅스 커널 브랜치

  • 메인 라인 커널
  • Stable Kernel(LTS, 권장 버전)

2. SoC 벤더

1. SoC 벤더란?

  • SoC는 System-on-chip 의 약자로 하나의 컴퓨터 또는 다른 전자 시스템들의 모든 구성 요소를 통합한 집적회로를 의미
  • SoC 벤더는 개발하는 업체인 브로드컴, 퀄컴, 미디어텍, 엔비디아 같은 회사

2. SoC 벤더 개발자의 역할

  • 리눅스 커널 버전(LTS)을 선택
  • CPU 벤더로(ex. ARM)부터 라이선스, 툴 체인을 받아 자신의 SoC 스펙에 맞게 수정
  • 자신의 하드웨어 IP를 브링업하고 최적화 하는 커널 드라이버를 구현

3. OEM 제품 개발 업체

1. OEM 업체 개발자의 역할

  • SoC 벤더가 릴리즈한 BSP(리눅스 커널 코드 + 드라이버 + 부트로더)를 받아 제품 스펙과 시나리오에 맞게 제품을 개발
  • OEM 업체 개발자들은 이 과정에서 SoC 벤더 개발자와 자주 협업

3. ArmV8 익셉션 레벨

1. 익셉션 레벨과 주요 기능

1. 익셉션 레벨을 알아아 햐는 이유

1. ArmV8 아키텍처를 이루는 기능을 이해하기 위해서

  • 익셉션
  • 하이퍼바이저
  • 트러스트존

2. 익셉션 핸들러 구성

  • 익셉션 레벌을 기준으로 익셉션 벡터 테이블을 구성
  • el1_sync, el0_irq, ...

3. 하이퍼바이저

  • 하이퍼바이저의 구조를 이해하기 위해서 ELx(익셉션 레벨)의 개념을 알고 있어야 함
  • EL2에서 하이퍼바이저가 실행, EL1에서 리눅스 커널이 실행
  • EL1에서 HVC를 실행하면 EL2로 진입

4. 트러스트 존

  • 익셉션 레벨의 개념 위에 트러스트존이 구성됨
  • 트러스트존에 진입하기 위해서는 EL1에서 EL3로 진입(SMC) 해야 함

2. 익셉션 레벨의 정의

3. 익셉션 레벨의 활용

4. 익셉션 레벨과 Privilege Level(득권 권한)

1. EL0 와 PL0 - 일반적인 user의 권한

  • 유저 애플리케이션이 실행
  • unprivileged 레벨 혹은 PL0로 실행
    -> Privileged : 하드웨어에 직접적으로 접근할 수 있는 권한
  • EL0에서는 인터럽트, MMU, 캐시 기능을 설정 할 수 없음

2. EL1 와 PL1

  • EL1은 PL1 권한이 있는 익셉션 레벨
  • 리눅스 커널에서는 인터럽트, MMU, 캐시 설정과 같이 시스템을 설정 가능

3. EL2 와 PL2

  • PL2는 EL2에게 부여되는 권한 레벨로 게스트 OS끼리 스위칭하고 게스트 OS의 시스템 리소스에 접근 가능
  • 일반적으로 EL2에서 하이퍼바이저가 실행되며, 하이퍼바이저는 PL2 권한 레벨로 실행 됨

3. EL3 와 PL3

  • PL3는 EL3 에게 부여되는 권한 레벨로 Highest Privileged Level
  • 시스템을 모두 설정할 수 있고, 익셉션 레벨에 존재하는 모든 레지스터에 엑세스 할 수 있어 Booting 과정에서 EL3로 설정

5. 익셉션 레벨과 익셉션의 전체 흐름도

1. 하나의 운영체제

2. 가상화 시스템

3. 트러스트존 아키텍쳐

Armv8-A 아키텍처익셉션(Exception)

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글