blog

Nuttx RTOS 시작하기 - 소개 및 코드 실행

기사 XXX는 자동차 3 도메인에서 다양한 OS를 실행하고 있으며, 가장 일반적인 것은 매크로 커널 Linux 및 Android와 마이크로 커널 QNX, freeRTOS와 같은 R...

Aug 15, 2025 · 16 min. read
シェア

기사 XXX는 통합 OS 하모니 OS를 소개했으며, 자동차 3 도메인에서 다양한 OS를 실행하고 있으며, 가장 대표적인 것은 매크로 커널 Linux 및 Android와 마이크로 커널 QNX, freeRTOS와 같은 RTOS 등이며, 많은 구성 요소와 애플리케이션 개발에 대한 다양한 OS에서 도서관 상황, 이러한 구성 요소 및 중복 생성이 불가피합니다. 이러한 구성 요소와 응용 프로그램은 각 OS에 맞게 조정되어야하며 이러한 OS를 하나로 융합 할 수 있다면 많은 이점을 가져올 것입니다. 특히 사물 인터넷 시대에는 다양한 형태의 제품에 OS가 필요하고 다양한 대기업이 통합 퓨전 커널 진영에 합류했기 때문에 nuttx도 합류했기 때문에 연구하고 연구 할 가치가 있습니다.

소개

공식 웹사이트: nuttx.apache.org/ 문서: nuttx.apache.org/docs/latest...

nuttx

NuttX는 07년 그레고리 너트가 공식적으로 오픈소스로 공개하고, 2016년 삼성이 타이젠RT 운영체제의 커널로 선정했으며, 수년간 오픈소스 커뮤니티의 끊임없는 노력 끝에 2019년 샤오미의 원동력으로 아파치 재단에 정식으로 진입한 성숙한 실시간 운영체제로, 기능이 풍부하고 성능이 안정적이며 상업적으로 성숙해졌습니다. Fitbit의 지난 두 세대의 팔찌 제품과 소니의 다양한 소비자용 제품이 NuttX를 기반으로 개발되었습니다.

NuttX는 표준 준수와 작은 설치 공간에 중점을 둔 실시간 운영 체제로, 8비트 마이크로 컨트롤러 환경에서 64비트 마이크로 컨트롤러 환경으로 확장할 수 있는 Posix 및 ANSI 표준을 주요 관리 표준으로 삼고 있습니다. 이러한 표준에서 사용할 수 없거나 고도로 임베디드 환경에 적합하지 않은 기능에는 Unix 및 기타 일반적인 RTOS의 추가 표준 API가 사용됩니다.

NuttX는 특정 표준을 준수하고 8비트~32비트 마이크로컨트롤러 환경에 맞게 확장성을 최대한 확보하는 데 중점을 두고 있으며, ARM, MIPS, AVR 등 다양한 프로세서 아키텍처 및 하드웨어 플랫폼에서 실행됩니다.

NuttX는 POSIX 표준을 따르고 Linux에서 널리 사용되는 API 인터페이스를 가지고 있으며 실시간 운영체제의 특성을 가지고 있습니다. 커널 공간과 사용자 공간을 분리하는 모듈식 설계를 채택하고 파일 시스템, 네트워크 프로토콜 스택, USB 호스트/장치 지원 등 풍부한 드라이버와 서비스 절차를 제공합니다. 동시에 멀티태스킹, 멀티스레딩, 세마포어, 메시지 큐, 이벤트 드라이버 및 기타 기능도 지원하여 사용자 개발 및 디버깅을 용이하게 합니다. NuttX 기능: 오픈 소스 및 무료: NuttX는 완전히 오픈 소스이며 무료로 다운로드하여 사용할 수 있는 무료 운영 체제입니다. 이식성: 다양한 프로세서 아키텍처와 하드웨어 플랫폼을 지원하며 이식성과 범용성이 뛰어납니다. 안정성과 신뢰성: 오랜 사용과 테스트를 거쳐 성숙하고 안정적이며 다양한 임베디드 애플리케이션의 요구 사항을 충족할 수 있습니다. 사용의 용이성: 배우기 쉬운 API와 문서로 개발자가 쉽게 배우고 사용할 수 있습니다.

