본문 바로가기
관리자 기고

Linux Unix OS Device Driver Firmware BootLoader uboot 에 대한 나의 프리퀄

by 와이즈캣 2019. 4. 2.
728x90
반응형

Linux Unix OS Device Driver Firmware BootLoader 프리퀄

 

썰을 풀면 아주 오래된 이야기다.

2001년도 대학원생 때 Unix를 처음 접했다.

논문을 보안쪽으로 쓰려니 지도 교수님께서 Unix부터 공부해 보라고 하셨다.
(DB를 배우기 위해 연구실에 들어갔지만 교수님과 사전 논의가 없던 관계로...  ㅡ_ㅡ;; )
그래서 연구실 박민주 팀장의 지도로 소켓 프로그래밍을 처음 짜보면서 Unix 프로그래밍에 입문하게 되었다.
이걸 실습하면서 연구실에 배정되어 있던 Solaris(Unix SystemV 계열 중 Sun사 제조 서버)를
재구동시키며 설정해서 서버로 사용했다.

김상철, 외지혜, 방해석 3명을 교수님께서 팀으로 배치해 주셨고 Unix팀이라 명해 졌었다.
N-IDS로의 방향성을 설정하고 분석할 때까지 Unix팀을 운영하였고
이후로는 혼자만의 N-IDS 구현 논문을 계속하였었다.

논문의 구현에 기반이 되는 OS는 Solaris에서 Linux로 변경되었다.
C와 네트워크, 네트워크 보안, 멀티 쓰레드 구현에 대해 비약적인 학습을 할 수 있었고
그에 부수적으로 운영체제에 대한 깊은 관심을 가지게 되었다.(이게 발단이다.....)

----------------------------------------------------------------------------------------------------------------------------

이후 삼성 폴더폰을 개발하는 회사로 취업하게 되었다.

구미 삼성 공장에 협력(이라 부르고 하청업체라 생각하는)업체는 1개의 폰 개발에
약 12명을 투입하고 있었다. 물론 신입 교육 차원에서 몇명 더 붙은 것이리라 생각된다.
이때 다른 신입들은 애플리케이션 쪽을 가게 되었는데
device driver에 관심있는 사람이 있냐라는 말에 자원하게 되었다.
이후 놀라운 경험을 하게 되었다.

그토록 바라던 운영체제의 알맹이 소스를 그대로 보게 된 것이였다.
REX라는 퀄컴의 RTOS였는데 리눅스도 커널이 공개가 되어 있었지만
그때의 실력으로는 능력 밖이었다.
그런데 REX는 달랐다. 당연히 리눅스 보다 상대적으로 덜 복잡하니 당연한 거 였겠지만
운영체제에 대한 제대로 된 실습을 해 볼 수 있었다.
회사 퇴근 후 새벽 3시까지 공부하고 점심시간에는 삼성 도서관에 들려 관련 책을
찾고 읽고, 복사해서 기숙사에서 공부하고 정말 정신 없었더랬다.
이렇게 공부하고 보니 어느새 하드웨어도 같이 보고 있더라는....

결국 BootStrap 개념까지 접하게 되었고 OS를 공부하며 받아 들인 여러가지
흩어져 있던 개념들이 연관관계 속에서 연결되는 것이 느껴졌었다.
그리고... 언젠가 OS를 만들어 보고 싶다는 생각을 품게 되었다.

핸드폰은 회사 외에서는 혼자서 이것저것 해 보면 공부하기에는 여의치 않았다.
그러던 중 레고마인드 스톰의 해킹 OS를 운용하는 방법을 리눅스 잡지에서 보게 된다.
여기 집필자에게 질문 메일을 보내고 이걸로 초소형 OS를 손쉽게 접할 수 있음을 알게 되었더랬다.
이때가 2003년쯤 되는 것 같다.

----------------------------------------------------------------------------------------------------------------------------

신나게 REX 기반에서 Device Driver로 LCD, GPSOne을 다루고 있는데
서울 업체에서 연락이 왔다. 혹시 입사할 생각이 있냐고...
서울과 보안 업체라는 매력에 면접을 보는데 이전에 논문에 대한 질문이 30이면
70이 내가 핸드폰 취업 후 공부했던 내용이었다.
대답이 술술 나왔다. 신기할 정도로 내가 공부한 내용만 물어 보았더랬다.

2004년도에 나는 서울 보안 업체의 기술 연구소에 입사하였다.
부산 촌놈이라서 첫 출근날 회사를 찾지 못했다.
30분 일찍 갔는데 결과는 30분 지각이었다.
눈이 왔는데 지하철 나가니 어딘지 분간을 못했더랬다.
지금 생각해도 이불킥이다. 아....

