惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
N
News and Events Feed by Topic
S
Schneier on Security
G
GRAHAM CLULEY
Scott Helme
Scott Helme
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
Project Zero
Project Zero
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Vercel News
Vercel News
The Cloudflare Blog
C
Check Point Blog
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
S
Securelist
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
S
Secure Thoughts

StrongWong

什么是超低功耗基准测试——ULPMark Benchmark 浅谈 RISC-V 软件开发生态之 IDE wujian100 的 PWM 周期问题 用 Kindle 做树莓派的显示屏 关于 RISC-V 架构下 RTOS 的一些知识 使用 vivado 综合 wujian100 生成 bitstream 文件 Windows 下学习阿里平头哥 RISC-V 芯片开发平台 wujian100 FPGA 数字图像处理联合仿真平台的搭建及使用举例 拆解一个很有意思的开关 拆解某宝上热销的一款蓝牙耳机 Archives Windows10 环境下搭建 RISC-V 调试环境 Contact 使用汇编实现 pc 和 sp 的保存及恢复操作 数字 IC 设计流程 SDRAM 两次踏进同一条河 初窥 SDRAM 从计数器开始,看数字 IC 设计 使用 Docker + GitLab 构建自用的代码管理服务 提升数字 IC 设计效率从 Vim 开始 总线- SoC 内部的主干道 Tools 使用树莓派 3b 和 RTL_SDR 搭建小功率无线电监测点 关于 ARM Cortex-M3 的启动文件分析及分散加载 make 命令及 makefile 文件编写 ROS 基础知识 在 Jetson TX2 上安装 ROS 机器人操作系统 Jetson TX2 重新编译内核添加usb等驱动 Nvidia Jetson TX2 刷机并安装JetPack3.1 我的毕业设计--基于ROS的移动机器人 使用 Hexo+Github Pages 搭建个人博客 About
简单了解一下小米 vela
BH6BAO · 2021-01-12 · via StrongWong

0x00 小米 vela

前段时间小米推出了 vela 物联网平台,vela 就是基于 NuttX 打造的物联网开发平台。

小米对 NuttX 的评价:

  1. NuttX 对 POSIX 标准有原生兼容:NuttX 是可商用化 RTOS 中唯一一个对 POSIX API 有原生支持的实时操作系统,所以很多 Linux 社区的开源软件可以很方便的移植到 NuttX 上,这样可以极大的简化开源软件移植,方便代码复用,降低学习曲线,其它 RTOS 需要适配层把 POSIX API 转成内部 API,而且通常只兼容一小部分的 POSIX 接口。
  2. 完成度高:NuttX 集成了文件系统、网络协议栈、图形库和驱动框架,减少开发成本。
  3. 模块化设计:所有组件甚至组件内部特性,都可以通过配置 Kconfig 来调整或关闭,可按需对系统进行裁剪,适用于不同产品形态。
  4. 代码精简:所有组件都是从头编码,专门对代码和数据做了优化设计。
  5. 轻量级:虽然 NuttX 实现了传统操作系统的所有功能,但是最终生成的代码尺寸还是可以很小(最小配置不到 32KB,最大配置不超过 256KB)。
  6. 和 Linux 系统的兼容性:因为 NuttX 整体设计、代码组织,编译过程和 Linux 非常接近,将会极大地降低 Android/Linux 开发者的迁移成本。
  7. 活跃开放的社区:很多厂商(比如小米、Sony,乐鑫、NXP 等)和开源爱好者都在积极回馈社区。

不难看出小米对 NuttX 的评价很不错。所以我也来赶紧学习一波,做了一个简单的了解,作为自己的技术储备。

0x01 安装配置

环境: Ubuntu20.04 系统、ARM GUN 2019q4 版本 gcc、openocd 0.10 版本

安装 ARM gcc 工具链,如果开发板是用其他的架构 cpu 请去安装其他架构下相应的版本工具链,我这里是 ARM 的。

sudo mkdir /opt/gcc
sudo chgrp -R users /opt/gcc
cd /opt/gcc
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
tar xf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2

配置工具链到系统环境变量

echo "export PATH=/opt/gcc/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH" >> ~/.bashrc

下载 nuttx 、apps、tools 三个 nuttx 系统源码及构建工具

mkdir nuttxWS
cd nuttxWS
git clone https://github.com/apache/incubator-nuttx.git nuttx
git clone https://github.com/apache/incubator-nuttx-apps apps
git clone https://bitbucket.org/nuttx/tools.git tools

安装 kconfig ,构建工具。注意:低于 ubuntu20 版本的安装要少许麻烦一些

$ apt install kconfig-frontends

查看 nuttx 支持的板卡

$ cd nuttxWS
$ ./tools/configure.sh -L | less

选择相应的板卡及其支持的应用程序进行配置

$ cd nuttxWS
$ ./tools/configure.sh -l <board-name>:<config-dir>
# for instance:
$ ./tools/configure.sh -l stm32f103-minimum:nsh

运行 menuconfig 进行自定义配置

0x02 编译运行

配置完成后编译 NuttX 系统

编译完成后会在 nuttx 目录下生成一个 nuttx.bin 文件,接下来把他下载到板子是运行 首先安装 openocd

$ sudo apt install openocd

如果使用 apt 安装的 openocd 版本过低,就自己从源码安装一下 openocd 即可

Openocd 安装好之后,正确连接板卡和电脑,下载程序。 烧写程序之前可以先打开串口,当系统正常运行起来之后可以在串口中观察到 nsh> 命令行。注意,我这边是 stlink 的虚拟串口所以是 ACM0,你的如果不是虚拟串口,可能是 USB0 之类的。

$  picocom -b 115200 /dev/ttyACM0

下载程序需要注意正确选择你使用的下载器和板卡对应的 .cfg 文件

$ cd nuttxWS
$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f1x.cfg -c 'init'  -c 'program nuttx.bin 0x08000000 verify reset' -c 'shutdown'

如果程序正常运行了就可以在中观察到信息,输入 help 命令就可以查看支持的命令列表。如果没有看到信息,reset 一下板子。

修改配置编译一个 blinking 控制 led 的程序

回到 nuttx 目录下清除原来的配置,重新生成,在 menuconfig 中检查 led 相关配置是否设置成功。在 NSH library 中使能 printf 功能。

$ cd nuttxWS/nuttx
$ make distclean
$ ./tools/configure.sh -l stm32f103-minimum:userled
$ make menuconfig
$ make -j$(nproc)

编译完成后下载到板卡上,打开串口,按一下 reset 连接上板子就可以在串口看到输出的信息了。直接执行 leds ,可以看到板卡上的 led 已经正常运行起来了。

今天就先点个灯了解一下,其他的内容,等我翻翻 NuttX 源码在学习一下。