프로그래밍/임베디드 프로그래머 생활

임베디드 프로그래머로써 한 업무들(1)

solution online 2020. 12. 14. 17:52
728x90
반응형

경력의 대부분은 라우터 회사에서 생활한 것들 입니다.

어떤 업무들을 했었는지 업무 목록과 내용들에 대해 상세히 소개를 해드릴까 합니다.

아마 이번 글은 현직에 계시는 분들보다 분야로 시작하시려는 분들에게 가이드 라인 정도는 있지 않을까 생각해 봅니다

 

우선 라우터란! 흔히 말하는 공유기를 말합니다. 공유기는 SKT, KT, LGU+ 에서 여러분 집에 인터넷을 있게 설치해 기계를 말합니다. 요즈음은 WiFi 기본적으로 제공하죠.

 

전문적으로는 라우터, 모바일 라우터로 나누기도 하는데요. 집에서 사용 중이신게 라우터고요. 휴대용으로 들고 다니면서 LTE 신호를 받아 사용할 있게 해주는 것을 모바일 라우터라고 합니다.

 

저는 분야 모두 개발했고, 미국, 일본, 인도네시아 해외 제품도 개발했었습니다.

간단한 소개는 여기까지 하고요

라우터를 만들기 위해 임베디드 프로그래머로써 담당할 있는 업무 목록은 아래와 같습니다.

 

1. bootloader 수정

2. kernel 최적화

3. device driver 수정

4. daemon 개발

5. web page 개발

6. 양산 프로그램 개발

 

무언가 많죠!? 주가 되는 업무와 부가적인 업무도 있고, 굳이 개로 나눈 것도 있는데 다시 / 업무 기준으로 나눠본다면 아래와 같습니다.

 

1. 업무

- bootloader 수정

- kernel 수정(or device driver 수정)

- daemon 개발

2. 업무

- web page 개발

- 양산 프로그램 개발

 

우선 수정, 개발이란 단어를 제가 나누어서 사용했는데 이것은 개인적인 경험 또는 생각에 따라 개발 이란 단어 하나로 보셔도 되고 나누어 보셔도 무방합니다.

저는 나누어 쓰는데요. 이유는 면접과 여러 회사를 경험해 봤을 개발 이란 단어는 처음부터 무언가 설계해서 만드는 과정을 뜻하고, 수정은 이미 만들어진 것을 토대로, 그대로 수정만 하기 때문에 나누어 씁니다.

사실 chip 회사 면접 개발 이라고 써놨다가 오해를 여러 받아서요

예를 들면 이력서에 "usb 드라이버 개발" 이라고 써놨다면 chip 회사에서는 #include 부터 제가 코딩한 것으로 이해하시더라고요. 그래서 그냥 저는 나누어서 씁니다 ㅎㅎ

 

! 이제 업무에 대해 설명 드릴게요.

1. bootloader 수정

Bootloader 무엇인지는 다른 분들 블로그를 참조하시기 바랍니다. 저보다 친절히 설명 해놓으신 분들이 많아요~~

Bootloader 종류가 여럿 있지만 open source u-boot 많이 사용합니다.

https://www.denx.de/wiki/U-Boot/WebHome

Bootloader에서는 전자기기의 처음 초기화를 많이 담당하는데요. 용량이 적고 최소한의 초기화만 담당하기 때문에 라우터 같은 제품을 보면 전원 버튼을 눌렀을 눈에 띄는 LED 불이 들어오도록 설정해 주는 부분이 있습니다.

또한 chip GPIO, 전원부 전원이 처음 들어왔을 필수적으로 설정해 줘야 되는 부분에 대해 코딩을 하게 됩니다.

Bootloader 다소 민감하게 처음! 시작하는 부분이다 보니 경력이 적은 분들에게는 시키지 않습니다. !? 잘못 수정하면 제품 부팅이 안되거든요. .. 중요합니다. 수정 ~ 하고 검증까지 해놓고 무언가 줄이 눈에 띄여 정말 수정했을 뿐인데 그대로 업데이트 파일 줬다가 부팅 안되는 경우. 봤습니다 ㅎㅎ;; 비상입니다.

물론! Bootloader 잘못돼도 수정할 있는 방법이 있습니다!

Bootloader 저장되어 있는 ROM 것으로 교체하거나 JTAG 지원하는 것들은 JTAG 이용하여 처리할 수가 있어요! 하지만 쉽지 않을 겁니다 ROM 교체는 하드웨어 팀에 부탁해야 되고요. JTAG 비싸서 없는 회사가 많아요 ㅎㅎㅎ

여튼 bootloader 부분에서는 크게 코딩할 일은 없고요. 다만 신중하고 조심스럽게 코딩해서 !!! 검증하셔야 합니다

 

2. kernel 수정(or device driver 수정)

Kernel linux 핵심입니다. 그냥 linux = kernel 이죠 ㅎㅎ

Kernel 안에 장치 드라이버(device driver) 있기 때문에 사실 kernel 개발자와 device driver 개발자는 다릅니다. 하지만 chip사에 다니는 것이 아니라면 크게 상관은 없습니다.

라우터 개발에서 kernel 코딩할 일이 무엇이 있는가?

SDK 받으면 기본 동작은 되는 kernel 받게 됩니다. 사실 그냥 써도 무방합니다. 그러나 고객사만의 스페셜한 요구 사항을 반영하려면 그냥 무조건 수정할 일이 생깁니다.

또는 처음 기획 단계에서 얘기없던 기능이 추가 됐는데 이게 커널에서부터 추가해서 작업해야 되는 경우도 있거든요. 그럼 커널을 손대야 하고요.

대체적으로 무엇을 수정했느냐?

저는 wifi, bluetooth, usb, pmic driver 들을 수정했었습니다. 기존 짜여져 있는 코드를 분석하고, 요구 사항에 맞게 수정하고 디버깅하는 작업을 했습니다.

또는 kernel option에서 신규 기능 활성화 하여 디버깅하고 수정하고 디버깅하고… ㅎㅎㅎ

거의 기존 코드와 동작에 대한 분석이 업무의 70~80% 차지합니다. ? 어려워요 ㅎㅎ 그리고 잘못 건드리면 driver가 동작을 안하거든요… 그래서 bootloader 처럼 소중히 다뤄줘야 합니다.

게다가 device driver들은 표준 , spec 있기 때문에 spec 공부해야 되고, 그것에 맞게 동작하는지 코드를 보고 분석해야 되고, 스스로 OK! 알았어! 해야지, 그제서야 수정이 가능합니다.

그냥 여기저기 printk 넣어보고 이거 건드려 보고 해봐야 10 1개는 수정될지 모르겠지만 9개는 안되요. 안멈추면 다행이고요 ㅎㅎ

그래서 device driver 개발자들은 업무를 기본 1~2 되야 끝나는 경우도 있어요 ㅎㅎ

여튼 무지 부담도 되고 어렵지만 해결했을 때의 성취감은!!! 이루 말할 없습니다

 

 

오호… 가지 업무에 대해 썼는데도 벌써 길어졌네요. 잡담이 너무 길었나 ;;;

나머지 업무에 대해서는 다음 글에서 말씀드릴게요!!

728x90
반응형