-
임베디드 시스템, 펌웨어 란 무엇일까?과학&기술 2022. 8. 27. 10:45
임베디드 시스템 순서
기구 -> 아트웍 -> 회로 -> 펌웨어,디바이스드라이버,BSP -> 커널 -> 애플리케이션
BSP(Board Support Package)
https://msnayana.blog.me/80065524365
영어 그대로 해석하면 되겠지만, 쉽게 말해 부트로더 + 실시간 운영체제를 로드하기 위한 최소한의 장치를 지원하고 주변 장치를 지원하기 위한 드라이버를 총칭한다.
루트 파일 시스템(root file system), 툴체인(toolchain) 등을 포함하기도 한다.
(커널은 통상적으로 제외된다. )
칩 제조업체(S사)를 예로 레퍼런스 보드를 개발하여 보여준다 하면, BSP까지는 공급하여 테스트를 하게 된다.
한마디로, 최소한 보드의 기능 및 성능을 확인할 수 있도록 동작시키는 패키지로 보면 되겠다.
MS사의 설명을 따르면, 특정 하드웨어 플랫폼에 임베디드 운영체제를 빠르게 구축하는 데 사용되는 소스 바이너리 소프트웨어 패키지라고 한다. 드라이버+OAL(OEM적응 계층)+HAL(하드웨어 추상화 계층) + BIOS라고 한다.
정리하자면, 부트로더+드라이버+BIOS+파일 시스템+툴체인 정도로 보면 되겠다. (정확한 요소를 딱 집지는 못하겠다)
펌웨어
펌웨어 개발자라고 하면 회로단 또는 커널까지 연관되는 경우가 많다... 원래 펌웨어 자체만 따지면 그냥 하드웨어를 고려한 소프트웨어로 보면 된다.
펌웨어는 PROM(Programmable Read-Only Memory) 내에 삽입되어 영구적으로 컴퓨터 장치의 일부가 되는 프로그램이다. 다들 알다시피 펌웨어는 소프트웨어와 하드웨어 중간 단계에 있는 것으로 소프트웨어에 좀 더 가깝다. IBM에서는 마이크로 코드라는 용어를 쓴다고 한다.
마이크로 코드 시뮬레이션을 통해 테스트된다고 한다...
컴퓨터나 주변장치의 작동을 제어하기 위해 rom에 직접 프로그램되어 있는 영구적인 명령과 데이터.
사실상 펌웨어 개발자는 주변장치. 즉 하드웨어적인 접근에 관련된 소프트웨어를 일반 사용자가 수정 못하는 rom에 박아 넣는 역할을 한다. 이러면서 다른 요소들을 알아야 하므로 사실상 임베디드 시스템 개발자가 더 맞는지도 모르겠다.
확실한 건 소프트웨어와 다르기 때문에 이름이 다르다는 것.. 소프트웨어는 OS에 의해 실행 여부나 작업 할당이 달라질 수 있다. 또한 OS가 알아서 해주는 면이 있기 때문에 코드만 짜면 된다.. 펌웨어는 하드웨어를 고려하여 작성하고 OS는 고려 안 한다.
커널
(기본 개념이므로 대충 적음. 리눅스를 전제로.)
운영체제를 이루는 가장 핵심적인 소프트웨어
시스템의 구동에 필요한 환경 설정과 수행되는 프로그램들을 스케줄링하는 소프트웨어 집합
모놀로식 커널과 마이크로 커널
커널을 공부한다면 필수적으로 알아야 하는 개념으로 사료된다.
마이크로 커널 : OS는 각 기능을 서브 시스템으로 분할하여 핵심 기능만을 커널에 담고 코어 부분에서 담당하도록 한다. (하나의 서비스가 죽더라도 전체 커널이 panic되지 않기 때문에 임베디드에 쓰인다는데 이해가 잘 안 간다.) File system이나 Driver는 유저 공간에서 실행된다.
모놀리식 커널 : 단일형 커널이라고도 한다. 입출력, 네트워크, 장치 지원 등 일반적인 기능들을 동일한 메모리 공간에 적재 및 실행한다. 리눅스는 하나의 프로그램으로 수행되므로 모놀리식이다. 애플리케이션을 제외하고 모두 커널이 관리한다.
Kernel Module
마이크로 커널이 가지는 모듈 기능을 모놀로식 커널에 도입함으로써 '커널 모듈'개념이 등장한다.
커널 모듈(Kernel modules, KMOD) 등의 여러 가지 이름으로 쓰인다.... LKM(Loadable kernel module)이라는 표현도 쓴다. OS에서 실행 중인 커널을 확장하는 코드를 포함하는 목적 파일로써, 새로운 하드웨어(디바이스 드라이버)나 파일 시스템을 지원하거나 시스템 호출을 추가하는 데 사용된다.
리눅스 측면에서 얘기하자면 v2.x 가 되면서 커널 모듈 개념이 추가되었다. 커널 크기를 줄이기 위한 방법 중 하나로 커널 전체를 컴파일할 필요 없이 모듈단위로만 컴파일해서 동적으로 커널에 추가해주는 개념이다.
혹시 모르니 이것저것 다 포함해주는 커널과 다르게 나중에 필요에 따라 추가하므로 확장성, 재사용성을 높일 수 있다.
다시 말해, 디바이스와의 연결 및 구동을 제어하기 위한 커널은 매번 새로운 기능을 추가하거나 디바이스를 추가할 때마다 커널을 다시 컴파일하거나 시스템 재부팅을 해야 할 필요성이 사라지게 된 것이다.
커널 모듈에서 좀 더 작은 개념이 디바이스 드라이버이다.
디바이스 드라이버
커널 모듈은 커널 영역에서 실행되므로 사용자 접근이 불가능한 반면 디바이스 드라이버는 가상 파일 시스템에 연관시켜서 사용자 접근을 허용시켜준다. 상위단 애플리케이션에게 연결을 허용하는 역할.
펌웨어(Firmware)와 디바이스 드라이버(Device Driver)
펌웨어는 디바이스를 구동하는 소프트웨어이다. 디바이스 드라이버는 당신의 OS가 어떻게 장치(device)와 통신하는지를 알려주는 소프트웨어이다. 모든 디바이스가 펌웨어를 가지고 있진 않다. 일정 수준의 지능, 복잡도를 필요로 하는 경우 가진다.
펌웨에를 갖는 장치는 디바이스 내부에 장착돼서 나온다. ROM 아니면 PROM chip와 같이 디바이스가 초기화(부팅)될 때 로드될 장치가 필요하다. 펌웨어의 예로 DVD player, 핸드폰, 디지털카메라 등..
그 이상의 연산을 필요로 한다면 OS가 들어가게 되고 그 위에 응용 소프트웨어를 작성하게 되는데.. 장치와의 통신이나 관여를 OS가 제한하기 때문에 이것을 커널단에서 연결시켜주는 역할을 해주는 것이다...
펌웨어가 커널단에서 구현된다고 하는데 참 애매하다...
펌웨어는 ROM에, OS(커널)은 DISK에
펌웨어는 작은 프로그램, 커널은 집합.
펌웨어는 저수준 연산을 목적, OS는 high-level 인터페이스가 동반됨.
펌웨어라는 게 대충 아는 건 어렵지 않지만 개발을 하는 관점에서 혼동되는 면이 있다. 시스템 발전과 개발환경이 바뀌어서 그런지 모르겠다만....
펌웨어는 운영체제의 한 방식으로 장치를 제어하기 위한 것이므로 훨씬 제한적이고 하나의 목적인 반면 OS(커널)은 여러 종류의 소프트웨어를 여러 하드웨어 장치에서 실행할 수 있는 범용 시스템
현대 시스템에서는 펌웨어가 바로 동작하는 게 아니라 디바이스 드라이버(device driver)에서 로드하도록 구현된다......
차이점은 여러 사람들이 서로 다른 관점에서 서술한다.
펌웨어는 딱 하드웨어적으로 만들어진 것에 생명을 불어넣어 주는 프로그램 정도이고 디바이스 드라이버는 OS와 하드웨어 구성 요소 사이의 매개체로 묘사된다. 하지만........ OS를 집어넣을 경우 펌웨어가 OS의 디바이스 드라이버를 통해 로드되는 것으로 보인다.
BIOS(Basic Input/Output System)
일반적으로 메인보드의 펌웨어다. 바이오스는 OS 중 가장 기본적인 컴퓨터 입출력을 처리하는 소프트웨어. 따라서 OS는 아니다. IBM 기준으로 부팅 절차에서 하드웨어 초기화를 수행하고 OS나 응용프로그램에게 런타임 서비스를 제공한다.
원래는 롬에 존재했으나 현재는 플래시 메모리가 바이오스의 주된 저장 매체이다.
실제 운영 체제를 동작시키기 위한 시스템 정도다.
Evaluation Board (평가 보드, 샘플 보드)
http://sewoon.com/mall/kims_lib/board/dictionaryboard.php?table=Dictionary&action=print&l=488
Evaluation이란 용어는 무언가의 가치를 평가해본다는 의미이다. 이것은 S/W와 H/W 전반에 걸쳐 사용되는 용어로써, 해당 제품을 구매하기 전에 샘플 혹은 데모 버전으로서 사용해본다는 의미가 담겨있다.Evaluation board란 주로 IC 등의 성능을 테스트해보기 위한 일종의 Jig board를 의미한다. 즉 실제로 똑같이 사용될지는 알 수 없지만, 시스템 제작을 위해 해당 IC가 어느 정도 성능을 낼 수 있는지 보여주기 위해 IC제작사 측에서 측정용 Jig board를 꾸리고 칩을 실장 하여 만들게 된다.
RF에선 RFIC나 MMIC 등의 성능을 가늠해보고 튜닝 성을 검증하기 위해 대부분 Evaluation board를 제공한다. 하지만 실제 사용될 시스템의 PCB에서는 특성이 많건 적건 변하게 되는데, 시스템 설계자가 해야 되는 중요한 작업 중 하나가 바로 이러한 상황에 대한 튜닝 작업들이다.
그러므로 Evaluation Board 상의 소자 배치와 값을 그대로 믿고 쓰기보다는, 해당 RFIC/MMIC에서 끌어낼 수 있는 성능이 어떤 지를 검증해보기 위한 용도라고 보는 것이 더 적합하다.
수 GHz 대역의 RFIC류는 이런 evaluation board가 기본적으로 제공될 수 있지만, 수십GHz 대의 MMIC의 경우는 패키징 자체가 매우 어려워서 bare chip으로만 제공하는 경우가 많다. 즉 사용자가 직접 패키징을 해서 성능을 검증해야 한다. 반면 특수하게 세라믹/에폭시 패키지를 응용하여 evaluation board를 제공하는 경우도 있지만 그리 많지는 않다.
'과학&기술' 카테고리의 다른 글
Visual Studio 2017 프로젝트 2019에서 사용하기 (0) 2022.09.12 인공날씨란? 기상조절? 인공강우? 날씨 조작? (0) 2022.08.28 [Anaconda/Win10] TF기반 YoloV4 학습/테스트 (0) 2022.08.27 [Powershell] 하위 특정 폴더 삭제 & 각 상위 폴더로 일괄 이동시키기 (0) 2022.08.27 CUDA 10.2 + Visual Studio 2019 연동 (0) 2022.08.27