Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

81112
549
416221


[취준생] 임베디드 개발의 진실과 오해 - (1) 개발 환경 임베디드 에세이

제가 블로그에 리눅스 커널의 분석 내용(코드 분석 + 디버깅 정보)를 올리면 포스팅의 가장 아랫 부분에 '질문이 있으면 댓글을 남겨 달라'는 커멘트를 남기곤 합니다. 글을 쓰면서도 내가 쉽게 글을 작성하고 있는지 의문이 들기도 하고 글의 내용이 100% 맞는 지 의문이 생기기도 하거든요. 그런데 예상 밖에 취준생이나 신입 개발자들이 댓글이나 이메일로 저에게 진로에 대한 고민을 털어 놓는 경우가 많았습니다. 저도 지금 진로 고민이 많은데 다른 분에게 진로 상담을 해줘야 하다니. 참 웃기죠.

댓글이나 이메일을 읽고 나서 많은 취준생 분들이 임베디드 개발에 대해 많은 궁금해 하시는 것 같았습니다. 그래서 저의 개발 경험과 다른 개발자의 교류를 통해 얻은 내용을 바탕으로 취준생 분들을 위해 임베디드 개발에 대한 글을 올리려고 합니다.

생각나는데로 앞으로 말씀드릴 글의 목록을 떠올려보니 다음과 같군요.

   * 개발 환경
   * 임베디드 개발을 위해 알면 좋은 내용(CPU 아키텍처, 커널)
   * 임베디드 개발의 문화(군대 문화?) 
   * 임베디드 개발자의 종류
   * 임베디드 선배 개발자들을 대하는 방법
   * 임베디드 개발의 업무 강도
   * 임베디드 개발과 적성
   * 임베디드 개발은 몇 살 까지 할 수 있을까?

먼저 임베디드 개발 환경에 대해 이야기를 하겠습니다.

임베디드 개발 환경이란 

임베디드 개발을 시작하기 전에 가장 먼저 '개발 환경'에 익숙해 질 필요가 있습니다.
많은 분들이 떠올리는 SW 개발자는 어떤 모습일까요? 아마 모니터를 응시하면서 Java IDE나 윈도우의 비주얼 스투디오와 멋지고 아름다운 프로그램에 아메리카노를 마시면서 코딩을 하는 장면이 떠오를 수 있습니다.

그런데 임베디드 개발 환경은 생각보다 아주 다릅니다. Java IDE나 윈도우의 비주얼 스튜디오는 고사하고 허접한 VI 에디터만 사용하고 무엇보다 컴퓨터에 '이상한 보드'를 연결한 상태에서 개발하는 경우가 많습니다. 여기서 말하는 이상한 보드에는 전선이나 점퍼 선들이 누더기 처럼 보일 수도 있습니다.

무엇보다 임베디드 개발을 할 때는 대부분 크로스 컴파일러 환경에서 코드를 빌드하므로 컴파일러를 직접 설치하고 복잡해 보이는 빌드 스크립트를 직접 입력해 컴파일을 해야 합니다. 그런데 컴파일을 하면 끝이 아닙니다. 컴파일을 통해 이미지 파일이 생성되면 타겟 보드에 직접 다운로드를 해야 합니다.

다운로드를 하고 난 후 UART를 통해 타겟 보드가 작동 중인 로그를 봅니다. UART라! 학교에서 자주 접하기 어려운 인터페이스입니다. 보드에 UART 케이블을 연결해서 로그를 보기 마련인데 UART 케이블은 대부분 투박하게 생긴 게 대부분입니다.

이처럼 다른 애플리케이션 개발자에 비해 임베디드는 개발 환경이 굉장히 다르고 생각보다 세련된 모습은 아니다라고 말할 수 있습니다.

회로도와 오실로스코프 및 테스터기

여기서 끝나는 게 아닙니다. 사무실을 조금만 돌아다니면 오실로스코프와 같은 장비가 보이는데 가끔 선배들이 가져가 사용을 합니다. 보드에 프로브를 한 다음 신호를 측정하는 것이죠. 신호를 측정하기 위해서는 회로도를 읽을 줄 알아야 합니다. 

