반도체 소프트웨어

요약 2. ARM 공부 이유 본문

CPU Architecture/ARM Architecture

요약 2. ARM 공부 이유

반도체 소프트웨어 엔지니어 2023. 12. 30. 16:09
  1. 브링업을 잘하기 위해서
    • 시스템 소프트웨어 개발자 프로젝트 프로세스: 보드 브링업 -> 기능 안정화 -> 유지 보수
      • 부트로더에서 스타트업 코드 실행
      • 메모리, 캐시와 같은 시스템 자원 초기화
      • 키보드, usb 같은 주변 장치 초기화
    • 시스템에 전원이 들어왔을때 가장 먼저 실행되는 주소에 있는 코드: 스타트업 코드(부트로더가 가장 먼저 실행하는 코드)
      • 시스템을 초기화 및 설정하는 루틴으로 구성됨
      • MMU 같은 하드웨어 유닛과 캐시 설정
      • 동작모드 혹은 익셉션 레벨별로 스택 크기 지정
      • 익셉션 핸들러 구성
      • 스택이 초기화되어있어야하기에 어셈블리어로 스타트업 코드를 작성
  2. 디바이스 드라이버 개발을 잘하기 위해서
    • ARM이 인터럽트 처리를 어떻게 하는지 잘 이해하면 디바이스 드라이버가 통신하는 방법인 인터럽트의 우선순위나 종류를 효율적으로 선정하는데 도움이 됨
    • 반복 코드를 인라인 코드로 변경 등 성능 최적화시에 ARM 프로세서 내부 처리 방식을 이해하는 것이 도움이 됨
  3. 리눅스 커널 및 RTOS를 깊게 이해하기 위해서
    • ARM 익셉션 = 리눅스 인터럽트 핸들러
    • 컨텍스트 스위칭
    • 선점 스케줄링
    • 시스템 콜 핸들러 호출하는 루틴
    • 등 리눅스 커널 및 RTOS 기능이 ARM과 관련있기에 도움이 됨
    • 결국 리눅스 커널 및 RTOS 기능도 CPU위에서 동작하므로 ARM 아키텍처 이해가 필요함
  4. 디버깅을 통한 문제 해결 능력을 키우기 위해
    • 크래시, 메모리 어보트 등 시스템 문제가 발생하면 arm 아키텍처는 관련 레지스터를 읽어서 문제 유발 주소, 인자와 스택 주소 및 콜 스택 등을 알려줌
    • 이를 효율적으로 분석하기 위해 익셉션 동작 원리, 레지스터 용법을 파악해야함
  5. 기타
    • 애플리케이션 프레임워크, 라이브러리 개발자들은 ARM 아키텍처를 잘 알아야함 ex) 안드로이드 프레임워크
    • 결론적으로 ARM 아키텍처에서 배운 걸 실제 프로젝트(리눅스 커널 기능 등)과 대조해보면서 공부해야 좋다.

 

출처: 인프런, "시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리", https://inf.run/FiFG