임베디드 디바이스를 만들고 동작시키려면 다양한 기술이 필요하다. 그러므로 여러 팀의 협업이 필요하다. 임베디드 디바이스를 다루는 대학이나 회사들은 임베디드 디바이스를 크게 소프트웨어와 하드웨어로 나누고, 기술별, 모듈별, 부품별로 세분화해 연구나 작업을 진행한다. 이런 세분화된 팀을 만들어 각 업무의 전문성을 높이는 것은 업무의 효율성을 높이는 장점이 있다.
다만 소프트웨어 엔지니어나 하드웨어 엔지니어가 이런 세분화된 팀에서 각자 맡은 일 혹은 연관된 일만 수행한다. 그래서 실제 임베디드 디바이스 동작을 위한 다른 중요한 작업에 대해서 모르는 경우가 많다. 예를 들어 임베디드 소프트웨어 엔지니어들은 이미 만들어진 기본 보드위에서 기능을 개발하기 때문에 보드 관련 정보나 하드웨어 관련 정보를 알지 못하는 경우가 많다. 이런 정보 부족은 최적화를 위한 크로스 레이어 설계를 할 수 없게 만든다. 역자 역시 임베디드 및 반도체 업계에서 펌웨어 및 드라이버를 개발하지만 하드웨어 관련 용어나 지식이 부족해 문서 이해 등 여러 어려움을 겪었다. 또한 하드웨어 엔지니어와 의사소통이 원활하지 않았던 적도 있다. 심지어 소프트웨어 내부에서도 여러 계층이 있어 각 계층간 지식 공유가 원활하지 않은 경우도 흔하다.
개발 혹은 연구하는 임베디드 디바이스가 어떤 설계 및 개발 과정을 거치고 어떤 부품들이 조합되며 유지보수 되는지 전체적으로 살펴볼 기회가 있다면 임베디드 디바이스를 최적화할 수 있다. 물론 개발자 스스로의 역량에도 도움이 될 것이다.
이 책은 임베디드 디바이스 개념에서 시작해 디바이스에서 동작하는 운영체제, 고성능 작업을 위해 임베디드 디바이스에 연결되는 FPGA 개발, 보드 브링업, 펌웨어 개발 및 디버깅까지 다룬다. 임베디드 디바이스 개발 전체 과정을 디지털 오실로스코프를 직접 만들며 설명하고 있어 독자는 실제적인 임베디드 디바이스 개발을 직접 혹은 간접적으로 겪어볼 수 있다. 이를 통해 담당하지 않았던 다양한 분야의 작업들을 알 수 있을 것이다.
임베디드 디바이스의 다양한 분야를 다루기 때문에 독자와 친숙한 부분도 있지만 친숙하지 않은 부분도 있을 수 있다. 그러나 저자가 이런 부분들은 쉽게 설명하고, 실제 예제로 독자가 직접 수행할 수 있으므로 무난하게 이해할 것이다. 나는 알지 못했던 지식들을 배우며 재밌게 번역을 했다. 같은 임베디드 업계의 동료로서 독자들도 이런 재미를 느끼고 조금이나마 지식에 도움이 되기를 바란다.
임베디드 시스템하면 보통 노트북이나 태블릿, 패드, 휴대폰을 떠올릴 것이다. 그렇다면 임베디드 시스템이란 정확히 무엇일까? 나는 임베디드 시스템을 개발하면서 임베디드 시스템의 메모리나 CPU 등의 물리적 제약 사항을 주로 고려할 뿐 근본적인 임베디드 시스템의 정의나 특성을 파악한 적은 없었다. 이 책은 보통 순차적인 가상 세계와 병렬적인 물리적 세계를 통합한 가상 물리 시스템의 모델링 및 설계, 분석에 대한 공학 이론을 제공해 임베디드 시스템의 정의와 특성을 이해하고, 임베디드 시스템 모델 및 구현과의 관계를 파악할 수 있도록 돕는다. 임베디드 시스템이 실시간성이나 안전성에 민감하다면 이런 개념의 이해는 필수적이다.
기존 임베디드 시스템 책들은 물리적 시스템에만 집중하거나 프로그래밍 언어나 운영체제 혹은 최적화 기법 같은 소프트웨어 측면의 컴퓨터 과학에만 집중했다. 혹은 특정 주제를 너무 심도 있게 다뤄 임베디드 시스템을 개괄적으로 알기 원하는 입문자에게는 적합하지 않았다. 이 책은 물리적 서브시스템이 연산 및 네트워킹과 결합된 시스템인 가상 물리 시스템CPS을 통해 임베디드 시스템을 소개하며, 모델과 시스템 구현의 관계에 대한 ‘입문’ 과정을 제공한다. 임베디드 시스템 입문자를 위해 여러 학과의 임베디드 시스템 관련 지식을 체계적으로 정리하고 결합해 임베디드 시스템의 구현과 분석을 위한 원칙적이고 과학적인 접근 방식을 제시하며, 모델 기반 시스템 설계와 임베디드 소프트웨어에 집중하고 있다. 이 책이 여러 학과의 지식을 결합된 가상 물리 시스템을 다루기 때문에 한 학과의 지식에 익숙한 일반적인 독자는 처음 보는 용어나 개념이 등장해 어렵다고 느낄 수 있다. 하지만 임베디드 시스템 업계에서 함께 일하는 사람들의 배경 지식을 이 책을 통해 경험할 수 있고, 다양한 기본 이론을 이해하고 실제 임베디드 시스템에 적용하려고 노력하면 더 견고한 임베디드 시스템을 만들 수 있을 것이다.
이 책은 가상 물리 시스템을 위한 모델링, 설계, 분석의 세 가지 주요 프로세스를 설명한다. 이를 통해 가상 물리 시스템을 어떻게 설계하고 구현하는지 이해하는 것이 목적이다. 그리고 대학에서 교재로 사용하기 적합하도록 구성돼 있고, 이해를 돕는 많은 예제가 포함돼 있다. 또한 각 장은 관련된 카테고리로 묶여있고 각 장 사이의 연관성도 명확하게 표현돼 있어 책을 읽을 때 원하는 부분을 먼저 읽을 수 있다. 이미 53개국의 282 기관에서 이 책을 사용했으며, 구성이나 예제들을 보며 저자들이 정성 들여 쓴 책임을 느낄 수 있었다.
이 책은 운영체제 교과서처럼 임베디드 시스템의 기본 이론을 설명하고 있다. 이 책이 더 의미가 있으려면 독자가 임베디드 시스템을 구현하거나 분석할 때 이런 이론들을 적용하려고 노력해야 한다. 보통 이런 노력은 시간이 많이 필요하고 기술적으로 어렵지만 이를 통해 한 단계 더 성장할 수 있다고 믿는다. 이 책이 임베디드 관련 학계와 업계에 계시는 분들의 지식에 조금이라도 도움이 되길 바란다.
요즘 소프트웨어 업계의 화두는 IoT와 Automotive다. 관련 업계를 살펴보면, 대기업들은 기존 핸드폰이나 TV 혹은 가전 사업에서 IoT 사업이나 Automotive 관련 전장 사업을 전략적 차세대 사업으로 중점 육성 중이며, 각종 반도체 하드웨어 업체들도 IoT에 대응할 목적으로 임베디드 소프트웨어 SDK를 개발해 반도체와 함께 판매하고 있다. 이를 반영하듯 기존에는 강력한 시스템 성능을 가진 하드웨어가 뒷받침되는 일반적인 리눅스 시스템에 관한 책들이 많이 출간됐지만, 요즘에는 임베디드와 관련된 책들이 많이 출간되고 있다.
이 책은 현재 트렌드를 반영하는 임베디드 시스템과 관련돼 있다. 임베디드 컴퓨터는 최근 몇 년간 매우 복잡해져서 개발자는 좋은 주변 장치를 찾거나 관리하는 데 시간을 소비하지 않고 문제 해결법에만 집중해야 빠른 개발이 가능하다. 이 책은 업계에서 많이 사용하는 비글본 블랙과 SAMA5D3 Xplain, Wandboard를 사용해 주변 장치를 쉽고 빠르게 관리하는 실제 예제를 담고 있으며, GNU/리눅스 임베디드 시스템을 신속하게 프로그래밍 및 관리하도록 도와주는 안내서다. 임베디드에 경험이 많지 않은 프로그래머라도 이 책에서 설명하는 보드들의 실제 예제를 통해 임베디드 주변 장치 사용법을 빠르게 익힐 수 있고, 보드마다 비슷하지만 조금씩 다른 사용법을 비교해 가면서 사용법을 배울 수 있다. 또한 예제들은 임베디드 환경에서 최신 리눅스 커널 버전과 데비안/우분투 배포판을 사용하고 있으며, C나 배시, 파이썬 등을 사용해 주변 장치를 다루는 방법을 쉽게 설명하고 있다.
번역하는 도중 이해가 안 되는 부분이나 잘못된 부분들은 저자와 수 차례 메일을 통해 논의를 하면서 원서의 정오표를 수정했다. 아무쪼록 독자들이 임베디드 시스템을 쉽게 다루는 데 도움이 되길 바란다. 한창 열심히 크고 있는 아들 민우가 이 책을 보면서 엄마 은정을 위한 IoT 기기를 만들어줄 수 있는 날을 기다려본다.