본문 바로가기
프로그래밍/임베디드 프로그래머 생활

임베디드 프로그래머 업무 분야

by solution online 2020. 12. 1.
728x90
반응형

앞선 임베디드 프로그래머에 대한 소개글에 다양한 분야가 있다고 설명드렸는데 오늘은 좀 더 자세한 설명을 드리겠습니다.

이번 글은 제가 프로그래머 생활하면서 경험하고 알게 된 것을 바탕으로 설명드리기에 주관적인 내용이며, 임베디드 프로그래머의 업무 분야가 어떻게 되는지 가이드라인 정도 될 것 같습니다.

업무 분야를 크게 두 가지로 나눠볼 수 있습니다.
1. OS(Operating System)가 있는 분야
2. OS가 없는 분야

위 두 가지 사항을 가지고 설명드리겠습니다.

1. OS가 있는 분야
휴대폰과 컴퓨터를 사용 안해보신 분이 아니라면 OS가 대충 어떤 것인지는 아실 것이라 생각됩니다.
휴대폰에 사용되는 대표적인 OS는 안드로이드(Android)가 있고, 컴퓨터에는 윈도우(Windows)가 있습니다.
임베디드 시스템에서 OS라 하면 대표적으로 리눅스(Linux)를 말합니다.
리눅스가 어떤 것인지는 구글이나 다른 분들의 설명을 찾아보시는 것이 좋을 것 같습니다. 또한 리눅스의 구조가 알고 싶으시면 구글에 linux architecture 라고 검색해 보시면 됩니다.
안드로이드도 이 리눅스를 바탕으로 만들어진 것 입니다. 진짜인지는 구글에 android architecture 라고 검색해 보시면 확인하실 수 있습니다.
리눅스가 어떤 일을 하는가?
전자기기의 부팅부터 각 종 드라이버(ex. USB, WiFi)를 사용할 수 있게 설정(이하 초기화)해 주는 역할을 합니다.
컴퓨터의 OS인 윈도우로 예를 들면 내가(사용자) 전원 버튼을 누르고 바탕화면이 나오는 순간까지 컴퓨터를 쓸 수 있게 초기화 해주듯이 리눅스도 동일한 역할을 합니다.
다소 전문 용어로 설명을 드리자면 bootloader, kernel, rootfs 초기화 및 각 종 동작에 관여 합니다.
여기서 bootloader는 윈도우 전원 버튼 눌렀을 때 나오는 검은화면!
Kernel은 RAM, USB driver 등 OS의 핵심과 주변기기 제어를
Rootfs는 바탕화면, 내 문서 등의 폴더, 파일들이라고 보시면 됩니다.
이렇게 전자기기의 핵심이 되는 전반적인 부분을 프로그래밍 하고 싶으시다면 OS가 있는 분야로 취직을 하시거나 공부하시면 됩니다.
OS 즉, Linux가 있는 분야에서의 업무는 위에 말씀드린 대로 bootloader, kernel, rootfs 부분을 프로그래밍 합니다.
Bootloader에서는 MCU 제어와 MCU에 연결되어 있는 주변기기의 가장 기본적인 초기화를 담당하고 kernel에서는 기본적인 초기화, 실 사용을 위한 초기화 등을 수행합니다. Rootfs에서는 사용자가 사용할 수 있는 공간을 마련해 준다고 보시면 됩니다.
따라서 업무 분야가 굉장히 광범위하고 할 것도 많아 공부할 것도 많습니다.
실제 회사들에서는 아래와 같이 구인공고를 올립니다.
Kernel 개발자, Device driver 개발자, Linux 개발자, kernel 최적화, bootloader 개발/최적화, Linux daemon 개발 등
저 많은 분야 중에 어느 분야를 지원해야 하는가?
업무 분야의 확장성과 좀 더 수월한 이직을 위해서는 kernel 개발자, device driver 개발자로 취직하시는 것이 좋습니다.
Linux에서 가장 핵심이 되는 분야이며, 공부양도 많고 쉽지 않습니다. 따라서 신입 때 부터 해당 분야에서 일을 시작해야 많은 업무를 배우고 익힐 수 있습니다.
위 항목 중 linux 개발자, linux daemon 개발자는 쉽게 말해 윈도우 프로그램 개발자라고 보시면 됩니다. 따라서 누군가 다 만들어 놓은 OS 위에서 동작하는 프로그램을 개발하는 것이기 때문에 프로그래밍 언어만 배우면 누구나 다 시작할 수 있는 분야 입니다.
구직 사이트 중 사람인에서 임베디드 프로그래머 구인 정보를 찾아보고 싶다면 아래와 같이 찾아보셔야 합니다.
IT/인터넷 -> 시스템개발 -> Embedded, 펌웨어
생산/제조 -> 전기/전자/제어 -> Firmware
이번 글은 업무 분야에 대한 소개글이기 때문에 OS가 있는 분야에 대해서는 나중에 별도의 글로 좀 더 상세한 설명을 해드리겠습니다.

