u-bootのnetconsole


シリアルが出てないモジュールで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を起動する必要があるようです。