Nerves#

サポートするデバイス#

https://github.com/nerves-project に nerves_system_*** が存在すれば使用することができる。

tips#

targetにのみ依存するコードとhostでも動作するコードを分けてコンパイルする方法#

警告

非推奨です。開発時の手間が多くなるので使うのをやめました。

https://elixirforum.com/t/how-to-exclude-compilation-of-module-which-is-only-works-on-target/34084

elixirc_paths については https://hexdocs.pm/mix/Mix.Tasks.Compile.Elixir.html#module-configuration を参照

:mnesiaを使うには#

mix.exsのextra_applicationsに追加する

extra_applications: [:logger, :runtime_tools, :mnesia]

ホストでの開発時にターゲットにしかないライブラリのundefined warningを出さないようにする#

elixirc_options の no_warn_undefined を使う。

https://hexdocs.pm/mix/Mix.Tasks.Compile.Elixir.html#module-configuration

defp elixirc_options(:host, _env),
  do: [
    no_warn_undefined: [
      Nerves.Runtime,
      Nerves.Runtime.KV,
      NervesHubLink,
      VintageNet
    ]
  ]

Gitの情報をFirmwareと紐付ける#

defp set_firmware_info() do
  :ok = System.put_env("NERVES_FW_VCS_IDENTIFIER", vcs(:commit))
  :ok = System.put_env("NERVES_FW_MISC", "env: #{Mix.env()}, branch: #{vcs(:branch)}")
end

defp vcs(:branch) do
  {branch, 0} = System.cmd("git", ~w"rev-parse --abbrev-ref --verify HEAD")
  String.trim(branch)
end

defp vcs(:commit) do
  {commit, 0} = System.cmd("git", ~w"rev-parse --verify HEAD")
  String.trim(commit)
end

ポンチョの依存プロジェクトの環境変数をメインプロジェクトに合わせる#

{:poncho_app, path: "../poncho_app", env: Mix.env()},

vm.argsの設定はどこでできるか?#

Nervesプロジェクトのrel/vm.args.eex

iexのhistoryをdisableしたい場合はこのファイルを編集する