Armadillo-J

ちいさいちいさいLinux搭載マイコン。
ハード的には、DIGI Connect MEを用いている模様(現物にはしっかり書いてある)。

tips


DHCP (dhcpcd)


dhcpcd でアドレスが更新されたらどうなる?
-TCPコネクションが連続しているときはブチ切られる。
-都度コネクション張りなおすものは(偶然繋がってるときは前述のとおり)
 新たに繋ぐとき、新しいアドレスで接続している。特に不具合無し。

dhcpcd 動作状態と、ifconfigの出力
-ブートして、dhcpcd起動直後(他のユーザプログラムはまだ無いのでここから)
 →eth0 (IPアドレスは 無い), lo
-dhcpcdタイムアウトして終了後
 →loのみ
-dhcpcdが成功した
 →eth0(IPアドレス有り), lo
この3状態を取っている。(dhcpcd前はloも無いのか?は未確認)
オプション -t の挙動
取得の待ち時間指定。デフォルト60、単位=秒。
取れないときに、指定の時間まで待たずに抜けてくる。
3600(1時間待たせるつもり)→20分は経たないで抜けている
1000→12分以内(飛び飛びでみてるので詳細不明)
330→5:30
340→5:40
999→11:44
704→5:30
600→5:30
どうやら~330が適用範囲らしい。
前述のコマンドライン解析に拠れば、signed longな幅で読んでるのだが。
dhcpcdのソースの場所(coLinuxにインストールした状態で)
/home/(インストール先ユーザ)/uClinux-dist/user/dhcpcd-new
-new の付かないのもある。
(コマンドライン解析を見て-tの範囲を確認した…が…実際は後述のとおり)

dhcpcdの動作
# dhcpcd &
110
# dhcpcd &
****  dhcpcd: already running	←走っている(=タイムアウト前・正常取得)と
                                受け付けない
****  dhcpcd112
# : if not then delete /var/run/dhcpcd-eth0.pid file
# dhcpcd &
****  dhcpcd: already running
****  dhcpcd: if not then delete /var/run/dhcpcd-eth0.pid file
113
# dhcpcd
****  dhcpcd: already running
****  dhcpcd: if not then delete /var/run/dhcpcd-eth0.pid file
# dhcpcd -k
# ps
(略。-kでバックグラウンドプロセスはkillされる。)
# dhcpcd
(コンソールを取りっぱなし。タイムアウトまでなーんにもできない。^C,^Dも効かない。
telnetをブチ切るか…)

遠隔プログラム更新(netflash)


スピード
Hermitで書くより劇的に早い、ってことはありません。
どっちでやっても結局5分近く掛かるのは同じです。

可能なタイプは限られています
AJ010(古い)では出来ません。なぜ? 初めAJ010を入手してがんばってみたのですが全然ダメ。
追加でAJ020を購入したので試してみたら、あっさり。

パラメータ指定間違えると大変。
存在しないファイルを指定されると、
いつまででも待っている。しかしそのファイルをサーバに登場させても
拾ってくれない。
要するに最初に失敗するとアウト。リブートしなければならない。
(ハード的に。他のプロセスを殺してからデータを取りに行くから、
 コマンドラインも使えないし、ソフト的ワッチドッグも出来ない)

オプションに注意
-k をつけてはいけない。
画面に何か出て楽しいんだけど、代わりに
打率5割(テキトー。9割までは行かない)で失敗します。
失敗した後が、リブートしてた・そのまま固まってた、どっちかは忘れました。
どちらにせよ泣けてきます。5分近く掛かるので。

リブート

# kill 1
※Linux全般に適用は出来ない。
普通はkillできない(失敗しないが停まらない)、shutdown -r を行う。
これ(kill 1)が動いたことの確認手順:
(ログイン)
(rootになる)
# ledctrl off   ←内部で点灯している赤ランプを消灯させます。
 点灯は、現在のファームでは、標準パッケージでの“起動完了”タイミング
 (ネットワークが立ち上がって、ログインできるタイミング)です。
 他のところでは一切点灯させてません。
# cd /etc/cofig
# rm dhcpcd-eth0.cache
# rm dhcpcd-eth0.info
# rm appparam
# ls                ←消えてるのを確認
# kill 1
telnetが切断される。
しばらく経つとLED点灯する。← つまり「起動完了タイミングを通過」。
なおこれは他のところでは一切点灯させていない。
(telnet接続-DHCPサーバはたいていキャッシュしてるので、多分同じIP)
(ログイン)
(rootになる)
# cd /etc/config
# ls
 消したはずの3つのファイルを含めて、全ファイルがそろっている
 (IP固定ならdhcp* はありませんが)
 dhcpcd-* があるので、DHCP引きなおした(その結果のキャッシュ用ファイル)
 appparam があるので、フラッシュメモリからの復元が正しく出来ている

