ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

NuttX操作系统介绍

2023-11-18 09:55:16  阅读:205  来源: 互联网

标签:


关于NuttX操作系统
NuttX是一个成熟的实时操作系统,于07年由Gregory Nutt先生正式开源,2016年被三星选为TizenRT操作系统的内核,2019年在小米的推动下正式进入Apache基金会,经过开源社区多年的不懈努力,NuttX功能丰富,性能稳定,商业化成熟度高,Fitbit最近两代的手环产品和索尼多款消费级产品都是基于NuttX开发的。
为什么选择NuttX?
市场上开源或商业的RTOS非常多,为什么我们最终选择NuttX作为Xiaomi Vela的基础?主要有以下几个原因:
  • NuttX对POSIX标准有原生兼容:NuttX是可商用化RTOS中唯一一个对POSIX API有原生支持的实时操作系统,所以很多Linux社区的开源软件可以很方便的移植到NuttX上,这样可以极大的简化开源软件移植,方便代码复用,降低学习曲线,其它RTOS需要适配层把POSIX API转成内部API,而且通常只兼容一小部分的POSIX接口。
  • 完成度高:NuttX集成了文件系统、网络协议栈、图形库和驱动框架,减少开发成本。
  • 模块化设计:所有组件甚至组件内部特性,都可以通过配置Kconfig来调整或关闭,可按需对系统进行裁剪,适用于不同产品形态。
  • 代码精简:所有组件都是从头编码,专门对代码和数据做了优化设计。
  • 轻量级:虽然NuttX实现了传统操作系统的所有功能,但是最终生成的代码尺寸还是可以很小(最小配置不到32KB,最大配置不超过256KB)。
  • 和Linux系统的兼容性:因为NuttX整体设计、代码组织,编译过程和Linux非常接近,将会极大地降低Android/Linux开发者的迁移成本。
  • 活跃开放的社区:很多厂商(比如小米、Sony,乐鑫、NXP等)和开源爱好者都在积极回馈社区。

NuttX的系统架构
从纵向看,NuttX和传统操作系统一样由调度子系统、文件子系统、网络子系统、图形子系统和驱动子系统组成。从横向看,NuttX向上给应用程序提供了POSIX和ANSI定义的标准C/C++接口。对于没有标准化的组件(比如各种外设),NuttX通常会提供兼容Linux的API。向下NuttX定义了Arch API、块设备驱动接口、网卡驱动接口、display驱动接口,以及各种总线和外设的lower half驱动接口,使得芯片厂商能够规范、快速地完成移植工作。下图中数量众多的蓝色模块就是NuttX实现的各种功能。
banner
子系统介绍
调度子系统
NuttX支持大多数RTOS都没有实现的进程概念,并提供完整的POSIX API,比如pthread、信号量、消息队列、时钟/定时器、信号、环境变量等。同时,也支持RTOS上常见的优先级翻转和tickless模式。NuttX支持对称多处理(SMP)和非对称多处理(AMP)两种多核编程模式,开发者可以根据芯片设计的特点和应用场景的需求,选择使用SMP或AMP,甚至同时使用SMP和AMP。NuttX支持所有常见CPU架构,比如Cortex-A/Cortex-R/Cortex-M、AVR、MIPS、32位/64位 RISC-V,X86/X64,Z80,以及Tensilica和CEVA的DSP,并有超过150款芯片成功移植到NuttX上。
文件系统
NuttX设计了一套完整而小巧的虚拟文件系统,除了支持统一的目录和文件操作外,还支持挂载点、字符设备,块设备等高级概念。直接支持10多种常用的文件系统。比如FAT、LittleFS、SmartFS、NFS、ROMFS、TMPFS等。另外,NuttX内置根文件系统,无需挂载即可启动,极大的简化了开发和部署流程。
网络子系统
NuttX实现了完整的网络协议栈,支持以太网、WiFi、802.15.4、蓝牙、CAN等数据链路层协议,支持IPv4、IPv6以及相关的ARP、ICMP、IGMP、MLD等传输层协议,实现了BSD兼容套接字API,除了常见的TCP、UDP协议外,还支持raw packet、unix domain、netlink套接字类型。另外,NuttX还提供了大量的应用层协议实现,比如DHCP、DNS、NTP、Telnet、FTP、SMTP、HTTP等。
驱动子系统
除了接入到文件系统的块设备驱动和接入到TCP/IP协议栈的网络设备驱动外,NuttX还为各种常见总线和外设定义了类似Linux的字符设备驱动。一方面通过NuttX为每类设备定义的标准IOCTL接口,应用程序可以用统一的API访问不同厂商的硬件驱动,另一方面NuttX驱动框架实现了和硬件无关的操作(比如权限控制、buffer管理,睡眠/唤醒等),降低驱动程序的开发难度。最后,NuttX提供了一套基于activity统计的低功耗管理框架,使得驱动程序可以方便地实现低功耗控制。

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有