「Armadillo-J」の編集履歴(バックアップ)一覧はこちら
「Armadillo-J」(2006/02/17 (金) 11:20:55) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
ちいさいちいさい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 の裏コマンド:->
ソースの main.c から。manページには無いオプションが有る。
これで時計あわせはばっちりだ!
こう使うらしい:
/sbin/msntp -r -P no 192.168.hoge.fuga
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
*関連
[[DHCP]]
ちいさいちいさい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
*関連
[[DHCP]]