NVRAMな使い方をするディレクトリと操作

場所 /etc/config
操作するコマンド flatfsd
必ず/etc/configの「合計サイズ」(ホントはもう少し少ないだろうが)
は64kB以下とすること。
64kB超えて保存(killall -USR1 flatfsd)すると、
起動時に/etc/configがdefaultかゴミになる。
(もっと大きいうちの64kB分しか残らないためか?)

NTP


msntpの動き ネットワーク生きてないときどうなる?
# msntp -r -P no 192.168.(ほげふが)
msntp: unable to send NTP packet
msntp: Network is unreachable
# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 iB)  TX bytes:0 (0.0 iB)
# ps
(dhcpcd無い)
# dhcpcd &
# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:40:9D:26:(もげむが)
          UP BROADCAST NOTRAILERS RUNNING  MTU:1500  Metric:1
(eth0の残りとloは略) ↑IP取得出来ていない状態
# ps
  PID TTY     Uid        Size State Command
    1         root          0   S   init
(略)
  122 ttyS0   root          0   S   dhcpcd ←有る
  130 ttyS0   root          0   S   dhcpcd ←
  132 ttyS0   root          0   R   ps
# msntp -r -P no 192.168.148.1
msntp: not found	←インターフェース活きてないから?
(しばらくして:dhcpcdがタイムアウトのためeth0消滅)
# msntp -r -P no 192.168.(ほげふが)
msntp: unable to send NTP packet
msntp: Network is unreachable

msntp の裏コマンド:->
Armadillo-JはRTCを積んでいないので、中のソフトにとっては、常に1970年1月1日9時0分から世界が始まる。
で。普通に使うと時間が違いすぎて(今2006年、36年の差)スクリプトに組み込むと合わせてくれない。
これのためにNTPDATEに乗り換えようかとだいぶ悩んだ(真っさらのソースからコンパイル….)が、
msntpのソース見たら、manページには無いオプションが有る。
これで時計あわせはばっちりだ!
こう使うらしい:

/sbin/msntp -r -P no 192.168.hoge.fuga

msntpの main.cより。
msntp [ --help | -h | -? ] [ -v | -V | -W ]
    [ -B [ period ] | -S | -q [ -f savefile ] |
    [ { -r | -a } [ -P prompt ] [ -l lockfile ] ]
    [ -c count ] [ -e minerr ][ -E maxerr ]
    [ -d delay | -x [ separation ] [ -f savefile ] ]
    [ address(es) ] ]
(略)
'prompt' is the maximum clock change that will be made automatically.
Acceptable values are from 1 to 3600, and the default is 30.  If the program is
being run interactively, larger values will cause a prompt.  The value may also
be 'no', and the change will be made without prompting.


パッチを当てよう

Ethernetドライバ更新
1 coLinuxにpatchが無いので取ってきて、作る。
 a 探してダウンロードする。
   http://directory.fsf.org/
   で patchを検索したら、
   http://directory.fsf.org/patch.html
   が出てきた。このページから patch-2.5.4.tar.gz をとってくる。
 b コンパイルする。
http://www.iwakimu.ac.jp/~yoshida/solaris2.6/patch-2.5.html
   を参考に。
   windowsのsharedに取ってきたファイルを置き、
   # tar zxvf /mnt/smb/patch-2.5.4.tar.gz
   # cd patch-2.5.4/	←解ってないのでlsしてこのディレクトリを確認しながら。
   # ./configure        ↓ココから4行は常套句らしい。
   # make
   # make check
   # make install | tee install.log ← 参考ページでは |& で繋いでたがエラー
                                       出たので | にしてみた。
   # patch
    ^C    ←stdinで受けるので、中断。受けてくれるので「patch」というプログラム
            が実行パスに出来たことを確認。
   # patch -v  ← 一応、バージョン確認。
2 使う
   # cd ~aj1/uClinux-dist/
   # find * | grep ns7520 ←当てたいパッチは「ns7520」なんちゃら、という
             ファイル名なので。要するにどこにあるか解ってないので探す。
   # cd linux-2.4.x/drivers/net/  ←あったあった。そこへGO!
   # patch < /mnt/smb/fix2_ns7520_eth.patch
   そっけなく、「patching file ns7520_eth.c」と出ておしまい。
   makeしたらちゃんと変わるかな。	   
3 リンク先
   http://directory.fsf.org/
   http://directory.fsf.org/patch.html
   http://www.iwakimu.ac.jp/~yoshida/solaris2.6/patch-2.5.html
  あと上に出してないが、これも参考にした:
   http://www.ecip.shikoku-u.ac.jp/~togawa/Memo/Solaris/little_tools.html




関連


最終更新:2006年02月17日 11:20
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。