NuttX 애플리케이션 시나리오:

  • 산업 제어 시스템: NuttX는 다양한 산업 자동화, 로봇 제어, 스마트 그리드 및 기타 산업 제어 분야에 적용할 수 있습니다.
  • 가전제품: NuttX는 모바일 기기, 홈 엔터테인먼트 시스템, 디지털 액자 등 다양한 가전제품에 적용할 수 있습니다.
  • 스마트 홈: 온도 제어, 조명 제어, 보안 모니터링 등 스마트 홈 분야에서 NuttX를 적용할 수 있습니다.

기능:

  • 사물 인터넷
  • 시스템 리소스에 대한 요구 사항은 Linux보다 훨씬 작지만 Linux 시스템과 유사한 기능과 성능을 제공할 수 있으며, 많은 저사양 Linux 시스템의 대안으로 볼 수 있습니다.
  • 기능은 시스템 리소스를 사용하는 다양한 제품 형태를 지원할 수 있도록 고도로 맞춤화되어 있으며 개발자는 실제 필요에 따라 시스템을 사용자 지정할 수 있습니다.
  • POSIX 인터페이스와 호환되므로 Linux 플랫폼의 기존 오픈 소스 라이브러리 및 구성 요소를 쉽게 포팅할 수 있습니다. 또한 소프트웨어 플랫폼이 하드웨어 플랫폼에서 분리되어 통합되므로 다른 하드웨어 플랫폼으로 포팅할 때 공급업체의 상위 계층 애플리케이션 코드를 더 잘 재사용할 수 있습니다.
  • NuttX 자체에서 풍부한 OS 구성 요소를 제공하므로 애플리케이션 개발자는 풍부한 OS 구성 요소와 애플리케이션 프레임워크를 활용하여 시스템 사용자 지정 및 애플리케이션 개발을 신속하게 완료하고 개발 비용을 절감하며 제품을 더 빠르게 출시할 수 있습니다.
  • 실시간: Nuttx는 정확한 시간 관리 및 응답을 제공하는 실시간 운영 체제입니다. 이는 엄격한 시간 제어가 필요한 임베디드 애플리케이션에 중요합니다. Linux 시스템은 실시간을 제공하지만 추가 구성 및 패치가 필요한 경우가 많습니다.
  • 휴대성: Nuttx는 휴대성이 뛰어나도록 설계되어 다양한 하드웨어 플랫폼에서 실행할 수 있습니다. 다양한 프로세서 아키텍처와 디바이스를 지원하며, Linux 시스템도 이식성이 뛰어나지만 일부 임베디드 디바이스에서는 더 많은 사용자 지정 및 조정 작업이 필요할 수 있습니다.

시중에는 많은 오픈 소스 또는 상용 RTOS가 있는데 왜 NuttX를 선택해야 하나요? 몇 가지 주요 이유가 있습니다:

  • NuttX는 POSIX 표준과 기본적으로 호환됩니다: NuttX는 상용 RTOS 중 POSIX API를 기본적으로 지원하는 유일한 실시간 운영 체제이므로 Linux 커뮤니티의 많은 오픈 소스 소프트웨어를 NuttX로 쉽게 포팅할 수 있어 오픈 소스 소프트웨어 포팅을 크게 간소화하고 코드 재사용을 촉진하며 학습 곡선을 줄이는 반면 다른 RTOS는 적응 계층이 필요하며, 일반적으로 POSIX API를 내부 API로 변환하기 위해 POSIX 인터페이스의 일부와만 호환됩니다.
  • 높은 완성도: NuttX는 파일 시스템, 네트워크 스택, 그래픽 라이브러리 및 드라이버 프레임워크를 통합하여 개발 비용을 절감합니다.
  • 모듈식 설계: 모든 구성 요소와 구성 요소의 내부 특성까지 Kconfig를 구성하여 조정하거나 끌 수 있으므로 필요에 따라 다양한 제품 형태에 맞게 시스템을 맞춤화할 수 있습니다.
  • 코드 간소화: 모든 컴포넌트는 코드와 데이터를 최적화하도록 특별히 설계되어 처음부터 코딩됩니다.
  • 경량: NuttX는 기존 운영 체제의 모든 기능을 구현하지만, 생성된 코드의 최종 크기는 여전히 매우 작을 수 있습니다.
  • Linux와의 호환성: NuttX의 전반적인 설계, 코드 구성 및 컴파일 프로세스는 Linux와 매우 유사하기 때문에 Android/Linux 개발자의 마이그레이션 비용을 크게 절감할 수 있습니다.
  • 활발하고 개방적인 커뮤니티: 많은 벤더와 오픈 소스 애호가들이 커뮤니티에 적극적으로 환원하고 있습니다.