이 회사는 H-IDS를 개발했는데 이게 원천 기술이 백신과 비슷한 기술이었다.
더군다나 Solaris 기반.... ㄷㄷㄷㄷ
첨 미션은 device driver 개념 공부 및 HP-UX 설치였다.
Linux device driver 공부도 처음음이었지만 HP-UX 설치도 처음이었다.
여러 OS를 설치해 본 사람은 알겠지만 Unix의 설치 방법은 벤더들 마다
미세하거나 아주 차이가 많이 난다.
회사에는 아무도 HP-UX를 만져본 사람이 없고 서버도 대여해서
보유하고 있었는데 이걸 나한테 던져 준 것이었다.
와나... 지금 생각해 보면 너무 좋았다. ㅋㅋㅋㅋ 

1주일만에 다 해 치웠다.
UP-UX의 설치와 함께 부임무였던 개발 환경도 설치를 완료해서
PT로 발표했다.
(여자 대리가 발표 내내 웃었다. 아니 넘어갔다.
ㅡ_ㅡ 부산 사투리를 써서 웃었는데 나중에 알고 보니 '억수로'를 써서...)

이후 2주의 시간과 HP-UX에서의 device driver 구현 임무가 부여 되었다.
이때 주로 HP 본사의 잘 구축된 Document 페이지를 활용했는데
이게 문제가 있었다. 아무리 구현해도 되지 않아서 결국 HP 본사에 문의를
넣었는데 결과적으로 한국 HP에서 device driver에 관한 전문가와
전화 통화를 할 수 있었다.
(나중에 안거였지만 이 사람이 한국에서 제일 전문강였다능... ㅡ_ㅡ;; )
처음의 통화 내용은 간단했다. 문서가 틀렸고 아직 온라인에는 업데이트
안되었다고...  ㅎ....
그런데 이런거 물어 보는 사람이 한국에는 없는데 이걸로
뭐하냐고 물어 봄....ㅎ....
아무튼 제대로 동작했고 이후에도 이름이 기억 안나는 이분과 자주
연락을 했었더랬다.


2주 후 본격적으로 H-IDS에 투입되려 했으나 이전에 국책 과제로
수행한 N-IDS의 보고서를 제출해야 해서 보고서 작성 업무를 맡게 되었다.
연구 소장님 말고는 다른 사람은 모르고 내 논문이 N-IDS 구현이여서였다.

----------------------------------------------------------------------------------------------------------------------------

이 회사가 어려워져 당시 KTF(현재 KT)에 파견 근무 나가서 C++/STL로 FTP 백업
시스템 만들고 부산으로 이직했다.
부산으로 이직한 회사에서 현대 오토넷과 차량용 네트워크 관련 개발에 투입되었다.
여기에 당시 열풍이던 홈네트워크 펌웨어 개발도 맡게 되었다.
차량은 QNX 운영체제에 프리스케일 보드를 사용하였는데 QT로 UI를 구현하였더랬다.
문서 작업도 하고 Zigbee 등 센서 네트워크도 써보고 하다가 
다시 이직하게 되었다.

----------------------------------------------------------------------------------------------------------------------------

초반 썰이 너무 길었다.
아무튼 이런저런 일로 하드웨어와 펌웨어 등에 관심의 초점이 맞추어 졌고
내 당시의 목표는 ARM 전용 운영체제와 우주 개발 프로젝트 참여 정도 였었다.
(우주 정복은 다들 한번쯤 상상해 보지 않는 가?? )
2000년도 중반 당신 내 생각으로는 ARM이 가장 주류를 이룰 것 같았고
특정 CPU에 특화된 OS를 만들어 볼 수 있겠다 싶었다.
여기에 큰 목차는 아래와 같았다.


1. ARM OS 개발
1.1 메모리 구조 설계 등
1.2 어플리케이션 로더
1.3 테스크 구조 설계 등
1.4 생각 안남.... 흑...(어디 적어 놨는데....ㅜㅜ)

2. 1항목을 위한 컴파일러 개발
2.2 어셈블러
2.2 C 컴파일러 : 어휘분석기, 전처리기, 컴파일러(C to Assembly)
2.3 링커

3. 파일 구조 설계 : 부트로도/커널/시스템파일/실행파일

대충 이렇는데 저거 적어 놓은 노트가 있었는데 벌써 10여년 전이라 찾기가 좀 글타..

암튼...
결론은...
커널에 접근하는 device driver와 device tree가 등장했고
지금 글을 쓰게 된다면 여기에 관련된 글을 쓰게 될 것 같다.

이거 말고 BootLoader 역시 관련 관심사인데
최근 근무한 회사에서 MIPS용 uboot을 좀 들여다 봤기 때문에
관련 글도 쓰게 되지 싶다.
아무튼 썰은 이제 그만....

728x90