维基 - NervesNotes

主要观点: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工具用于烧录固件。
  • 向量计算与 Nx:Nx 是数值计算库,默认后端存储矩阵为 Elixir binary对象,性能不佳,推荐使用EXLA后端,还有其他替代库。
  • 网络 BEAM 集群/分布式 Erlanghttps://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_timenerves_pack等。
阅读 12
0 条评论