NuttX시스템 아키텍처는

NuttX는 기존 운영 체제와 마찬가지로 스케줄링 서브시스템, 파일 서브시스템, 네트워크 서브시스템, 그래픽 서브시스템, 드라이버 서브시스템으로 구성되어 있습니다. 수평적으로 NuttX는 POSIX 및 ANSI에서 정의한 표준 C/C++ 인터페이스를 애플리케이션에 제공합니다. 표준화되지 않은 구성 요소의 경우 NuttX는 일반적으로 Linux 호환 API를 제공합니다. 아래쪽으로는 NuttX가 Arch API, 블록 디바이스 드라이버 인터페이스, NIC 드라이버 인터페이스, 디스플레이 드라이버 인터페이스는 물론 다양한 버스 및 주변 장치를 위한 하위 절반 드라이버 인터페이스를 정의하여 칩 벤더가 표준화 작업을 빠르게 완료하고 포팅 작업을 완료할 수 있도록 지원합니다. 아래 그림의 수많은 파란색 모듈은 NuttX가 구현하는 다양한 기능입니다.

Xiaomi Vela

샤오미 벨라 프로젝트는 샤오미가 오픈소스 실시간 운영체제 NuttX를 기반으로 구축한 임베디드 IoT 소프트웨어 플랫폼입니다. 샤오미는 IoT의 파편화를 해결하기 위해 아파치 NuttX를 기반으로 자체 개발한 임베디드 소프트웨어 플랫폼인 샤오미 벨라를 개발했습니다. 다양한 IoT 하드웨어에 통합 소프트웨어 플랫폼을 제공하고, 비용 효율적인 MCU 장치를 지원하며, 번성하는 IoT 인프라를 구축합니다. 인프라를 구축합니다. 샤오미 벨라는 풍부한 구성 요소와 사용하기 쉬운 프레임워크를 지원하는 컴포넌트화 기능을 통해 확장성과 맞춤화가 뛰어납니다. 동시에 다양한 기능적 차이를 가진 다양한 IoT 디바이스를 쉽게 지원할 수 있습니다. 또한 Linux와 높은 수준의 호환성을 유지하며 Linux를 대체하여 하드웨어 비용 절감을 달성하는 데 적합합니다. 그리고 IoT의 특성에 따라 멀티코어 이기종, 보안, 초저전력 렌더링 및 연결성에서 고유한 기능을 구축했습니다. IoT 분야와 기존 PC 및 휴대폰 산업의 가장 큰 차이점은 IoT 기기가 극도로 세분화되어 있으며, 이러한 세분화는 샤오미 자체뿐만 아니라 업계 전체에 비효율을 가져왔다는 점입니다. IoT 산업의 급속한 발전으로 2030년까지 전 세계적으로 150억 개의 새로운 IoT 디바이스가 등장할 것이며, 이로 인한 파편화 문제는 더욱 심화될 것입니다. 따라서 파편화된 IoT 애플리케이션을 연결하여 서로 조화롭게 작동할 수 있도록 하는 통합 소프트웨어 플랫폼이 절실히 필요합니다.

샤오미 벨라는 풍부한 구성 요소와 표준화된 소프트웨어 프레임워크를 통해 단편화된 IoT 애플리케이션 시나리오를 개방하고, 기기 간의 효율적이고 원활한 정보 흐름을 보장하며, 더 많은 IoT 제품을 상호 연결하여 사용자에게 더 흥미롭고 다양한 선택권을 제공합니다. 현재 샤오미 벨라는 스마트 홈, 웨어러블, 스마트 스피커 카테고리의 수백 가지 스마트 기기와 수백만 대의 스마트 기기에 탑재되어 있습니다. 더 풍부하고 실용적인 스마트 시나리오를 구축하고, 더 극단적인 기기 상호 연결 경험을 제공하며, 전 세계 모든 사람이 기술이 가져다주는 더 나은 삶을 누릴 수 있도록 하는 것이 샤오미의 목표이자 샤오미의 비전이기도 합니다.

