主要观点:Nerves 是用 Elixir 制作嵌入式系统的框架,提供了一系列功能和工具。
关键信息和重要细节:
- 资源:提供了https://tips.nerves-project.org/和https://wiki.alopex.li/NervesLocalSetup等资源。
能力/特性:构建含 Elixir VM 的精简 Linux 系统,绕过大部分现代 Linux 发行版的内容,主要是编译时工作,提供少量运行时工具,如 IEx 壳、日志记录、存储管理、硬件接口等。
- IEx 壳相关:启动后进入 IEx 壳,默认系统 VM 停止会重启,IEx 壳停止 Erlang VM 继续运行,可通过
ctrl-G
进入 VM 监视器,s
启动 Erlang 壳,c
连接,Toolshed
提供 CLI 工具,还有save_term!
等快捷操作。 - 初始化和配置:使用
erlinit
,可在config/target.exs
中覆盖配置,还可设置内核命令行参数,Logger
默认包含,有多种日志后端。 - 日志记录:有
RingLogger
等多种日志后端,可通过Toolshed
控制输出。 - 板载存储:使用 MBR 分区布局,支持 A/B 固件升级,可通过
rootfs_overlay/
添加文件,fwup
工具定义固件分区布局,可使用Nerves.Runtime.KV
获取持久化环境变量。 - 硬件接口:https://elixir-circuits.github.io/提供基本低级接口,Circuits 需手动添加,可枚举设备。
- 网络设置:使用
VintageNet
配置网络,有各种插件和工具,如VintageNet.info
等,支持基本网络操作,但 IPv6 支持不足,可设置防火墙规则,有mdns_lite
用于 mDNS 服务发现。 - SSH:默认运行在端口 22,仅
root
用户,可通过config/target.exs
配置 SSH 密钥等,支持 sftp 和 sshfs,有fwup
工具用于烧录固件。
- IEx 壳相关:启动后进入 IEx 壳,默认系统 VM 停止会重启,IEx 壳停止 Erlang VM 继续运行,可通过
- 向量计算与 Nx:Nx 是数值计算库,默认后端存储矩阵为 Elixir
binary
对象,性能不佳,推荐使用EXLA
后端,还有其他替代库。 - 网络 BEAM 集群/分布式 Erlang:https://learnyousomeerlang.com/distribunomicon是入门资料,网络可能存在不稳定,Erlang 网络为 mesh 由
epmd
管理,默认构建 Erlang 集群方式不佳,可使用其他方式,对于不可靠网络,可使用其他协议代替 Distributed Erlang。 - 语言集成:有多种语言集成方式,如 Erlang、Lisp-Flavored Erlang、Gleam、Rust、Zig 等,各有特点和难度,Rust 与 Nerves 集成较复杂。
- 创建新硬件系统包:参考https://hexdocs.pm/nerves/customizing-systems.html,主要通过 Buildroot 编译内核、构建 Erlang 和 Busybox 等,可克隆现有包修改。
- 其他:D-Bus 通常未启用,可在自定义系统中启用,Nerves 有 udev 和
nerves_uevent
包,还有nerves_time
和nerves_pack
等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。