2. OS가 없는 분야
요즈음도 사용하는지 모르겠지만 대표적으로 atemga128이란 chip이 있고, 요즈음은 아두이노(arduino)를 많이 들어보셨을 것이라 생각됩니다.
아두이노 라고 검색해 보시면 파란 바탕에 무엇인지 모를 것들이 있는 물건이 많이 보이실 겁니다.
파란 부분은 기판이라 불리우며, 무엇인가 모를 각 종 어떠한 것들은 각 목적에 따라 소자, chip, 어답터 등으로 불리웁니다.
여러가지 것들을 하나로 조립하여 만든 물건으로써 키트(kit)라 불리우며, 현업에서 이런 것들을 보드(board) 또는 레퍼런스 보드(reference board)라고 부릅니다.
키트마다 좀 다르긴 하지만 보통 이런 키트는 OS가 없이 특정 용도만 사용할 수 있게 만들어지며, 특정 용도만 사용할 수 있게 만들어진 chip을 사용합니다.
말이 좀 복잡한데 일상에서 예를 들면 USB나 SD card의 역할은 컴퓨터 또는 휴대폰에 꽂으면 데이터를 쓰고, 읽고, 삭제만 하면 됩니다. 이런 기능만 할 수 있는 chip이 있고 컴퓨터나 휴대폰에 사용할 수 있는 어댑터 또는 커넥터를 chip과 연결해 주는 것 입니다.
왜 이렇게 만드는가? 하면 OS가 있으면 OS를 저장할 공간이 필요하고 그렇게 되면 저장장치가 필요하고 제품을 만들 때 부피가 커지기 때문입니다.
밥을 먹기 위해 숟가락만 있으면 되는데 굳이 밥을 퍼주는 기계를 만들 필요가 없는 것과 같은 이치라고나 할까요?
여튼 한가지 또는 특정 용도만 동작하면 되는 전자기기에는 OS가 필요없는 chip이 사용되고 그에 맞게 프로그래머가 한땀한땀 프로그래밍 해주는 업무를 수행해 줍니다.
실생활에서 볼 수 있는 것들로는 USB, sd card, 제습기, 보일러 컨트롤러, 전기 계량기 등이 있습니다.
그러면 프로그래머가 정확히 무슨 일을 하느냐?
앞서 말씀드린 대로 전자기기 제어를 위한 chip이 존재합니다. OS가 있는 것은 OS에서 프로그래밍을 하지만 OS가 없는 것은 chip 자체를 제어합니다.
아래 아두이노 키트를 보면 가운데 큰 네모난 chip과 왼쪽에 usb, 오른쪽에 RESET이라는 버튼과 TX, RX라고 쓰여 있는 LED가 있습니다.


Usb와 버튼, led를 주변장치 또는 주변기기라고 부르며 각 주변장치는 chip과 연결되어 있습니다. Chip 주변을 보면 거미다리 처럼 은색깔로 여러개가 있는데 이것들을 핀(pin)이라 부르기도 하고 GPIO(General-Purpose Input/Output)이라고 부르기도 합니다.
Chip의 gpio와 주변 장치들을 하드웨어(hardware)적으로 연결하고 프로그래머는 chip의 각 gpio에 프로그래밍을 합니다.
따라서 OS가 없는 분야에서는 chip의 gpio 하나하나를 설정해주는 업무를 보통 하게 됩니다.


간략하게 소개글 정도로만 써보려 했지만 주저리 주저리 많이 쓰게 됐네요.
무언가 더 혼란스럽게 만드는 것도 같고…
제가 더 많이 쓰는 것 보다 질문을 받아 그에 대한 답변을 해드리면서 글도 같이 정리하는 것이 나을 것 같습니다.

궁금한 사항은 언제든 댓글 달아주세요~

728x90
반응형