샤오미 벨라 주요 기능:

  • 효율적인 성능: Vela는 높은 실시간성, 낮은 전력 소비, 짧은 지연 시간을 특징으로 하는 NuttX 커널을 기반으로 하므로 리소스가 제한적인 다양한 임베디드 디바이스에 적합합니다.
  • 사용하기 쉬운 프레임워크: Vela는 통합 애플리케이션 프레임워크 세트를 제공하고, 애플리케이션 개발을 위한 Lua, JavaScript 및 기타 스크립팅 언어를 지원하며, 풍부한 API와 설명서를 제공합니다.
  • 만물인터넷: Vela는 WiFi, BLE, Zigbee, MQTT 등 다양한 통신 프로토콜과 표준을 지원하며, 기기 간의 원활한 연결과 협업을 위한 Xiaomi Mythic 기술을 제공합니다.

  • 기본 NuttX 커널은 작업 스케줄링, 프로세스 간 통신, 파일 시스템 등과 같은 기본 OS 기능뿐만 아니라 간단하고 효율적인 장치 드라이버, 경량 TCP/IP 스택 및 전원 관리와 같은 구성 요소를 제공합니다.
  • 애플리케이션 프레임워크: 두 개의 계층으로 나뉘며, 하위 계층은 시스템 서비스 확장을 위해 제공되는 일반 애플리케이션 프레임워크, 상위 계층은 멀티미디어 애플리케이션 프레임워크 및 감지 애플리케이션 프레임워크와 같은 다양한 IoT 애플리케이션을 위해 개발된 맞춤형 애플리케이션 프레임워크로, 클라우드 SDK를 제공하면 개발자가 더 빠르게 Xiaomi 클라우드 서비스에 액세스 할 수 있습니다.
  • 개발자 도구: 일반적인 로거 및 디버거 도구 외에도 개발자가 디버깅 효율성을 높일 수 있도록 에뮬레이터 도구를 제공하며, 개발자는 에뮬레이터를 사용하여 풍부한 디버깅 도구와 디버깅 정보의 PC 측을 활용하여 임베디드 시스템 개발 및 디버깅의 어려움을 줄일 수 있습니다.

샤오미 서지 OS

아키텍처 다이어그램을 살펴보면 Surge OS는 다음과 같은 큰 OS 개념입니다.

Xiaomi Surge OS의 기본 핵심 시스템은 Linux와 자체 개발한 Xiaomi Vela가 융합된 것으로, 이기종 호환성 및 시스템 리소스 관리 기능을 통해 각 디바이스가 최상의 성능을 발휘할 수 있도록 합니다.

샤오미 벨라는 오픈 소스 임베디드 운영 체제인 NuttX를 기반으로 하는 IoT 소프트웨어 시스템 플랫폼으로, 여러 샤오미 스마트 홈 제품에서 운영되고 있습니다. 즉, 샤오미 서지 OS는 안드로이드 오픈 소스와 샤오미 IoT 플랫폼을 기반으로 구축되어 안드로이드 생태계와 해외 시장을 유지하면서 가능한 한 많은 샤오미 생태 사용자 그룹을 유지하기 위해 노력하고 있습니다.

샤오미는 안드로이드의 서비스 프레임워크와 자체 벨라 시스템의 서비스 프레임워크를 '미들웨어'로 통합했습니다. 동시에 전체 시스템의 '지능형 두뇌'가 되기 위해 대규모 모델 기능을 통합한 새로운 AI 서브시스템을 포함한 새로운 8개의 서브시스템은 단일 기기가 강력한 엔드사이드 AI 기능을 달성할 수 있도록 할 뿐만 아니라 전체 지능형 기능 생태계에 힘을 실어줍니다.