한 가지 예를 들어볼까요? 갑자기 보드가 리셋이 된다는 제보를 받았습니다. 그런데 온도가 낮은 환경에서만 종종 이런 문제가 생긴다는 내용을 들었습니다. 이런 저런 궁리를 하다가 시스템에 유입되는 전원을 측정해보고 싶다는 생각이 듭니다. 이 때 어떻게 해야 시스템의 전원을 측정해야 할까요? 이를 위해 다음과 같은 과정으로 회로도를 읽어야 합니다.

   * 데이터 시트를 보니 시스템 전원은 VDD_CPU이네.
   * 회로도와 데이터 시트를 보니 VDD_CPU의 전원이 3V 이군.
   * 배치도를 받아서 VDD_CPU에 점퍼를 날려야 겠어.

위와 같이 회로도를 읽고 낮은 온도에서 보드의 VDD_CPU의 전원을 측정하니 갑자기 Voltage Drop이 오실로스코프에서 확인이 됩니다. 이 과정을 통해 자연히 다음과 같은 판단을 내립니다.

   * VDD_CPU 근처에 캐패시터를 하드웨어 팀에게 추가해 달라는 요청을 해야 겠군.

한 가지 예시를 들었는데요. 이와 같이 회로도를 읽고 하드웨어 장비를 사용해 신호를 측정해야 하는 상황을 겪습니다. 그래서 주위에 무섭게 생긴 하드웨어 장비를 자주 보게 됩니다.

임베디드 개발 환경에 익숙하려면 어떻게 해야 할까?

여기까지 글을 읽은 취준생 분들은 자연히 다음과 같은 생각이 들 수 있습니다.

   * 임베디드 개발 환경이 생각보다 별로인 것 같네. 
   * 하드웨어 장비라? 나 하드웨어 싫은데.
   * 그래서 어쩌라는 거지?

스스로 본인이 생각했던 개발의 모습과 너무 동떨어져 있고 JAVA IDE나 비쥬얼 스튜디오로 개발을 하고 싶다는 생각이 물밀 듯이 몰려 오면 임베디드 개발을 선택하지 않으면 됩니다. SW 분야는 굉장히 넓어서 취준생 분들은 자신의 적성에 맞는 개발을 선택하면 되거든요. 그런데 만약 임베디드 개발을 하고 싶다란 생각이 들면 '일단 이 포스팅에서 설명드린 개발 환경'에 대해 익숙해질 필요가 있습니다.

자, 그럼 임베디드 환경에 익숙해지려면 어떻게 해야 할까요? 학교에서 이런 내용을 가르쳐주지 않는다고 가정하겠습니다.

   * 라즈베리 파이나 오드로이드와 같은 보드를 구입해 미리 개발을 해보면 됩니다.

우선 라즈베리 파이를 구입하신 후에 라즈베리 파이에서 구동되는 이미지를 설치해 보세요. 설치하는 과정에서 자연히 많은 것을 체특하게 됩니다. 임베디드 개발을 하기 전에 미리 배운다고 생각하면 마음이 더 편할 것입니다. 

라즈베리 파이를 설치한 다음에 터미널을 열고 컴파일러나 유틸리티 프로그램을 직접 설치해 보세요. 가급적이면 터미널로 명령어를 입력하는 방법을 추천합니다. 그 이유는 '실전 개발에서는 이 방식으로 개발 환경을 설치하기' 때문이에요.

만약 라즈비안을 라즈베리 파이에 설치했다면 라즈비안 커널 소스를 내려받아 빌드 후 라즈베리 파이에 설치해 보세요. 라즈베리 파이는 전 세계에서 가장 많이 사용되는 보드(컴퓨터)라 손쉽게 관련 자료를 얻을 수 있어요. 이렇게 라즈베리 파이를 익숙하게 사용하다가 데이터 시트를 보고 싶은 마음이 생길 수 있어요. 이 때 오드로이드를 구입해 데이터 시트를 보면서 하드웨어를 직접 제어하는 프로그램을 작성해 볼 수 있죠.

두서 없이 임베디드 개발 환경에 대해 떠오르는데로 글을 적었는데요. 조금 더 보충할 부분이 있으면 보강할 예정입니다.


"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2







덧글

  • 해색주 2020/04/13 21:34 # 답글

    자주 들러서 보는 건데, 임베디드쪽은 일반적인 개발 분야와는 참 달라 보이네요.
  • AustinKim 2020/04/13 22:19 #

    하드웨어를 제어하는 SW 개발이라 더 그런 거 같아요.
  • 2020/04/22 16:17 # 삭제 답글 비공개

    비공개 덧글입니다.
  • AustinKim 2020/04/24 15:30 #

    제가 여력이 안돼서 지금 강의를 하기 어려울 것 같습니다. 나중에 연락 올리겠습니다.
    제안해주셔서 감사합니다.

    Thanks,
    Austin Kim
댓글 입력 영역