너트X
NuttX![]() |
![]() NuttX 로고 | |
개발자 | 그레고리 너트 |
---|---|
기입처 | C, C++, 어셈블리 |
OS 패밀리 | POSIX |
동작 상태 | 현재의 |
소스 모델 | 오픈 소스 |
초기 릴리즈 | 전( |
최신 릴리즈 | 10.3.0 / 2022년 6월 28일; | 전(
저장소 | |
마케팅 대상 | 임베디드 시스템 |
플랫폼 | ARM, AVR, AVR32, HCS12, LM32, MIPS, RISC-V, SuperH, Xtensa, x86, x86-64, Z80 |
커널 타입 | 실시간 마이크로커널 |
면허증. | Apache 라이센스 2.0 |
공식 웹사이트 | nuttx |
NuttX는 프리 오픈소스 소프트웨어(FOSS) 실시간 운영체제(RTOS)로 기술표준 준거와 소형화에 중점을 두고 있습니다.8비트 마이크로컨트롤러 환경에서 64비트 마이크로컨트롤러 환경까지 확장 가능한 NuttX의 주요 표준 규격은 Portable Operating System Interface(POSIX) 및 American National Standards Institute(ANSI)입니다.Unix 및 기타 일반적인 RTOS(VxWorks 등)의 추가 표준 어플리케이션프로그래밍 인터페이스(API)는 이러한 표준에서는 사용할 수 없는 기능 또는 fork() 시스템콜과 같은 깊이 내장된 환경에는 적합하지 않습니다.
NuttX는 2007년 Gregory Nutt에 의해 BSD 허가 하에 자유 오픈 소스 소프트웨어로 처음 출시되었습니다.2019년 12월부터 Apache Software [2]Foundation에서 배양 중입니다.
실행
NuttX는 거의 전적으로 프로그래밍 언어 C로 작성되며 Kconfig를 사용하여 시스템의 GNU makefile을 구성하고 생성합니다.프로그램 배포는 커널과 많은 양의 미들웨어 및 보드 지원 및 장치 드라이버를 위한 코드를 결합합니다.커널과 다른 많은 코드들은 원작자인 그레고리 너트에 의해 작성되었다.그는 소스코드를 독점적으로 유지하며 모든 지역사회 기부금을 승인해야 합니다.
역사
NuttX RTOS는 Gregory Nutt씨의 개인 프로젝트로 1990년 후반과 2000년 초에 자유시간에 시작되었습니다.
그 후 2007년에 BSD 라이선스로 오픈 소스 프로젝트로 출시하기로 결정했습니다.이 초기 버전은 2개 또는 3개의 마이크로 컨트롤러(8051 및 ARM7)만을 지원합니다.
이후 NuttX RTOS는 더 많은 마이크로컨트롤러와 이후 마이크로프로세서(인텔/AMD x86, AMD64, RISC-V 64 등)를 지원하게 되었습니다.처음에 이 프로젝트는 Source Forge에서 우연히 발견한 소수의 사람들에 의해서만 사용되었습니다.그 후 2010년 Linux Journal은 로우엔드/저비용 마이크로컨트롤러에서 실행할 수 있는 RTOS Linux와 유사한 NuttX에 대한 두 단락을 발표합니다.이 행사 이후 더 많은 대기업들이 제품과 프로젝트에 NuttX RTOS를 사용하기 시작했다.2019년 Apache Source Foundation에 프로젝트가 기부되어 인큐베이터 프로세스로 전환되었습니다.
NuttX RTOS는 어디에 사용됩니까?
NuttX RTOS는 IoT 디바이스에서 위성, 대량 소비자 디바이스, 스마트워치, 산업용 디바이스에 이르기까지 다양한 애플리케이션에서 사용됩니다.
NuttX를 사용한 최초의 디바이스 중 하나는 Thingsee 사물인터넷(IoT) 개발 [3]디바이스입니다.이 기기는 킥스타터 캠페인으로 시작해 할티안이라는 회사의 제품으로 진화했다.
아마도 NuttX를 사용하는 가장 널리 알려진 장치는 PX4 자동 조종 드론일 것이다.NuttX를 사용하여 다양한 자율 [4]플랫폼을 제어합니다.
NuttX는 Sony사의 오디오 레코더에도 사용되고 있으며 많은 오픈 소스 Linux Conferences에서 에 대해 발표했습니다.소니는 오디오 프로세서에 [5]NuttX를 사용한다.
심지어 모토로라의 모듈러 스마트폰도 너트X RTOS를 사용하는 것으로 알려져 있다.사실, 모토로라는 구글의 아라 프로젝트 소스코드로 사용되었고 그들만의 모듈러 스마트폰인 [6][7]모토로라 모토 Z를 만들었다.
NuttX는 Samsung Tizen에서 사용되는 커널이기도 합니다.RT: 삼성은 NuttX RTOS [8]기반의 TizenRT를 발표한다.
또한 NuttX는 비디오 성능 측정 장치 및 NuttX [10]RTOS용 저전력 임베디드 소프트웨어 최적화와 같은 여러 연구 프로젝트에 사용되었습니다.
NuttX가 일반적으로 사용되는 다른 분야는 취미와 복고 컴퓨팅이다.예를 들어 Biffer Board는 NuttX를 포함한 많은 RTOS를 지원하며 이 MP3 플레이어는 [12]NuttX와 함께 구현됩니다.
홈브루 스티어 바이 와이어 시스템도 NuttX를 [13]사용하여 구현되었습니다.그것은 NuttX 기고자의 석사학위 프로젝트였습니다.
오스모콤BB는 휴대폰을 위한 운영체제를 개발하기 위해 NuttX를 사용했다.
주요 기능
- 규격 준거
- 태스크 관리
- 모듈러 설계
- 완전 프리엠프터블
- 자연스럽게 확장 가능
- 고도의 구성성
- 새로운 프로세서 아키텍처, SoC 아키텍처 또는 보드 아키텍처로 쉽게 확장 가능
- 스케줄러
- 실시간 결정론적 우선순위 상속 지원
- 틱리스 조작
- IPC
- POSIX 스레드(pthreads)
- 다중 파일 시스템(아래 섹션 참조)
- VxWorks와 유사한 작업 관리 및 워치독 타이머
- Berkeley Software Distribution(BSD) 소켓인터페이스
- 프리엠프션을 관리하기 위한 확장 기능
- Symmetric Multiprocessing(SMP; 대칭형 멀티프로세서)
- 로드 가능한 커널 모듈
- 메모리 구성
- 플랫 임베디드 빌드
- MPU에 의한 보호 빌드
- MMU를 사용한 커널 빌드
- 메모리 할당기
- 표준 힙 메모리 할당
- 과립 할당기
- 공유 메모리
- 동적 크기, 프로세스별 힙
- 스레드 로컬 스토리지(TLS)
- 상속 가능한 제어 단자, 의사 터미널(PTY) 및 입출력(I/O) 리다이렉션
- 온디맨드 페이징
- 시스템 로깅
- 오픈 플랫 임베디드 RTOS 또는 시스템 콜게이트 인터페이스를 갖춘 개별적으로 구축된 안전한 커널 중 하나로 구축 가능
- 내장된 스레드 단위 CPU 부하 측정
- 커스텀 NuttX C 표준 라이브러리(libc)
지원되는 플랫폼
- 팔
- ARM7TDMI(TI TMS320 C6571, Calypso, MoxART, NXP LPC214x, LPC2378, STMicro STR71x)
- ARM920T(Freescale i).MX1)
- ARM926EJS(TI DM320, NXP LPC31xx)
- ARM Cortex-A5(Atmel SAMA5D2, SAMA5D3, SAMA5D4)
- ARM Cortex-A8(전승 A10)
- ARM Cortex-A9(NXP/Freescale i).MX6)
- ARM Cortex-R4/R4F(TI TMS570, Samsung Artik)
- ARM Cortex-M0(nuvoTon: NUC120, NXP: KL25Z, KL26Z, LPC11xx, Atel: SAMD20/21, SAML21, ST Micro STM32 F0, Rasberry Pi RP2040[15])
- ARM Cortex-M3(ST Micro STM32 F1/F2/L1, TI/Stellaris LM3S, NXP LPC17xx, Atmel SAM3U/3X, SiliconLabs EFM32)
- ARM Cortex-M4(부동소수점 유닛 유무: ST Micro STM32 F3/F4/L4/L4+, TI/Stellaris LM4F/TM4C, NXP LPC43xx/LPC54xx, Freescale Kinetis K20/28K/60K)
- ARM Cortex-M7 (Atmel SAMV71/SAME70, ST Micro STM32 F7/H7, NXP i).MX RT)
- 아트멜 AVR
- Atmel 8비트 AVR (AT90USB, AT메가)
- AVR32
- 프리스케일 M68HCS12
- 인텔(R)
- x86(80x86)
- MIPS
- 마이크로칩 PIC32MX(MIPS32 24Kc), PIC32MZ(MIPS32 M14k)
- 미스옥
- LM32(QEMU)
- OpenRISC
- mor1kx
- 르네사스/히타치
- 슈퍼H
- 르네사스 M16C/26
- RISC-V
- SiFive FE310(RV32IM)
- Kendryte K210 (RV64GC)
- 디지털 LITEX(RV32IMA)를 즐겨보세요
- 다음 RISC-V NR5Mxx(RV32IM)
- GreenWaves GAP8(RV32IM)
- BouffaloLab BL602 (RV32IMFC)
- ESpressif Systems ESP32-C3(RV32IMC)
- Xtensa
- Expressif Systems ESP32(LX6)
- Expressif Systems ESP32-S2(LX7)
- 자일로그
파일 시스템
- 소형 메모리, 루트 유사 파일 시스템
- 가상 파일 시스템(VFS)
- 마운트 가능한 볼륨마운트 포인트, 파일 시스템 및 블록 디바이스 드라이버 바인딩
- 범용 시스템 로깅(SYSLOG) 지원
- 파일 할당 테이블(FAT) 12/16/32 파일 시스템 지원
- NFS(네트워크 파일 시스템) 클라이언트, NFS 버전 3, UDP 지원
- NXFFS: 소형 마모 레벨 플래시 메모리 파일 시스템
- 스마트: Ken Pett의 플래시 파일 시스템
- SPI 기반 카드용 범용 드라이버:멀티미디어 카드(MMC) 및 시큐어 디지털(SD/SDHC)
- ROMF 파일 시스템 지원
- BINFS 의사 파일 시스템 지원
- HOSTFS 파일 시스템 지원(시뮬레이션만)
- Union 파일 시스템: 파일 시스템 결합 및 오버레이 지원
- PROCFS(/proc) 의사 파일 시스템
- 다음 형식을 지원하는 바이너리 로더:
- PATH 변수 지원
- TFTP 및 FTP(get and put), HTTP(wget) 및 Zmodem(sz 및 rz)을 통한 파일 전송
- 인텔 HEX 변환
디바이스 드라이버
- VFS는 문자 드라이버와 블록 드라이버를 지원합니다.
- 비동기 I/O(AIO)
- 네트워크, USB(호스트), USB(디바이스), 시리얼, I2C, I2S, NAND, CAN 버스, ADC, DAC, PWM, Quadrature Encoder 및 워치독타이머 드라이버 아키텍처
- RAM 드라이브 또는 디스크, 파이프, FIFO, /dev/null, /dev/zero 드라이버
- SPI 기반 또는 SDIO 기반 MMC/SD/SDH 카드용 범용 드라이버
- 전원 관리 서브시스템
- 내장 FreeModBus 버전 1.5.0에서 제공되는 ModBus 지원
- 그래픽스 디바이스: 프레임 버퍼 드라이버, 그래픽스 및 세그먼트 LCD 드라이버
- 오디오 서브시스템:코덱, 오디오 입력 및 출력 드라이버.명령줄 및 그래픽 미디어 플레이어 응용 프로그램
- 암호화 서브시스템
- 입력 디바이스: 터치스크린, USB 키보드, USB 마우스, GPIO 기반 버튼 및 키패드
- 메모리 테크놀로지 디바이스
- 아날로그 디바이스: 아날로그/디지털 컨버터(ADC), 디지털/아날로그 컨버터(DAC), 멀티플렉서 및 앰프 지원
- 시스템 로깅 장치
- 포팅[17] 가이드
C/C++ 라이브러리
- 표준 C 라이브러리를 OS에 완전히 통합
- 표준 산술 라이브러리를 통한 부동소수점 지원 포함
- 애드온 uClibc++[18] 모듈은 입력/출력(C++)(iostream), 문자열, STL(Standard Template Library), 런타임 유형 정보(RTI), 예외(LGPL)를 지원하는 표준 C++ 라이브러리를 제공합니다.
네트워킹
NuttX에 포함된 네트워크 스택은 원래 Adam Dunkels에 의해 개발된uIP(마이크로 IP)에서 파생되었습니다.
- 다중 네트워크 인터페이스 지원, 다중 네트워크 링크 계층 지원
- IPv4, IPv6, Internet Protocol Suite(TCP/IP), UDP(User Datagram Protocol), ICMP(Internet Control Message Protocol), IGMP(Internet Group Management Protocol) 버전 2(클라이언트) 스택
- 스트림 및 데이터그램 소켓
- 원시 소켓 및 로컬, Unix 도메인 소켓 지원
- DNS 이름 해결, NetDB
- IEEE 802.11 (WiFi) 풀맥
- IEEE 802.15.4 MAC + 6 loW팬
- Serial Line Internet Protocol(SLIP), TUN/PPP, 로컬루프백 디바이스
- cJSON[19] 포트
- 소형(uIP 기반)
- BSD 호환 소켓층
- 네트워킹 유틸리티(DHCP(Dynamic Host Configuration Protocol) 서버 및 클라이언트, SMTP(Simple Mail Transfer Protocol) 클라이언트, Telnet 클라이언트, FTP(File Transfer Protocol) 서버 및 클라이언트, HTTP(Hypertext Transfer Protocol) 서버 및 Time Protocol(N) 클라이언트, 시간 프로토콜sions(제어 단말기로서).VNC 서버
- NFS(네트워크 파일 시스템) 클라이언트, NFS 버전 3, UDP 지원
- ICMPv6 자율 자동 설정
- 내장 CGI를 제공하기 위해 NXFLAT와 통합된 Jef Poskanzer의 thttpd HTTP 서버의 NuttX 포트
- PHY 링크 상태 관리
- UDP 네트워크 검색, XML RPC 서버
- XML RPC 서버
- 네트워크 모듈(TI CC3000 WLAN 모듈 등) 지원
플래시 지원
- MTD 디바이스용 메모리 테크놀로지 디바이스(MTD) 인스파이어 인터페이스
- FTL: 플래시 상에서 심플한 플래시 변환 레이어 파일 시스템 지원
- NAND 지원
- NXFFS: 마모 레벨의 플래시 메모리 파일 시스템
- Serial Peripheral Interface(SPI; 시리얼 페리페럴인터페이스) 버스 기반 플래시 디바이스 지원
USB 지원
주인
- USB 호스트 컨트롤러 드라이버 및 디바이스 의존형 USB 클래스 드라이버를 위한 USB 호스트 아키텍처.
- Atmel SAMA5Dx, NXP LPC17xx, LPC31xx 및 STmicro STM32에서 사용할 수 있는 USB 호스트컨트롤러 드라이버
- USB 대용량 스토리지 및 HID 키보드용 디바이스 의존형 USB 클래스 드라이버.
- USB 허브의 심리스한 지원.
장치
- USB 디바이스 컨트롤러 드라이버 및 디바이스 의존형 USB 클래스 드라이버를 위한 가젯과 같은 아키텍처.
- PIC32, Atmel AVR, SAM3, SAM4 및 SAMA5Dx, NXP LPC17xx, LPC214x, LPC313x 및 LPC43xx, Silicon Laboraties EFM32, STMro1에 사용 가능한 USB 디바이스 컨트롤러 드라이버
- USB 시리얼 및 USB 대용량 스토리지에 사용할 수 있는 디바이스 의존형 USB 클래스 드라이버.
- USB 디버깅용 내장 USB 트레이스 기능.
그래픽스 지원
- 프레임 버퍼 드라이버
- 병렬 및 SPI LCD 및 유기발광다이오드(OLED)용 액정표시장치(LCD) 드라이버.
- 세그먼트 LCD 드라이버
- VNC 서버
- NX 그래픽스 서브시스템:프레임 버퍼 또는 LCD 드라이버로 동작하는 그래픽 라이브러리, 윈도우 시스템 및 글꼴 지원.
- NuttX 위젯:[20] NX 그래픽스와 통합된 보수적인 C++로 작성된 그래피컬 사용자 인터페이스(GUI)입니다.
- NuttX 창 매니저:[21] NX 그래픽 서브시스템 및 NuttX 위젯을 기반으로 한 소형.
레퍼런스
- ^ "Apache NuttX-10.3.0 Release Notes". Retrieved 2022-07-21.
- ^ "Apache NuttX (Incubating)". incubator.apache.org. Retrieved 29 April 2021.
- ^ "Thingsee". Retrieved 27 July 2015.
- ^ "Autopilot PX4". Retrieved 3 May 2013.
- ^ "Developing Audio Products with Cortex-M3/NuttX/C++11" (PDF). Archived from the original (PDF) on 20 January 2017. Retrieved 20 January 2017.
- ^ "Moto Mods Firmware: Overview". Retrieved 28 December 2016.
- ^ "Modular Moto Z Android phone supports DIY and RPi HAT add-ons". Retrieved 22 August 2016.
- ^ "Tizen RT". Retrieved 21 February 2017.
- ^ "Design of an Embedded System for Video Performance Measurements. Petteri Aimonen's Master Thesis" (PDF). Retrieved 22 July 2014.
- ^ "Low Power Embedded Software Optimization for the NuttX RTOS. Diego Sánchez López's Monograph of Electric Engineering Graduation" (PDF). Retrieved 12 July 2015.
- ^ "Bifferboard". Retrieved 22 November 2012.
- ^ "Nuttx playing MP3 in Detron Board". Retrieved 22 November 2012.
- ^ "A Homebrew Steer-by-Wire System". Retrieved 22 November 2012.
- ^ "OsmocomBB". Retrieved 22 November 2012.
- ^ "The Raspberry Pi Pico, and RP2040, Get Full Dual-Core SMP Support in Apache's NuttX RTOS Port". Retrieved June 2, 2021.
- ^ "Spresense combines multi-core and power efficiency". Retrieved September 5, 2019.
- ^ "Porting Guide". Retrieved 22 November 2012.
- ^ "uClibc++". Retrieved 22 November 2012.
- ^ "cJSON". Retrieved 22 November 2012.
- ^ "NuttX Widgets". Retrieved 22 November 2012.
- ^ "NxWM". Retrieved 22 November 2012.
외부 링크
- 공식 웹사이트
- 공식 NuttX 사용자 그룹
- Linux Journal은 NuttX에 대해 언급했습니다.이 인용문은 2010-09-01년 Linux 개발자에게 NuttX에 대한 주의를 환기시킵니다.
- NuttX를 마이크로엔드 X 오픈 하드웨어 보드로 컴파일하는 중
- NuttX Dangerous Prototype에 대한 Dangerous Prototype 게시물은 유명한 버스 해적판 순이퍼를 만든 것입니다.
- NuttX에서 x86으로 포트