하이퍼커넥트 크로스 엔드 레이어의 최상위 계층은 하드웨어 장치의 장벽을 허물어 모든 장치가 연결 프로토콜과 실시간 통신을 통합하고 궁극적으로 "사람, 자동차 및 가정 생태"의 지능형 세계를 구축할 수 있도록 합니다. 또한, 샤오미는 커널 계층, 서비스 프레임워크 계층 및 크로스 엔드 계층을 통해 실행되는 풀 엔드 보안 시스템을 만들었으며, 특히 커널 계층에서 완전히 독립적인 '자체 연구 마이크로 커널 보안 시스템'을 구현하여 밑바닥부터 보안을 보장합니다.

Surge OS의 가장 중요한 5가지 기능:

  1. Surge OS는 인간과 차량의 전체 에코시스템의 풍부하고 다양한 하드웨어 장치와 기본 재구성을 다룹니다;
  2. 자체 개발한 고급 크로스엔드 상호 연결 프레임워크를 기반으로 디바이스를 효율적으로 연결할 수 있습니다;
  3. AI 그랜드 모델을 완벽하게 지원하여 시스템 애플리케이션에 더 나은 성능을 제공하는 AI 프레임워크를 갖추고 있습니다.
  4. 그리고 장치의 상호 연결된 사고 중심인 Hyperman을 사용합니다.
  5. 능동적 지능의 시대를 향해.

샤오미 서지 OS를 사용하여 화웨이 홍멍 시스템을 벤치마킹하는 두 시스템은 목적이 비슷하지만 접근 방식은 동일하지 않습니다. Xiaomi는 주로 Android 시스템 기반으로 하위 계층을 다시 작성한 다음 임베디드 시스템 호환성을 추가하여 커널의 본질은 변경되지 않았지만 하위 계층을 다시 작성했기 때문에 향후 시스템 페어링 또는 시스템 간 상호 작용을위한 다른 제품을 사용할 때 더 원활하게 작동 할 수 있습니다.

따라서 기장은 기장 생태 세계를 구축하기 위해이 OS가 필수적입니다. 기장이 개발할 다음 장면은 자동차, 자동차-기계 상호 작용, 인간-기계 상호 작용, 재능 상호 작용으로 사용자의 실제 경험과 밀접한 관련이 있으므로 기장의 미래를 위해 재구성 된 운영 체제가 자신의 제품 사용 경험을 향상시키는 것은 큰 의미가 있습니다.

샤오미의 자동차는 두 가지 독특한 경쟁 우위를 가지고 있습니다. 첫 번째는 운영 체제, 앱, 휴대폰 및 IoT와 같은 하드웨어를 포함한 기존 생태계와의 통합이고, 두 번째는 해외 시장에서의 판매 채널입니다.

홍멍과 벨라의 유사점과 차이점

IoT 분야에는 ucosIII 및 freeRTOS보다 더 발전되고 Linux보다 더 가벼운 통합 IoT 운영 체제가 시급히 필요합니다. 풍부한 구성 요소, 풍부한 생태계를 제공하고 사용하기 쉬우며 조각화 문제를 해결할 수 있습니다. 이와 관련하여 샤오미 벨라와 오픈 소스 홍멍 시스템은 OpenHarmony와 같은 노력을 기울이고 있습니다. OpenHarmony LiteOS-A 커널은 IoT 분야를 위해 구축된 경량 IoT 운영 체제인 화웨이 LiteOS 커널의 진화와 발전을 기반으로 한 차세대 커널입니다. IoT 산업의 급속한 발전 추세에서 OpenHarmony LiteOS-A 커널은 사용자에게 작은 크기, 저전력 소비, 고성능 경험 및 통합 개방형 에코시스템 기능을 제공할 수 있으며, 풍부한 커널 메커니즘, 보다 포괄적인 POSIX 표준 인터페이스 및 통합 드라이버 프레임워크 HDF 등을 추가하여 장치 공급업체에게 보다 통합된 액세스를 제공하고, 애플리케이션 개발자에게는 보다 통합된 액세스를 제공합니다. OpenHarmony 애플리케이션 개발자에게 더욱 친숙한 개발 환경을 제공합니다.

