임베디드 리눅스 기본 개념

김민세·2022년 10월 24일
2
post-thumbnail

임베디드 개발자가 알아야 지식

임베디드 리눅스 개발자가 알아야 할 것을 좁게 보면

  • 디바이스 드라이버
  • 리눅스 커널
  • CPU 아키텍처
  • SoC

넓게 보면

  • 유저 공간 HAL(Hardware Abstraction Layer) 코드 구현
  • 빌드 스크립트 구현
  • 테스트용 디바이스 드라이버 구현
  • Git과 형상 관리

가 있다.


디바이스 드라이버

임베디드 리눅스 개발을 시작하면 바로 디바이스 드라이버 업무를 맡는 경우가 많다. 업무 프로세스나 회사 규모에 따라 디라이버 개발 범위가 다르다

디바이스 드라이버의 시나리오와 제어하는 하드웨어의 종류는 다양하지만 다음 내용 정도는 알아야 한다

  • 인터럽트 핸들러 함수와 인터럽트를 처리하는 방식
  • 디바이스 파일로 open/read/write 연산에 대한 함수를 등록하는 방법
  • 디바이스 트리를 읽어 디바이스 속성을 저장하는 방식

개발에 투입되면 자신이 작성한 디바이스 드라이버 코드보다 다른 사람이 작성하는 코드를 읽을 가능성이 높다. 따라서 디바이스 드라이버 코드를 빨리 읽고 이해하는 능력을 키우는 것도 중요하다.


리눅스 커널

디바이스 드라이버는 리눅스 커널에서 제공하는 함수로 구성돼 있다. 호출한 함수의 동작 방식을 알려면 자연히 리눅스 커널 코드를 분석할 수 밖에 없다.

디바이스 드라이버를 개발하는 과정은 코드를 입력해 드라이버 구현하는 데 끝나지 않고 인증 테스트를 부서를 통해 안정화 테스트를 거친다. 이 과정에서 다양한 버그나 문제 증상이 리포트된다. 이 문제를 해결하기 위해서는 리눅스 커널을 잘 알아야한다.


CPU 아키텍처

리눅스 커널을 조금 깊게 가다보면 어셈블리 코드를 만날 수 밖에 없다.

리눅스 커널의 핵심 동작은 CPU 아키텍처와 연관된 부분이 많아 리눅스 커널의 핵심 개념들은 대부분 어셈블리 언어로 구현돼 있다.

핵심기능

  • 컨텍스트 스위칭
  • 익셉션 벡터
  • 시스템 콜
  • 시그널 핸들러
  • 메모리 관리(MMU)

처음 리눅스를 배울 떄 무리해서 CPU 아키텍처의 세부 동작 원리와 어셈블리 코드를 공부할 필요는 없다. 리눅스 시스템과 커널 로그, ftrace에 친숙해지는 것이 먼저이다.

하지만 리눅스 커널을 좀 더 깊게 공부하고자 하면 CPU 아키텍처에 대해 다음과 같은 것을 알아야 한다.

  • 어셈블리 언어
  • 익셉션이 발생하는 원리와 익셉션 벡터의 세부 동장
  • 함수 호출 규약(Calling Convention)

빌드 스크립트와 Git

임베디드 리눅스 개발을 할 때는 빌드 스크립트와 Git과 형상 관리를 기본적으로 알아둘 필요가 있다.

빌드 스트립트를 잘 이해하고 Git을 잘 다루면 효율적으로 개발할 수 있다. 다른 업체가 개발한 드라이버나 응용 프로그램을 현제 사용 중인 소스 트리에 추가 해야 할 때가 있다. 이때 빌드 스크립트와 빌드 구조를 잘 파악하면 업무를 더 빨리 끝내 수 있다. Git은 소프트웨어 개발에서 소프트웨어 번저 관리 툴로 아주 많이 사용된다. 대부분의 개발자들이 수정한 코드는 Git 명령어를 사용한 패치와 포멧으로 관리한다.

하지만 이 주제에 너무 많은 시간을 사용할 필요는 없도 중간 이상 정도의 실력만 갖추면 된다

profile
김민세

0개의 댓글