- 한번도 부팅이 안된 디바이스를 살리는 작업
- 시스템 소프트웨어 개발의 첫 단계
- 부트 로더, 리눅스 드라이버 코드 수정
- 소스 브링업
- 타겟 브링업
- 페리퍼럴 브링업
- 프로그래밍
- UART 커넥터(UART 콘솔 사용)를 보드에 연결 한 후 전원 인가
- 디버깅
- 동작 확인
- 크래시
- 부팅 진전이 안됨
- 페리퍼럴 동작 안함(ex. 화면 출력 안됨, 오디오 플레이 안됨, 센서 동작 안함)
- SoC나 MCU 칩셋의 부팅과정 이해
- 부트로더 동작 원리 이해
- ARM 아키텍처에 대한 이해
- 리눅스 디바이스 드라이버 이해
- 리눅스 커널의 다양한 디버깅 기능 활용 능력
- Troubleshooting 능력이 가장 중요(TRACE32, 커널 패닉)
- 크래시, 리셋
- 성능 이슈: 시스템 느려짐, 화면 깨짐
- 기능 동작: 스펙에 맞게 동작 못함
- 로그(UART, 커널 로그)나 메모리 덤프를 추출
- Q/A 인증 팀에서 받은 로그(UART, 커널 로그)나 메모리 덤프 활용
- 로그나 덤프를 분석
- 문제의 원인을 정확히 파악(디버깅 능력이 요구됨)
- 문제가 발생한 테스트 진행
- 테스트를 통해 패치가 유효한 지 스스로 검증(필요시 레포트 작성)
- 리눅스 커널 개발의 심장으로 리눅스 커널의 기능을 개발
- 리눅스 커널을 구성하는 서브시스템 기능 개선, 논리적 오류나 문제점을 개선하는 패치를 논의
- https://lkml.org
- https://www.kernel.org/
- 메인 라인 커널
- Stable Kernel(LTS, 권장 버전)
- SoC는 System-on-chip 의 약자로 하나의 컴퓨터 또는 다른 전자 시스템들의 모든 구성 요소를 통합한 집적회로를 의미
- SoC 벤더는 개발하는 업체인 브로드컴, 퀄컴, 미디어텍, 엔비디아 같은 회사
- 리눅스 커널 버전(LTS)을 선택
- CPU 벤더로(ex. ARM)부터 라이선스, 툴 체인을 받아 자신의 SoC 스펙에 맞게 수정
- 자신의 하드웨어 IP를 브링업하고 최적화 하는 커널 드라이버를 구현
- SoC 벤더가 릴리즈한 BSP(리눅스 커널 코드 + 드라이버 + 부트로더)를 받아 제품 스펙과 시나리오에 맞게 제품을 개발
- OEM 업체 개발자들은 이 과정에서 SoC 벤더 개발자와 자주 협업
- 익셉션
- 하이퍼바이저
- 트러스트존
- 익셉션 레벌을 기준으로 익셉션 벡터 테이블을 구성
- el1_sync, el0_irq, ...
- 하이퍼바이저의 구조를 이해하기 위해서 ELx(익셉션 레벨)의 개념을 알고 있어야 함
- EL2에서 하이퍼바이저가 실행, EL1에서 리눅스 커널이 실행
- EL1에서 HVC를 실행하면 EL2로 진입
- 익셉션 레벨의 개념 위에 트러스트존이 구성됨
- 트러스트존에 진입하기 위해서는 EL1에서 EL3로 진입(SMC) 해야 함
- 유저 애플리케이션이 실행
- unprivileged 레벨 혹은 PL0로 실행
-> Privileged : 하드웨어에 직접적으로 접근할 수 있는 권한- EL0에서는 인터럽트, MMU, 캐시 기능을 설정 할 수 없음
- EL1은 PL1 권한이 있는 익셉션 레벨
- 리눅스 커널에서는 인터럽트, MMU, 캐시 설정과 같이 시스템을 설정 가능
- PL2는 EL2에게 부여되는 권한 레벨로 게스트 OS끼리 스위칭하고 게스트 OS의 시스템 리소스에 접근 가능
- 일반적으로 EL2에서 하이퍼바이저가 실행되며, 하이퍼바이저는 PL2 권한 레벨로 실행 됨
- PL3는 EL3 에게 부여되는 권한 레벨로 Highest Privileged Level
- 시스템을 모두 설정할 수 있고, 익셉션 레벨에 존재하는 모든 레지스터에 엑세스 할 수 있어 Booting 과정에서 EL3로 설정