【发布时间】:2019-04-17 00:58:31
【问题描述】:
我正在构建一个 Nerves 项目,并尝试验证我的自定义固件将按照说明 here 使用主要 Nerves 应用程序构建。我已经使用 Phoenix 建立了一个 UI 项目,并将自定义图像放在项目目录下自己的目录中。主 Nerves 项目是 here,自定义固件是 here 我已将 MIX_TARGET 设置为自定义图像名称 (rpi0_wiringPi),并且在运行时:
mix deps.get
我得到了错误
* (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
现在我在该目录中对 mix 所做的任何事情都会引发相同的错误,包括 mix help。这会告诉我该项目的 mix.exs 文件中有问题,但它在下面,对我来说似乎很好
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
这是目录结构:
clicky
fw
ui
nerves_system_rpi0_wiringPi
由于无论我做什么 mix 都会引发错误,因此我无法从中获得任何帮助。有没有办法让 mix 写下它在做什么的日志或其他可以帮助我解决问题的方法?
【问题讨论】:
-
您是否尝试过运行干净的构建?
-
我会开始在任何地方硬编码你的
target。 旁注:[{:nerves_runtime, "~> 0.8"}] ++ system(target)写成[{:nerves_runtime, "~> 0.8"} | system(target)]更好(anf 可能快得多)。 -
在需要检查价值的地方使用
IO.inspect()。在管道中使用是安全的,因为它返回任何参数! -
由于依赖项不可用而无法构建,因此我无法清理构建。
-
@JustinWood 我的立场已得到纠正,开始运行混合构建但未成功完成。感谢您为我指明了这个方向,我现在可以查看导致构建失败的原因
标签: elixir nerves-project