임베디드 개발에 가장 적합한 Linux 배포판은 무엇입니까?
조직에서 IoT 솔루션을 배포하는 경우 임베디드 시스템 개발이 표준 데스크톱 개발과 약간 다르다는 것을 알고 계실 것입니다. Linux의 저렴한 비용은 IoT 개발자에게 매력적이기 때문에 고가의 독점 Kernel 대신 임베디드 개발을 위해 Linux를 선택하는 경우가 많습니다. 개발자가 가상 머신을 사용하여 대상 장치와 유사한 환경에서 작업하는 것은 드문 일이 아니지만, 가상 머신에서 개발하는 것은 어색할 수 있습니다. 대신 개발자는 임베디드 시스템용으로 특별히 설계된 배포판으로 작업할 수 있습니다.
독점 임베디드 운영 체제에 비해 Linux는 비용이 저렴하고, 여러 공급업체로부터 소프트웨어, 개발 및 지원을 받을 수 있으며, Kernel이 안정적이고, 소스 코드를 읽고 수정하고 재배포할 수 있는 기능이 용이합니다. 이러한 이유와 그 이상의 이유로 Linux는 임베디드 시스템에서 가장 많이 사용되는 옵션이 되었습니다.
하지만 디바이스에 Linux를 배포할 때는 다양한 옵션이 있습니다. 데스크톱 및 엔터프라이즈급 디바이스용으로 빌드할 때 개발자는 일반적으로 배포 환경을 가장 잘 모방할 수 있는 Ubuntu와 같은 배포판을 선택하고 VirtualBox 및 Docker와 같은 도구의 도움을 받기도 합니다. 하지만 이러한 설정은 임베디드 시스템 프로그래밍에는 적합하지 않습니다. 개발 환경은 매우 다르며 빌드 출력은 Kernel, 디바이스 드라이버, 라이브러리, 애플리케이션 소프트웨어, 심지어 부트로더까지 대상 디바이스에 대한 전체 소프트웨어 이미지로 구성되어야 합니다.
임베디드 개발을 위해 Linux 배포판에 접근하는 경우, 많은 사람들이 Debian 또는 Red Hat과 같은 데스크톱 배포판으로 시작하여 설치된 이미지가 대상 장치에 맞을 때까지 불필요한 구성 요소를 제거합니다. 많은 Linux 개발자가 데스크톱 Linux 사용자이며 평소 사용하는 런타임 패키지에 액세스할 수 있기 때문에 이는 자연스러운 방법입니다. 한 가지 옵션은 실제로 디스플레이와 키보드를 대상 디바이스에 연결하여 직접 개발하는 것입니다. 하지만 이 접근 방식은 까다로울 수 있습니다. 데스크톱 배포는 리소스가 적은 시스템을 위한 것이 아니며 패키지를 수동으로 추가하고 삭제하는 것은 어렵고 오류가 발생하기 쉬운 작업일 수 있습니다.
임베디드 Linux란 무엇인가요?
자동차 컴퓨팅, 의료 기기, 사물 인터넷(IoT), 공장 자동화는 임베디드 Linux에서 실행되는 임베디드 시스템 중 일부에 불과합니다. 컴퓨터는 특정 하드웨어(예: CPU, 메모리, 마더보드)를 사용하여 실행되며 임베디드 시스템 장치도 마이크로프로세서와 컨트롤러에서 실행되지만 그 규모는 더 작습니다. 이러한 장치에는 더 적은 리소스를 사용하는 운영 체제가 필요하며 개발자는 데스크톱에서 운영 체제로 배포할 수 있어야 합니다.
임베디드 Linux는 저렴한 비용, 오픈 소스 코드, 가벼운 스토리지 요구 사항, 더 적은 리소스로 실행할 수 있는 기능으로 인해 IoT 개발자가 선택하는 경우가 많습니다. 여러 소비자가 사용하는 시스템을 배포하는 조직에 매우 중요한 안정적인 옵션입니다. OS 충돌에 대한 걱정이 전혀 없습니다. 예를 들어, Linux를 기반으로 하는 Android 운영 체제는 전 세계 시장 점유율의 87%를 차지하며 매우 안정적인 OS입니다.
임베디드 Linux는 RTOS인가요?
독점 실시간 운영 체제(RTOS)는 임베디드 Linux의 매력적인 대안이 될 수 있지만, 그 자체로 어려움이 따릅니다. 개발자가 IoT 개발 플랫폼과 방법을 모색할 때 임베디드 Linux 또는 RTOS라는 옵션을 접하게 됩니다. 둘 사이에는 뚜렷한 차이점이 있으므로 둘 중 하나를 선택하기 전에 신중하게 선택해야 합니다.
RTOS가 더 개발자 친화적일 수 있지만, 커스터마이징을 지원하거나 다른 개발자 프로젝트와 통합하려는 엔터프라이즈 애플리케이션의 경우 임베디드 Linux가 더 직관적인 통합 환경을 제공합니다. RTOS는 시간에 민감한 애플리케이션을 위해 설계되었습니다. 시간이 매우 중요한 이벤트가 있는 시스템이 아니라면 임베디드 Linux 시스템이 개발자에게 더 많은 유연성을 제공합니다.
Linux와 임베디드 Linux의 차이점은 무엇인가요?
대부분의 개발자는 대상 시스템에 맞는 소스 코드를 컴파일해야 한다는 것을 알고 있습니다. 임베디드 시스템용으로 개발할 때 개발자는 데스크톱에서 코드를 작성하지만 크로스 플랫폼 툴체인을 사용하여 다른 환경에 배포합니다. 임베디드 시스템 배포는 데스크톱과 매우 다릅니다. 데스크톱 컴퓨터는 8086 마이크로프로세서 아키텍처를 대상으로 하지만 임베디드 시스템은 일반적으로 ARM, 8051, PIC 및 AVR 등 여러 마이크로프로세서를 대상으로 할 수 있습니다.
데스크톱 Linux와 임베디드 Linux의 몇 가지 다른 차이점은 다음과 같습니다:
- 임베디드 시스템은 전력 사용량이 적고 일반적으로 배터리로 작동합니다.
- 임베디드 시스템은 훨씬 더 컴팩트합니다.
- 많은 임베디드 시스템이 건강 경보 시스템, 의료 장비, 원자력 기계, 가정 보안과 같은 중요한 장치에 전력을 공급합니다.
- 임베디드 Linux 시스템에는 데스크톱에 설치된 수많은 구성 요소에서 실행할 수 있는 모든 드라이버와 라이브러리 대신 대상 프로세서에서 작동하는 데 필요한 구성 요소만 포함되어 있습니다.
임베디드 Linux OS의 예는 무엇인가요?
Linux Kernel은 오픈 소스이므로 누구나 변경된 형태로 수정하고 배포할 수 있습니다. 임베디드 Linux의 여러 버전이 출시되어 있는 것처럼 여러 데스크톱 버전의 Linux가 시중에 나와 있습니다. 개발자는 자신만의 맞춤형 Linux 버전으로 자유롭게 작업할 수 있지만 이미 존재하는 안정적인 버전을 사용하는 것이 훨씬 더 편리합니다.
이미 안드로이드 운영체제에 대해 언급했습니다. Android는 Google에서 개발한 임베디드 Linux 시스템으로, 다른 개발자가 수정하고 배포할 수 있는 오픈 소스 라이선스에 따라 배포됩니다. 데비안은 데스크톱 Linux 배포판의 한 예로, 라즈베리파이 장치에 내장된 버전도 있습니다. 라즈베리는 소형 라즈베리 파이 컴퓨팅 장치를 구동하는 데 사용되는 데비안 기반 운영 체제입니다.
임베디드 시스템에서 Linux를 사용하는 이유는 무엇인가요?
개발자가 임베디드 시스템 대상 운영 체제로 Linux를 선택하는 이유는 여러 가지가 있습니다. 첫 번째는 Linux는 완전히 커스터마이징이 가능하다는 점입니다. 개발자는 Linux Kernel을 자유롭게 가져와 운영 체제의 자체 배포판을 만들거나 기존 배포판을 가져와서 약간의 변경 사항을 추가하여 자신만의 버전을 만들 수 있습니다.
Linux는 무료이므로 Linux를 탐색하고 시작하려는 신규 개발자에게는 시작 비용이 저렴합니다. Linux로 작업하는 개발자가 많을수록 시스템에 임베드될 가능성이 높아집니다.
마지막으로, 널리 사용되기 때문에 타사 개발자가 더 잘 지원할 수 있습니다. 다른 개발자가 자신의 프로젝트에 통합할 수 있는 시스템을 구축하는 것이 목표라면 Linux가 더 직관적입니다.
임베디드 Linux 운영 체제는 어떻게 선택하나요?
임베디드 Linux 운영 체제를 선택하는 것은 목표, 대상 디바이스 운영, 출시 시간 및 필요한 응답성에 따라 크게 달라집니다. 많은 개발자가 널리 사용되고 이해도가 높다는 이유로 안드로이드를 선택하는 경우가 많지만, 올바른 OS를 선택하는 데 도움이 되는 몇 가지 질문을 고려하세요:
- 타이밍이 중요한가요? 정확한 타이밍이 필요한 애플리케이션이 있다면 실시간 운영 체제를 사용해야 합니다. Linux는 RTOS가 아니지만 RTLinux와 같은 확장 프로그램을 고려할 수 있습니다.
- 메모리 크기와 CPU 성능이 제한되어 있나요? 일반적인 Linux Kernel은 1.5MB로, 일부 시스템에서는 너무 클 수 있습니다. 애플리케이션 기능에 적합한 구성 요소만 포함된 맞춤형 Linux Kernel을 사용할 수 있습니다.
- 네트워크 성능이 중요한가요? Android를 사용하는 모바일 앱에는 네트워킹 기능이 있지만, 네트워킹이 주된 목적이라면 Android가 필요하지 않습니다. 네트워크 성능을 위해 특별히 설계된 대안으로는 OpenWRT/LEDE가 있습니다.
- 그래픽 사용자 인터페이스가 제공되나요? Android의 사전 설치된 GUI는 사용자 인터페이스에 크게 의존하는 시스템에는 좋은 옵션일 수 있습니다.
- 출시 기간이 짧습니까? 보다 일반적인 Linux 배포판을 사용하면 개발 시간을 단축하는 데 도움이 됩니다. Ubuntu는 일반적으로 더 빠른 출시를 위해 사용됩니다.
임베디드 개발에 가장 적합한 Linux 배포판은 무엇입니까?
개발자는 코드를 작성하고 대상 운영 체제에 컴파일하기 편리한 환경이 필요합니다. 가상 머신을 사용하여 대상 배포를 설정할 수도 있지만 로컬 머신에 설치되고 크로스 플랫폼으로 배포되는 도구를 사용하는 것이 훨씬 더 편리하고 편안합니다. 다음은 임베디드 개발을 위한 몇 가지 훌륭한 Linux 배포판입니다:
Yocto
임베디드 시스템용 Linux 배포판으로 매우 인기 있는 비데스크톱 옵션 중 하나는 오픈임베디드라고도 알려진 Yocto입니다. Yocto는 수많은 오픈 소스 애호가, 일부 유명 기술 지지자, 많은 반도체 및 보드 제조업체의 지원을 받고 있습니다. Yocto 프로젝트 빌드는 타깃 런타임 바이너리, 패키지 피드 및 타깃 SDK를 함께 래핑합니다. 레이어를 통해 쉽게 확장할 수 있으며, 이를 통해 기능과 특징을 추가할 수 있습니다. Yocto의 모듈식 아키텍처는 매우 유연하며, 잘 정의된 레이어 우선순위와 재정의 기능을 제공합니다. 6개월마다 새 릴리스가 출시되며 문서가 항상 철저합니다.* Yocto의 유일한 단점은 초보자가 사용하기가 까다로울 수 있다는 것입니다.
빌드루트
빌드루트는 Yocto의 보다 가벼운 버전을 목표로 합니다. 빌드루트는 온-타겟 패키지 관리를 지원하지 않으며 모든 패키지에 대한 모든 컴파일 시간 옵션 설정을 비활성화합니다. 실행 중인 시스템에 새 패키지를 설치할 수 없습니다. 이로 인해 시스템이 작아지고, 많은 사람들이 빌드루트를 단순히 펌웨어 생성기라고 부를 정도로 작아집니다(이미지가 대부분 빌드 시점에 고정되기 때문입니다). 빌드루트 프로젝트 빌드는 루트 파일 시스템 이미지와 Linux 배포에 필요한 기타 보조 파일, Kernel, 부트로더 및 Kernel 모듈, 모든 대상 바이너리를 빌드하는 데 사용되는 툴체인을 함께 포함합니다. 빌드루트의 가장 큰 장점은 일반 메이크파일과 Kconfig 언어를 사용하기 때문에 배우기가 매우 쉽다는 것입니다. 가장 큰 단점은 빌드루트의 최소한의 특성으로 인해 커스터마이징이 어렵다는 것입니다.
OpenWRT/LEDE
OpenWRT/LEDE는 네트워크에서 액세스할 수 있는 패키지 리포지토리를 위한 바이너리 이미지를 생성하는 데 목적이 있습니다. 주로 소비자 라우터용 커스텀 펌웨어에 사용됩니다. 상업용 디바이스의 펌웨어를 교체해야 하는 경우, 특히 임베디드 설계가 네트워킹에 중점을 둔 경우 OpenWRT/LEDE를 사용해야 합니다. 그러나 설계에 유연하지 않은 중대한 정책 결정을 강요합니다. 상당한 커스터마이징이 필요한 경우 빌드루트나 Yocto를 추천합니다.
* 혜택에 대한 자세한 정보: https://www.embitel.com/blog/embedded-blog/why-yocto-is-a-framework-of-choice-for-creation-of-embedded-linux-distributions
임베디드 시스템에 보안 업데이트를 적용하는 방법(그리고 그 이유)?
임베디드 시스템에서 애플리케이션을 업데이트하는 것은 까다로운 작업입니다. 잘못된 패치 시나리오를 적용하면 고객이 '브릭된' 디바이스를 경험할 수 있습니다. 안전하지 않은 업데이트로 인해 디바이스가 손상될 수 있습니다. 사용자가 수동으로 펌웨어를 패치할 수도 있지만, 사용자는 시간을 내거나 업데이트가 중요하다는 사실조차 모르는 경우가 많습니다. 이로 인해 시스템이 손상될 수도 있습니다. 예를 들어, 패치가 적용되지 않은 IoT 디바이스는 가장 큰 분산 서비스 거부(DDoS) 공격 중 하나를 일으켰습니다. 실제로 IoT 공격은 2019년에 300% 증가했습니다. 패치와 업데이트가 디바이스와 사용자의 보안에 매우 중요하다는 것은 분명합니다.
통신은 항상 네트워크에서 암호화되어야 하며, 공격자가 패치 파일을 수정할 수 없도록 디지털 서명을 사용해야 합니다. 암호화된 통신과 디지털 서명은 중간자 공격을 차단하고 변조를 방지합니다. 소프트웨어 업데이트를 배포하는 일반적인 워크플로우는 다음과 같습니다:
- 보안 채널을 사용하여 중앙 시스템을 폴링하여 업데이트를 사용할 수 있는지 확인합니다.
- 현재 업데이트가 설치된 버전과 호환되는지 확인합니다.
- 중간자 공격을 피하려면 보안 채널을 사용하여 패치를 다운로드하세요.
- 무결성 검사(예: 체크섬)를 사용하여 파일이 손상되지 않았는지 확인합니다.
- 디지털 서명이 유효한지 확인합니다.
- 파일을 해독합니다.
- 모든 압축 파일을 추출합니다.
- 롤백을 위한 백업 생성 등의 사전 설치 작업을 수행합니다.
- 패치를 설치합니다.
- 설치 파일 정리와 같은 설치 후 작업을 수행합니다.
- 정상 - 설치가 성공적으로 완료되었는지 확인하고, 그렇지 않은 경우 롤백을 수행합니다.
재부팅하지 않고 임베디드 시스템에 보안 업데이트를 적용하는 방법은 무엇인가요?
위의 워크플로우는 업데이트의 표준이지만 대부분의 패치는 시스템을 재부팅해야 합니다. 디바이스를 재부팅하면 사용자에게 방해가 되고 중요한 시스템이 중단될 수 있습니다. 예를 들어 메인 라우터를 재부팅하면 기업 네트워크에서 심각한 다운타임과 데이터 손상이 발생할 수 있습니다.
강제로 재부팅하는 대신 라이브 패치를 수행할 수 있습니다. 라이브 패치는 임베디드 시스템 업데이트와 관련된 여러 문제를 해결합니다. 재부팅할 필요가 없으며 업데이트 실패로 인해 디바이스가 고장날 가능성도 없습니다. 개발자는 더 이상 임베디드 Linux용 사용자 지정 패치 서비스를 만들 필요가 없으며, 사용자가 애플리케이션을 수동으로 업데이트하는 데 의존할 필요가 없습니다.
재부팅하지 않고 Linux를 업데이트하는 방법에는 명령줄 사용, kexec 도구 사용, 라이브 패치 솔루션 사용 등 크게 세 가지가 있습니다. 이 블로그 게시물에서는 타사 솔루션을 포함한 세 가지 방법과 패치 단계를 모두 다룹니다.
결론
임베디드 시스템 환경을 찾는 모든 개발자에게 Linux는 여러 가지 솔루션, 플랫폼, 배포판 및 도구를 사용할 수 있는 인기 있는 옵션입니다. 어떤 운영 체제를 선택하느냐에 따라 다양한 환경 옵션이 달라지지만, 한 가지 분명한 것은 항상 디바이스를 패치하고 업데이트할 수 있는 방법이 필요하다는 것입니다. 고객 디바이스를 중단시키지 않으면서도 최신 상태로 유지하려면 라이브 패치가 가장 좋은 솔루션입니다. 라이브 패치는 소비자 시스템을 안전하게 보호하는 동시에 적절한 시기에 재부팅할 수 있는 유연성을 제공합니다.