사물 인터넷 시대에 운영 체제는 기본 시스템 아키텍처의 가장 낮은 수준이며 많은 상위 응용 프로그램이 생태계를 배치하기 위해 운영 체제를 기반으로합니다. 샤오미가 자체 사물인터넷 운영체제인 샤오미 벨라를 공식 출시한 날, 화웨이는 15개의 새로운 지 초이스 제품을 출시하는 새로운 컨퍼런스도 개최했는데, 화웨이의 사물인터넷 운영체제인 홍멍 OS가 화웨이의 지 초이스 생태 제품에 적용된 것은 이번이 처음입니다. 공식적인 샤오미 벨라 소개에서 샤오미 벨라는 실제로는 화웨이 라이트OS이지만, 라이트OS가 홍멍 OS에 통합되면서 샤오미 벨라는 결국 홍멍 OS와 마주하게 될 것입니다. 홍멍과 샤오미 벨라 모두 가장 기본적인 IoT 연결 및 협업 관련 기능을 개방하도록 설계되었습니다. 그러나 그들은 여전히 약간 다릅니다. 전략적 수준에서 : 홍멍 OS 출시 초기에 화웨이의 공식 벤치 마크는 안드로이드 시스템보다; 샤오 미 벨라는 리눅스, 안드로이드 및 기타 고가의 운영 체제가 보완적인 공생 관계라고 생각하는 경향이 더 큽니다. 애플리케이션 수준에서: 홍멍은 더 넓은 범위를 가지고 있으며, 메모리 구성 분야가 상대적으로 크고, 화웨이 홍멍 OS를 탑재한 첫 번째 제품은 영광의 지혜 화면이며, 샤오미 벨라는 저전력 및 경량 애플리케이션 시나리오에 더 중점을 두고 있으며, 대상 애플리케이션은 휴대폰, 스마트 TV 등이 아닌 스마트 홈, 웨어러블 기기 및 기타 컴퓨팅 성능이 제한된 기기입니다. 점진적으로 완성되는 IoT 생태 지도

코드 다운로드 컴파일 및 실행

코드 실행

환경 빌드:

sudo apt install bison flex gettext texinfo libncurses5-dev libncursesw5-dev gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
apt install kconfig-frontends
apt install gcc-arm-none-eabi binutils-arm-none-eabi

코드 다운로드:

mkdir nuttx_project
cd nuttx_project
git clone https://.com/apache/.git nuttx
git clone https://.com/apache/nuttx-apps apps

코드 컴파일:

cd nuttx
./tools/configure.sh -L | less 지원되는 보드 보기
./tools/configure.sh -l sim:nsh 심과 같은 보드 선택:nsh
make menuconfig 구성 Kconfig 파일
make

컴파일된 코드 루트 디렉터리에는 실행 후 자동으로 실행되는 nuttx 대상 파일이 있습니다.

./nuttx

너트 쉘 터미널은 다음과 같습니다:

pkill nuttx를 종료하거나 전원을 끕니다.

사용자 이름: admin

비밀번호: 관리자

또는 메뉴 구성하기를 사용하여 로그인 비밀번호를 제거합니다.

로그 인쇄를 켭니다:

카탈로그 구조:

  • nuttx/arch: 이 디렉터리에는 아키텍처별 로직을 포함하는 여러 하위 디렉터리가 있습니다. NuttX를 새 프로세서로 포팅하는 작업은 arch/ 아래에 새 아키텍처에 맞는 로직이 포함된 새 하위 디렉터리를 추가하는 것으로 구성됩니다.
  • nuttx/binfmt: binfmt/ 하위 디렉터리에는 파일 시스템에서 바이너리 파일을 실행할 수 있는 형태로 메모리로 로드하는 로직이 포함되어 있습니다.
  • nuttx/audio: audio/ 하위 디렉터리에는 NuttX 오디오 서브시스템이 포함되어 있습니다.
  • nuttx/crypto: 암호화 하위 디렉터리에는 NuttX 암호화 하위 시스템이 포함되어 있습니다.
  • nuttx/drivers: 암호화 하위 디렉터리에는 아키텍처에 독립적인 장치 드라이버가 포함되어 있습니다.
  • nuttx/fs: fs sub 이 디렉터리에는 NuttX 파일 시스템이 포함되어 있습니다.
  • nuttx/include: NuttX 헤더 파일이 포함된 디렉터리입니다.
  • nuttx: 생성된 정적 라이브러리를 위한 거의 비어 있는 디렉터리입니다.
  • nuttx/libs/libc: 이 디렉터리에는 NuttX용 사용자 정의 인터페이스가 포함된 표준 libc와 유사한 함수 집합이 포함되어 있습니다.
  • nuttx/mm: NuttX 메모리 관리자입니다.
  • nuttx/net: 이 디렉터리에는 내부 소켓 API를 포함한 NuttX 네트워크 계층 구현이 포함되어 있습니다.
  • nuttx/sched: NuttX RTOS 커널을 구성하는 파일은 여기에 있습니다.
  • nuttx/syscall: 이 디렉터리에는 사용자 모드 애플리케이션과 커널 모드 RTOS 간의 통신에 사용할 수 있는 시스템 호출 인터페이스가 포함되어 있습니다.
  • nuttx/tools: 이 디렉토리에는 NuttX 구성, 빌드 및 유지 관리를 간소화하는 도구 및 스크립트 세트가 포함되어 있습니다.
  • nuttx/wireless: 이 디렉터리에는 하드웨어 독립적인 무선 지원에 대한 지원이 포함되어 있습니다.
  • nuttx/Makefile: Makefile 디렉토리의 최상위 $에는 NuttX 빌드를 위한 모든 최상위 제어 로직이 포함되어 있습니다.

NuttX 메모리 레이아웃에서 KROM과 UROM은 각각 커널 부팅과 NSH 부팅을 위한 프로그램을 보관합니다. 부팅 과정은 다음 그림에 나와 있으며 아래에 간략하게 설명되어 있습니다.

KROM의 커널 부팅 프로세스는 다음과 같습니다:

  • 하드웨어 초기화

  • _start는 프로세서가 커널 부팅의 첫 번째 명령을 실행하는 커널 부팅 시작점입니다.

  • 스택 포인터와 인터럽트 벡터 테이블을 초기화하고 인터럽트 모드를 CLIC 직접 모드로 설정합니다. 다이렉트 인터럽트 모드에서 BASE는 64바이트 정렬이 필요하며, 모든 예외와 인터럽트는 인터럽트 처리를 위해 트랩 인터럽트 핸들러 함수로 점프하고, 인터럽트 핸들러 함수의 주소는 mtvec 레지스터에 저장되며 인터럽트 처리 흐름은 아래 그림 6-3에 나와 있습니다:

  • 데이터 세그먼트 이동, BSS 세그먼트 지우기, 클록 구성, uart의 사전 초기화 완료, 여기서는 uart 장치 초기화 만 완료하고 드라이버 초기화를 수행하지 않았으며 목적은 콘솔 정보 인쇄 기능을 달성하는 것입니다.

  • 시스템 수준 초기화

    • 사용자 이미지의 정보에 따라 애플리케이션 공간의 데이터 및 BSS 세그먼트를 이동 및 초기화하고, PMP를 사용하여 주소 공간 액세스 권한을 설정합니다.

    • 주로 커널 목록 초기화, 유휴 tcb 초기화, 신호 볼륨 초기화, 메모리 힙 초기화, 작업 서브시스템 초기화, fs 서브시스템 초기화, 워치독 초기화, 클록 서브시스템 초기화 등 NuttX 시스템 초기화를 수행합니다.

    • 힙 주소 초기화: 사용자 공간 힙 초기화 및 커널 공간 힙 초기화

    • 초기 환경 변수 설정 및 초기화 프로그램 시작하기

    • 애플리케이션 진입 지점을 찾아 시스템 구성에 따라 애플리케이션을 시작합니다.

