シリアルが出てないモジュールでu-bootを使う場合はnetconsoleという機能が便利です。
u-bootのビルド設定に以下を追加します。
# define CONFIG_NETCONSOLE /* include NetConsole support */
# define CONFIG_NET_MULTI /* required for netconsole */
# define CONFIG_PREBOOT "setenv stdout nc;setenv stdin nc"
CONFIG_IPADDRとCONFIG_SERVERIPも自分が使っているネットワークの設定にしてください。
これでビルドしたバイナリーをOpenOCDなどで焼くとnetconsoleで起動します。netconsoleはUDPのポート6666で通信をおこないます。
KS8695で試してみました。tools/ncb.cというコマンドも用意されていますがncコマンドだけでも使えました。
% nc -l -u 6666
ターゲットの電源を入れて"Hit any key to stop autoboot"が表示されたら(少し時間がかかります)リターンキーを何度か入力します。
これで止める事が出来ますが、止まらない時は何度か試してみてください。
mruby on Yet Another Bare Metalでも同じポートにメッセージを送るようにスクリプトを書いてみました。
def fib n
return n if n < 2
fib(n-2) + fib(n-1)
end
begin
yabm = YABM.new
addr = "10.10.10.202"
mask = "255.255.255.0"
gw = "10.10.10.3"
dns = "10.10.10.3"
yabm.netstart(addr, mask, gw, dns)
dist = "10.10.10.3"
yabm.udpinit
while 1 do
yabm.print "."
yabm.udpsend(dist, 6666, ".", 1)
start = yabm.count()
fib(32)
time = (yabm.count() - start) / 1000
res = "fib(32): " + time.to_s + "sec¥n"
yabm.udpsend(dist, 6666, res, res.length)
end
rescue => e
yabm.udpsend(dist, 6666, e.to_s, e.to_s.length)
end
これをflashに焼いて実行すると以下のようにncに表示されます。
.fib(32): 37sec
ubootの起動出力を受けた場合、一度止めてもう一度ncを起動する必要があるようです。