1

I'm building a Nerves project and am attempting to verify my custom firmware will be built with the main Nerves application following the instructions here. I've set up a UI project with Phoenix and have the custom image in its own directory under a project directory. The main Nerves project is here and the custom firmware is here I've set my MIX_TARGET equal to the custom image name (rpi0_wiringPi) and when running:

mix deps.get

I get the error

* (ArgumentError) argument error
:erlang.binary_to_atom(nil, :utf8)
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(stdlib) erl_eval.erl:888: :erl_eval.expr_list/6
(stdlib) erl_eval.erl:240: :erl_eval.expr/5
(stdlib) erl_eval.erl:232: :erl_eval.expr/5
(stdlib) erl_eval.erl:233: :erl_eval.expr/5
(stdlib) erl_eval.erl:888: :erl_eval.expr_list/6
(stdlib) erl_eval.erl:240: :erl_eval.expr/5

And now anything I do regarding mix in that directory throws the same error including mix help. That would tell me something is amiss in the mix.exs file for that project but it's below and appears fine to me

defmodule Fw.MixProject do
  use Mix.Project

  @target System.get_env("MIX_TARGET") || "host"

  def project do
    [
      app: :fw,
      version: "0.1.0",
      elixir: "~> 1.4",
      target: @target,
      archives: [nerves_bootstrap: "~> 1.0"],
      deps_path: "deps/#{@target}",
      build_path: "_build/#{@target}",
      lockfile: "mix.lock.#{@target}",
      start_permanent: Mix.env() == :prod,
      aliases: [loadconfig: [&bootstrap/1]],
      deps: deps()
    ]
  end

  # Starting nerves_bootstrap adds the required aliases to Mix.Project.config()
  # Aliases are only added if MIX_TARGET is set.
  def bootstrap(args) do
    Application.start(:nerves_bootstrap)
    Mix.Task.run("loadconfig", args)
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
    mod: {Fw.Application, []},
    extra_applications: [:logger, :runtime_tools]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:nerves, "~> 1.3", runtime: false},
      {:nerves_network, "~> 0.3"},
      {:ui, path: "../ui"},
      {:shoehorn, "~> 0.2"}
    ] ++ deps(@target)
  end

  # Specify target specific dependencies
  defp deps("host"), do: []

  defp deps(target) do
    [
      {:nerves_runtime, "~> 0.8"}
    ] ++ system(target)
  end

  defp system("rpi"), do: [{:nerves_system_rpi, "~> 1.0", runtime: false}]
  defp system("rpi0"), do: [{:nerves_system_rpi0, "~> 1.0", runtime: false}]
  defp system("rpi0_wiringPi"), do: [{:nerves_system_rpi0_wiringPi, path: "../nerves_system_rpi0_wiringPi", runtime: false}]
  defp system("rpi2"), do: [{:nerves_system_rpi2, "~> 1.0", runtime: false}]
  defp system("rpi3"), do: [{:nerves_system_rpi3, "~> 1.0", runtime: false}]
  defp system("bbb"), do: [{:nerves_system_bbb, "~> 1.0", runtime: false}]
  defp system("ev3"), do: [{:nerves_system_ev3, "~> 1.0", runtime: false}]
  defp system("qemu_arm"), do: [{:nerves_system_qemu_arm, "~> 1.0", runtime: false}]
  defp system("x86_64"), do: [{:nerves_system_x86_64, "~> 1.0", runtime: false}]
  defp system(target), do: Mix.raise("Unknown MIX_TARGET: #{target}")
end

This is the directory structure:

clicky
  fw
  ui
  nerves_system_rpi0_wiringPi

Since mix is throws the error no matter what I do, I cannot get any assistance from it. Is there a way to have mix write a log of what it's doing or something else that would help me troubleshoot the issue?

Aleksei Matiushkin
  • 119,336
  • 10
  • 100
  • 160
brendon.otto
  • 44
  • 1
  • 8
  • Have you tried running a clean build? – Justin Wood Nov 14 '18 at 12:29
  • I would start with hardcoding your `target` everywhere. _Sidenote:_ `[{:nerves_runtime, "~> 0.8"}] ++ system(target)` is better written (anf might be significantly faster) as `[{:nerves_runtime, "~> 0.8"} | system(target)]`. – Aleksei Matiushkin Nov 14 '18 at 14:00
  • Use `IO.inspect()` wherever you need to inspect value. It is safe to be used in pipes since it returns whatever argument was! – Milan Jaric Nov 14 '18 at 14:01
  • It won't build due to dependencies not being available so I can't clean the build. – brendon.otto Nov 14 '18 at 15:13
  • @JustinWood I stand corrected, running mix build started but did not complete successfully. Thanks for pointing me in that direction and I can now look at what could be causing the build to fail – brendon.otto Nov 15 '18 at 12:24
  • If `mix clean` or `mix deps.clean` ever fails, you can always just delete the `_build` directory. – Justin Wood Nov 15 '18 at 12:51

1 Answers1

0

I also ran into this error. Turns out not to have been a problem with mix.exs. I had neglected to set the Nerves networking environment variables(NERVES_NETWORK_SSID, NERVES_NETWORK_PSK and NERVES_NETWORK_MGMT) in config.exs. Once I fixed that 'mix deps.get' worked.

philc
  • 1