위의 단계가 끝나면 하드웨어 환경이 초기화되고 NuttX 시스템이 초기화되며, 애플리케이션은 다음과 같이 실행됩니다. 애플리케이션은 UROM 주소 공간에 배치되며, 일반적으로 애플리케이션의 진입점을 얻는 방법에는 세 가지가 있습니다. 첫 번째는 매크로를 통해 직접 진입점 주소를 설정하는 방법, 두 번째는 사용자 공간 구조에서 진입점을 얻는 방법, 마지막은 파일 시스템에서 초기화 프로그램을 가져와서 동적으로 로드한 다음 점프하는 방법입니다. 애플리케이션 진입점을 가져오는 방법은 메뉴 구성을 통해 구성할 수 있습니다. 세 가지 방법 모두 애플리케이션 로딩을 달성 할 수 있지만 두 번째 구현에는 다른 장점이 있으며 사용자 공간 구조를 기호 형태로 전달하여 ELF 펌웨어를 확장 할 수 있으므로 두 번째 애플리케이션 로딩 방법이 선택됩니다. 다음은 두 번째 로딩 방법을 선택하는 방법, 즉 애플리케이션을 로드하는 방법에 대한 간략한 설명입니다:

  • 메뉴 구성에서 CONFIG_INIT_ENTRYPOINT(애플리케이션 진입점 구성 항목) 및 CONFIG_BUILD_PROTECTED(애플리케이션 진입점을 사용자 공간 구조에서 가져오도록 지정) 매크로를 선택하면 애플리케이션이 두 번째 방식으로 로드되도록 지정할 수 있습니다.
  • 사용자 공간 구조는 링크 시점에 사용자 이미지의 텍스트 세그먼트의 첫 번째 주소로 툴체인됩니다.
  • NuttX는 애플리케이션 진입점을 기반으로 애플리케이션 작업을 생성하는 작업 생성 함수에 사용자 공간 구조를 매개변수로 전달하여 애플리케이션을 시작합니다.

사용자 이미지에는 NSH와 임베디드 애플리케이션이 포함되어 있다고 위에서 언급했습니다. NSH는 NuttX에서 제공하는 작고 확장 가능한 bash와 유사한 셸 명령 파서로 명령줄 파싱, 실시간 직렬 출력, 시스템 마운트 등을 제공합니다. 풍부한 기능 세트와 작은 설치 공간을 가지고 있으며 스크립트 실행 및 확장 프로그램의 동적 로딩을 지원하므로 NSH는 다음과 같이 간주됩니다. 첫 번째 사용자 프로그램으로 간주됩니다.

enum nx_initstate_e
{
 OSINIT_POWERUP = 0, /*전원을 켭니다. 아직 초기화를 수행하지 않았습니다..bss초기화 로직 값은* /
 OSINIT_BOOT = 1, /*기본 부팅 초기화가 완료되었습니다. 운영 체제 서비스 및 하드웨어 리소스는 아직 사용할 수 없습니다.* /
 OSINIT_TASKLISTS = 2, /*실행 준비 완료 / 할당된 작업 목록 헤더가 유효합니다.*/
 OSINIT_MEMORY = 3, /*메모리 관리자가 초기화되었습니다.*/
 OSINIT_HARDWARE = 4, /* mcu전용 하드웨어 초기화. 타이머 및 장치 드라이버와 같은 하드웨어 리소스를 이제 사용할 수 있습니다.
 기본 운영 체제 서비스 지원 하드웨어도 충분하지만 운영 체제가 아직 완전한 초기화를 완료하지 않은 상태입니다.* /
 OSINIT_OSREADY = 5, /*OS가 완전히 초기화되어 있고 멀티태스킹이 활성화되어 있습니다.* /
 osinit_idlelloop = 6 /*운영 체제를 유휴 주기로 전환*/
} 

코드에 인쇄 기능을 추가하고 직접 디버깅할 수 있습니다:

#include <debug.h>
_info("ssss Entry
");

포스트 스크립트:

탄생에서 인기까지 OS는 아마도 15 년 이상의 시간이 필요하며, 상업적으로 다양한 구성 요소를 추가하여 지원할 필요가 있으며 버그를 수정하기위한 설치 용량도 있으며, 좋은 플레이어를 계산하여 테스트를 견뎌냈다고 말할 수 있습니다. 모든 사람이 오픈 소스이기 때문에 아무 대가없이 코드를 얻을 수 있습니다.

Read next

프로젝트의 다른 환경 실행

먼저 코드에 구성 파일을 사용하여 다른 환경에 대한 구성 정보를 저장합니다. 예를 들어 config.js라는 파일을 만들고 그 안에 다음과 같이 다른 환경에 대한 구성 항목을 정의할 수 있습니다. 다음으로 현재 환경에 따라 환경 변수를 설정합니다.

Aug 13, 2025 · 2 min read