Nerves
2020/07/12
Nerves Project の システム部(OS,bootloader?, elixer起動までの構築)
個々のライブラリ群?だけをみていても理解できないっぽい。 Nerves examplesを参照していくとつながるかもしれん。
platform依存部分(Apache License 2.0):
defp deps do
[
{:nerves, "~> 1.5.0", runtime: false},
{:nerves_system_br, "1.9.1", runtime: false},
{:nerves_toolchain_x86_64_unknown_linux_musl, "1.2.0", runtime: false},
{:nerves_system_linter, "~> 0.3.0", runtime: false},
{:ex_doc, "~> 0.18", only: [:dev, :test], runtime: false}
]
end
nerves (Apache License 2.0)
defp deps do
[
{:distillery, "~> 2.1", optional: true, runtime: false},
{:jason, "~> 1.0", optional: true},
{:ex_doc, "~> 0.19", only: [:test, :dev], runtime: false},
{:dialyxir, "~> 1.0.0-rc.3", only: [:test, :dev], runtime: false},
{:nerves_bootstrap, "~> 1.0", only: [:test, :dev]},
{:plug, "~> 1.4", only: :test},
{:plug_cowboy, "~> 1.0", only: :test}
]
end
パーティション
以下がデフォルト. fwup.conf で構成を変えられる模様. SDカードを raw dataアクセスしてしまっているのかな..
FILE: nerves/docs/Advanced Configuration.md
+----------------------------+
| MBR |
+----------------------------+
| Firmware configuration data|
| (formatted as uboot env) |
+----------------------------+
| p0*: Boot A (FAT32) |
| zImage, bootcode.bin, |
| config.txt, etc. |
+----------------------------+
| p0*: Boot B (FAT32) |
+----------------------------+
| p1*: Rootfs A (squashfs) |
+----------------------------+
| p1*: Rootfs B (squashfs) |
+----------------------------+
| p2: Application (EXT4) |
+----------------------------+
ファイルシステムを触りたければ squashfsを展開/再圧縮してね、ってなってる. br2触らしたくないんだね.
→ "Cunstomizing Systems.md"に br2触る方法があるね..
nerves_bootstrap (Apache License v2)
defp deps do
[
{:ex_doc, "~> 0.19", only: [:dev, :test], runtime: false}
]
end
FILE: nerves_bootstrap/aliases.ex
このあたりで mix targetを追加している様子. "deps.get", "deps.update", "deps.loadpaths", "deps.compile", "run" かな? mixのビルドシステムに対して 追加している感じやろか..
Buildroot(external tree)共通部 (GPLV2)
Nerves Systemのビルドに必要な環境を Docker file で提供している。
これを使えばよかったのでは... fwupも NAT超えで使えるはずだしなぁ.
nerves_app
nerves new で雛形を作る
depsに以下が設定されている.. システム起動語に必要なのは nerves_system_* と nerves_runtime, nerves_init_gadget (USB targetとして使う場合)
{:nerves, "~> 1.5.0", runtime: false},
{:shoehorn, "~> 0.6"},
{:ring_logger, "~> 0.6"},
{:toolshed, "~> 0.2"},
# Dependencies for all targets except :host
{:nerves_runtime, "~> 0.6", targets: @all_targets},
{:nerves_init_gadget, "~> 0.4", targets: @all_targets},
# Dependencies for specific targets
{:nerves_system_rpi, "~> 1.8", runtime: false, targets: :rpi},
{:nerves_system_rpi0, "~> 1.8", runtime: false, targets: :rpi0},
{:nerves_system_rpi2, "~> 1.8", runtime: false, targets: :rpi2},
{:nerves_system_rpi3, "~> 1.8", runtime: false, targets: :rpi3},
{:nerves_system_rpi3a, "~> 1.8", runtime: false, targets: :rpi3a},
{:nerves_system_rpi4, "~> 1.8", runtime: false, targets: :rpi4},
{:nerves_system_bbb, "~> 2.3", runtime: false, targets: :bbb},
{:nerves_system_x86_64, "~> 1.8", runtime: false, targets: :x86_64},