トップ 最新 追記
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2003年05月03日 快晴

[linux]

jffs2ファイルシステムは「ループバックでマウントできない」とされてきた。jffs2で検索をかけるとシャープのLinuxザウルス SC-700 のユーザーのページがヒットするが、jffs2ファイルシステムイメージがループバックでマウントできないことを嘆いているページが多かった。実際に

JFFS2イメージのループバックマウントを試みる
# mount -o loop rootfs.img /mnt
としてもマウントできない。しか〜し工夫することでループバックでマウントできた!(^0^)のでメモっておく。ちなみに linux-2.4.20 を使った。

カーネルコンフィグで

Memory Technology Devices (MTD)  --->
  <M> Memory Technology Device (MTD) support
  <M>   Caching block device access to MTD devices
  Self-contained MTD device drivers  --->
    <M>   MTD emulation using block device
File systems  --->
  <M> Journalling Flash File System v2 (JFFS2) support
で mtdcore.o mtdblock.o blkmtd.o jffs2.o モジュールを作っておく。mtdblockとblkmtdがあってややこしい。前に書いたとおりlinux-2.4.20では "jffs2"と"PPP Deflate compression"を両方ともYにするとコンパイルエラーが出てしまうので注意だ。
# mkfs.jffs2 -e 0x1000 -p -r target/ -o rootfs.img
-e イレースサイズ(4kb) -p あまりを0埋め -r ルートディレクトリ -o 出力ファイル
として rootfs.img というjffs2のイメージがあったとすると、
# modprobe jffs2
# modprobe mtdcore
# losetup /dev/loop0 rootfs.img
# modprobe blkmtd device="/dev/loop0" erasesz=4 (単位はkb)
# modprobe mtdblock
# mount /dev/rom0 /mnt
でマウントできる!! ただしアンマウントしても情報が残ってしまうらしく、違うイメージをマウントしても前のが残るため再起動が必要だ(惜しい)これでとりあえずjffs2のイメージファイルからデータを取り出せるが、df -h でみるとディスク使用率 100% になってしまってファイルの追加ができない。これは losetup するときのファイルサイズがブロックデバイスのサイズとなるからのようだ。そこで、
# dd if=/dev/zero of=zero.bin bs=1k count=256  0x00で埋まっているzero.binファイルを256kbyte作る
                                               本当は0xffの方が良い。いい方法あるかな?
# cat rootfs.img zero.bin > rootfs2.img        くっつける
# losetup /dev/loop0 rootfs2.img                ループバックデバイスへの割り当て
といった具合に、jffsのイメージファイルの後ろに0x00をたくさんくっつけてファイルサイズを拡大してから losetup すればdfで見た時のディスク使用率が80%なり70%なりに下げることができてファイルの追加もできた。ふう。

ループバックではなくて、HDDやCFのパーテーションをjffs2で構成してマウントする時は

# modprobe blkmtd device="/dev/hde1"
# modprobe mtdblock
# mount /dev/rom0 /mnt
とすればokだ。これができるということはすばらしいことで、SiliconLinuxをjffs2で作れるっていうことだ!jffs2なら圧縮も効くし、やったね!

大掃除

大掃除をしていたと書いたが、この連休を利用してすっきり片付けた!机の配置まで変えて、まるで別なオフィスのようだ(A^^;。片付け記念写真

サルサ

今年の連休はずっと仕事だった。今日も仕事だ。明日も仕事だ。昼間は仕事をして、仕事終わった後の夜遅い時間にちょびっとELCOCOに踊りに行くのが息抜きタイムだ。
最近男が少ない。男女比が悪いと良くない。女性が多ければ男は楽しいかもしれないが女性にはつまらんだろう。そうすると女性が来なくなり女性が減ってしまう。バランスが取れているのがベストだ。

美女3人

Norikoさんが髪をカールにしたゾ似合うな。

最近、形をちょっとだけ崩して踊ることに目覚めた。いいことか悪いことかわからないけど、本来サルサは形の決まっていない自由な踊りだし、と勝手に思っている(先生には「形どおりがちゃんと踊れるようになってから」て言われそうだけど(A^^;;)

ペアダンスだからリード・フォローが一番大切だが、次に何がくるかといえばリズムだ。技じゃない。リズムは頭の中で123,567,と"数える"ことじゃない。それなら直立不動でもリズムが取れてることになってしまう。男女とも、リズムというのは相手に伝えること?なのかな?踊って気持ちい人というのはリズムが伝わってくる人のことなのは間違いない。

基本的なライトターン(アンダーアームターン)させるとき、男性はバックステップよりもサイドステップのほうがかっこいいし、利にかなっていると思うようになった(もちろん曲調やパートナーのシチュエーションにもよるから必ずしもではないが)。サイドステップといってもサイドベーシックを踏むんじゃなくて、足は肩幅よりも開きめにベタ足で重たく着地してて、腰と上半身のムーブメントだけでリズムを取るとネイティブっぽくてかっこいい。

単にかっこいいだけではなくて、ちゃんとした理由がある。女性側からみるとライトターンというのは、123のタイミングでブレイクがあって、3→4拍目に左→右に体重移動があり、それをきっかけとして567のタイミングで右に回る。女性側からみると3→4拍目の左→右の体重移動がライトターンの動機になる。男性側からみれば逆だから右→左のテンションの移動がライトターンのリードだ。キューバンサルサの場合は派手にアンダーアームで弧をかくリードはしないが、それでも女性の手を前に押すのではなく右から左へのスライドすると気持ちのいいリードになる(これは自分がフォローしたときに実感した)。サイドのムーブメントでこのテンションを作り出して3→4拍目の「タメ」に全ての味を出す。

って偉そうな事を書くと「えびちゃんそんなに上手くないじゃない」と笑われそうだが、もちろん、わかっていることと体が動くことはまったく別問題さ(笑)。

最近EMIKO先生にカシーノの動きを教わったこともあって、カシーノに興味を持った。ネットで調べたらカシーノはサルサのキューバでの古い呼び方で、カジノ(=CASINO)が語源だとか。賭博場で踊ってたからだそうだ。以下のサイトが親しみやすかった。基本的なモーションに関してワンポイントアドバイスのようなものが書かれている。
http://www.clubsalsa.com.au/danceinfo/cubantips.shtml

Cuban Salsa is also known as Casino Salsa. It is a partner
dance that involves intricate arm movements,visually stunning 
maneuvers with some spectacular body acrobatics!
キューバンサルサはカシーノサルサとしても知られています。
複雑な腕の動きが醍醐味のアクロバティックでvisualな
パートナーダンスです。
 
Rise With Thunder. One of the secrets of making your moves 
look spectacular is good armwork for the guys.When doing 
turns such as "Sombrero", your arms should spread out more
as they arc over your partner. In doing so, youpractically
"fan out" your arms to create a visual illusion of 10 arms
 moving at once!
雷の様に上昇してください。あなたの動きをカッコヨク見せる秘密の一つはGUYの
アームワークです。「ソンブレロ」のようなターンを行う場合、あなたの腕はもっと
広げるべきです。そうすればまるでファンの回転のように一度に10個の腕が動いて
いるようなイリュージョンが見えるでしょう!
とか書いてあるんかな。このサイト面白い。Cuban Salsa, Miami Salsa, New York Salsa, L.A. Salsa, Cuban style dance tips が写真つきでわかりやすく書いてある。

2003年05月07日

えびめも

以前のバージョン(tDiary 1.5.2)で書いた日記ページが読めなくなっているらしい。具体的には3月以前かな?どうしたら直るんだろ?

[CAT709]

カタログを書いてみた。ワードは使いにくい。なんでズレまくるんだろ?
http://www.si-linux.com/product/cat709/CAT709_catalog.pdf

[サルサ]

夜10時からLimeStoneに。今日のJazzは女性のボーカリストがいて、day by dayを歌っていただいた。かっこよかった。その後1時間ほど calizaの活動。

岐阜からNaitou-chan登場!

KazamiとMasato(Achi)

2003年05月08日 雷雨

[tDiary]

「本日のリンク元」の文字コードがいろいろあって化ける現象を直すための「本日のリンク元強化プラグイン」をインストールした。このプラグインはcpu負荷が高いのだそうだ。表示が遅くなりそうなのでtopで表示する日数を15日に減らすことにした。

昨日「tDiary1.5.2以前のページが表示できなくなった」と書いたが、ここに修正方法が載っていたので直すことができた。.td2ファイルの後ろにゴミがついているのでエディタで削除してcacheをクリアしたらなおった。tDiaryは使いやすいのと、コミュニティーがしっかりしててうれしい(^-^)

[CAT709]

sh-linuxカーネルがrebootの最後にどのようにCPUをリセットするか自分用にまとめておく。kernelのreboot処理の最後は arch/sh/kernel/process.c の
void machine_restart(char * __unused)
{
    /* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
    asm volatile("ldc %0, sr\n\t"
                 "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001));
}
だ。わかりやすく書くと
mov.l 0x10000000,r2   ←RISC CPUなのでこういう風に32bit即値はかけないのだが便宜的に
ldc   r2,sr           ←ステータスレジスタのBLビットを1
mov.l 0x80000001,r1
mov.l @r1,r2
アドレス0x80000001からlognwordアクセスを行ってアドレスエラー例外を発生させている。さて、SH7709Sのハードウェアマニュアル4章例外処理によれば
4.2.5 例外要求とBL ビット
SR のBL ビットが0 のとき、例外、割り込みを受け付けます。
SR のBL ビットが1 のときに、一般例外が発生した場合には、CPU の内部レジスタはリセット後の状態になり、
他のモジュールのレジスタは、一般例外発生前の内容を保持した状態でリセットと同アドレス(H'A0000000)に
分岐します。
と書いてあるとおりでCPUリセットがかかるようだ。さらにreset後ipl-rom内のスタートコードに戻るが、
start:                            0xa0000000番地
        mov.l   0xffffffd4,r0     EXPEVTレジスタ
        mov.l   @r0,r13           /* save EXPEVT */
        略
        mov.l   expevt_on_start,r0
        mov.l   r13,@r0           /* set initial EXPEVT */
 
としてあって、main.cに飛んでから
 
  if (expevt_on_start != 0)
    {                           /* Reboot */
      putString ("!\n");
という具合だ。同じくSH7709Sのハードウェアマニュアル4章例外処理によれば EXPEVT レジスタはパワーオンリセット時には0x000なののでEXPEVTを見ることでパワーオンかreboot処理なのかを区別している(実際には区別しても処理は同じ)

2003年05月10日 晴れ時々曇り

[CAT709]

CAT709のページを軽く作成した。まだ情報が少ないげ。

CAT709に興味を持っていただいてメールをくれた方達にメールを送った。ココを見てくださっている方で、CAT709欲しい方で「届いてないゾ」という方がいらっしゃいましたらお手数ですがメールください。ゴメンナサイm(_ _)m

[サルサ]

今日はEMIKO先生の誕生日パーティーがあった。仕事せにゃいかんので昼間は出社していたが、日ごろからEMIKO先生には大変お世話になっているし、しかも誕生日だと言われれば行かねばならんだろうから夜にちょっと顔を出すことにした(しかしプレゼントを買う暇は無かった)。仕事は日曜日も出社すればなんとかリカバーできるだろう(汗)。アバナさすがに混んでた!100人以上来てたとおもう。EMIKO先生の人気の表れだろう。


お誕生日おめでとうございます。
ん?ロウソクは20本に見えるゾ

ケーキに集まる女性軍
配ってくれてるエルメスさん

エルメスのチームのパフォーマンスがあった。プロのダンスだから録画したらまずいんだろうけど、超かっこよかったんで10秒くらいにCUTして載せちゃう(10秒くらいなので見逃してやってください m(_ _)m)→avi。皆さん、アバナに行くとこんなかっこいいパフォーマンスがみれますよ!(宣伝^^;;)

そういや、この前のcalizaで自分が踊っている様子をデジカメの動画で撮ってもらって、それをみてやっぱりヘコんだ。じぇんじぇん華というかキレが無いな。録画して正解だった。


2003年05月12日 曇り

[CAT709]

CAT709の開発キット "EK709" の量産品が入荷した

もうあと一歩です。仕上げますのであと少しお待ちください。(*^^*)。内容物は右のとおりで、あとCDROMが入ります。先行発売まであと1週間、正式発売まで後3週間くらいです。

[CAT709]


こんな遊び実験をしてみた。見て判るとおり、USB-シリアル変換器に穴をあけて、USBバスラインから5Vを取り出してEK709の電源として与えた。ちゃんと動いたゾ(^o^)/~~。以前、測定したとき最大5V 430mA (普段は120mA)だったので大丈夫だろう。LANを動かしてMicrodriveまで動かすような最大負荷をかけても大丈夫だった。もちろん遊びの範囲だけど、これでノートPCもってってアウトドアでも新幹線車内でも遊べる。ただしPCの電源やバッテリーに負担をかけるのは間違いないので壊れても文句言わないこと。

<追記>ちなみに写真に写っているI/Oデータ社のUSBシリアルコンバータ USB-RSAQ2 は linux-2.4.21-rc2 の pl2303.o で使用可能だ。自分の環境では /dev/ttyUSB0 として使えている。


2003年05月13日 曇り

[linux]

debian/woodyでの無線LANカードの設定メモ
iwconfigコマンドをインストールするため
# apt-get install wireless-tools
無線LANがまだ使えない状況でどうやってapt-getするかは突っ込まないコト
/etc/pcmciw/wireless.optファイルを編集
# NOTE : Remove the following four lines to activate the samples below ...
# --------- START SECTION TO REMOVE -----------
#*,*,*,*)                 ←ここをコメントアウト
#    ;;                   ←
#
 
      中略
 
# Pick up any Access Point, should work on most 802.11 cards
#essidany,*,*,*)          ←ここもコメントアウトしたほうが
#    INFO="Any ESSID"     ←いいかもしれない(不明)
#    ESSID="any"          ←
#    ;;                   ←
 
      中略
 
# Lucent Wavelan IEEE (+ Orinoco, RoamAbout and ELSA)
# Note : wvlan_cs driver only, and version 1.0.4+ for encryption support
*,*,*,00:60:1D:*|*,*,*,00:02:2D:*)
    INFO="Wavelan IEEE example (Lucent default settings)"
    ESSID="Wavelan Network"   ← ここと
    MODE="Managed"
#    RATE="auto"
    KEY="s:secu1"             ← ここを書き換える。なお
    ;;                          "s:パスワード" のように
                                 s:は必ずつける!!!
ちなみにこれはCAT709で無線LANカードを使う時も同じ。

[CAT709]

TOPPERSを動かそうと思い立った。0日目の今日はTOPPERSをlinuxの上で動かして動作の雰囲気をつかむ。linuxの上で「動かす」とはlinuxの1プロセスの中でITRONとして動かすのでリアルタイム性は実現できないが、コードがちゃんと動くかの検証目的に使える。binutils-dev をインストールしておく必要があるので先にインストールしておく
# apt-get install binutils-dev
TOPPERSから jsp-1.3.tar.gz をダウンロードして解凍する。
練習DIRにてTOPPERSソースを解凍する
$ mkdir rensyu-dir
$ cd rensyu-dir
$ tar xzfv jsp-1.3.tar.gz
jspというディレクトリができる
$ cd jsp
アプリケーション毎にディレクトリを掘るらしい
$ mkdir rensyu-appr
$ cd rensyu-appr
コンフィギュアを起動。-C でCPUタイプを指定する。
linux上で動かす時は -C linux とする。
$ ../configure -C linux
$ ls
Makefile  sample1.c  sample1.cfg  sample1.h
sample1.cというプログラムがこれから動かすプログラムだ。
ざっとソースを見てからコンパイル。
$ make depend
$ make
jspという実行ファイルが出来上がる。これがTOPPERSとsample1.cをコンパイルしてリンクされた実行ファイルだ。早速実行だ。
$  ./jsp
JSP Kernel Release 1.3 (patchlevel = 0) for Linux (May 13 2003, 21:48:18)
Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Serial driver service starts on port 1.
System logging task is started on port 1.
Sample task starts (exinf = 0).
task1 is running (001).   |
tSegmentation fault
って、いきなり死亡。 http://www.ertl.ics.tut.ac.jp/TOPPERS/TOPPERS-USERS/200211/msg00006.htmlによると、
おそらく,segmentation faultしている理由はログタスクのスタックサイズが
不足しているためだと思われます.
#私の環境(Debian 3.0(2.4.17))ではこれが原因で落ちていました.
./include/logtask.h の
#define LOGTASK_STACK_SIZE  1024
を倍の
#define LOGTASK_STACK_SIZE  2048
に変更すると動作すると思います.
ということなので気を取り直して、vi ../include/logstack.h して修正してから
$ make 
ebihara@pen3:/tmp/jsp/rensyu-appr$ ./jsp
JSP Kernel Release 1.3 (patchlevel = 0) for Linux (May 13 2003, 21:50:29)
Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Serial driver service starts on port 1.
System logging task is started on port 1.
Sample task starts (exinf = 0).
task1 is running (001).   |
task1 is running (002).   |
task1 is running (003).   |
task1 is running (004).   |
動いた。doc/linux.txt を読んだところによると、TOPPERSはデバイスに対してNONBLOCKINGでopenするようなのでTOPPERSのプロセスは常にRUNNINGしているようだ。予想どおり
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
22358 ebihara   15   0   376  372   308 R    99.7  0.0   0:10 jsp
となっているので、ロードアベレージは1.0に向かって上昇する。「Linuxの上でスレッドの勉強がしたい」といった勉強用には使えるが、このままでは組み込み装置には向かない。(もちろんlinux上で動かしてはリアルタイム性がないのでそもそも装置制御は無理だ)

2003年05月15日 小雨

仕事

東京に出張だ。おととい、USBから電源を取ればCAT709を新幹線車内でhackできるぞと書いたが早速実践してみた。

もちろん車内がすいてたのでパフォーマンスのために立ち上げてみただけだが(まわりに迷惑かけちゃいかんて)、直しかった修正点を3箇所も直すことが出来たので実績が作れた。笑。USBシリアルケーブルをコンソール兼電源供給として使用し、クロスLANケーブルでnfs上でプログラムを走らせる。それにしても本当に何処でもマイコンボード開発ができる時代になったのだなぁ。

たまたま泊まった都内のホテルにLANケーブルがあってIPリーチャブルだった。どこまで行ってもIPから逃げられないらしい。今回は夜に用事があったのでoff会は無理っぽかったです。

2003年05月16日 小雨

仕事

東京出張2日目。名古屋に帰ったら23時過ぎてた。


2003年05月17日 晴れ

[CAT709]

記念すべきCAT709初出荷だ。開発にお付き合い頂いた方は別として、ユーザー様向けとしては初出荷だ。まだベータ版だけど。思えば去年の暮れに発表してからここまで長かった。これからいろいろな修正依頼なども出てくると思うけど一つの峠を越した感じだ。

[サルサ]

夜、少しだけエルココに。早めに帰った。「ホームページ見つけちゃった」と声かけられた(^o^;;


2003年05月18日 晴れ

[CAT709]

CAT709だけの話ではないが、先日来I/Oデータ社のUSBシリアル変換器 USB-RSAQ2 を使っているが、これはlinux-2.4.20では動かないです。認識されるし、受信は動作するが送信ができなかった。linux-2.4.21rc2で動いたんで、linux-2.4.21が出るまで後少し待つか、あるいはlinux-2.4.21rc2に含まれる drivers/usb/serial/pl2303.c だけをlinux-2.4.20へコピーしてきてコンパイルして pl2303.o デバイスドライバとして組み込めばok。

ターミナルプログラムはWindowsなら昔からTeraTermPROを愛用していて、linuxだとcuを使っていた。しかしcuでは単機能なので他の伝統的な端末プログラムをいろいろ触ってみた。minicomはテキスト画面でメニュー形式なので個人的に好きじゃなかった(好みの問題だ)。kermit(ckermit)を利用した。kermitはコマンドライン形式だ。個人的にはこちらのほうが好み。kermitには XMODEMプロトコルの送受信機能が組み込まれている。しかし CAT709にzImageをダウンロードしようとして send /protocol:xmodem 'zImage' としてもうまく動作しなかった。XMODEM-CRCには対応していないのかもしれない。そこで linux の X/Y/ZMODEM 送受信プログラム lrzsz をインストールしてkermitから呼び出すようなスクリプトを組んだ。

インストール

# apt-get install ckermit lrzsz
~/.kermrc ファイル
set line /dev/ttyUSB0
set speed 115200
set carrier-watch off
set protocol xmodem
set transmit prompt 0
define sx !sx \%1 >\v(line) <\v(line)
define kernel,-
        output k,-
        input 10 C,-
        if failure goto end,-
        sx \%1,-
        :end,-
        connect
define rootfs ,-
        output r,-
        input 10 C,-
        if failure goto end,-
        sx \%1,-
        :end,-
        connect
これで kermit を起動してCAT709をリセットして、
kermit>kernel zImage
とすれば自動的に'K'をタイプした上で zImage のダウンロードができる。TeraTermPROでファイルダイヤログからzImageを探すより楽チンだ。 それにしても kermit のマクロの説明資料が少なくて困った。いまどきBBSのオートパイロットなんて死語なんだろうな。

さらばリターンキー

死語といえばいつのまにか「リターンキー」が死語になってた。実話だが、若い子に「はい、そこでリターン押して」といったらマジで通じなかったんだ。「リターンてどれ?え?これエンターでしょ?」だって。

がーん。「リターンキー」は死語になってたんだ。信じられない。(;゜Д゜)がくがく ぷるぷるだ。あぁ俺はリターンキーだとマジで信じてたし、エンターなんて呼んだことは一度も無いよ。

来年の新入社員に「リターンキー」といったら、意味が通じないか、あるいは「センパイ、リターンなんて古いすよ」っていわれるぞ。そんな時代なんだ。

さようならリターンキー。思い出をありがとう。


2003年05月19日 晴れ

[CAT709]

TOPPERSという uITRON4.0仕様のRTOSを移植した。sample1.cが動作したゾ(^0^/~~~~~~~~~~。とりあえず画面ダンプ だ。
JSP Kernel Release 1.3 (patchlevel = 0) for CAT709(LinuxKoubou SH7709S Embedded Microcomputer) (May 20 2003, 02:09:43)
Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
・erial driver service starts on port 1.
System logging task is started on port 1.
Sample task starts (exinf = 0).
task1 is running (001).   |
task1 is running (002).   |
task1 is running (003).   |
task1 is running (004).   |
task1 is running (005).   |
task1 is running (006).   |
task1 is running (007).   |
task1 is running (008).   |
task1 is running (009).   |
task1 is running (010).   |
最初、コンパイルしたELFモジュールをPARTNER-Jを使ってRAMにロードして動作させて動かしていた。上手くいくようになったのでROM化してみたら全然動かなかった。あれこれ追いかけてみるとどうもグローバル変数を触る箇所で死ぬ。config/sh3/shelf.ld (リンカースクリプト)を見てみたら、なんだ!!! デフォルトではまったくROM化を考えていないじゃないか。全部のセクションが0番地から順番に配置されるようになっていた。.dataセクションも.bssセクションも全部ROMん中だ。これじゃ動くはずがない。

原因がわかっちゃえば修正はちょちょいだ。MEMORY{ } コマンドを使って >ROM と >RAMに配置するようにしたらROM化しても動くようになった。スタンドアロンで動いているぞ。

うーむ、TOPPERSすばらしい。CAT709でuITRON4.0が動くんだもんな。ちなみに各セクションのサイズは↓こんな感じ。

.text0x5e6a (約24Kbyte)
.rodata0x0cb0 (3248byte)
.data0x025c (604byte)
.bss0x90bc (約36Kbyte)
.bssセクションのサイズが大きい気がするが、これはきっとTCBやタスク用のスタック領域を含んでいるんだろう。という雰囲気が伝わってくる。

軽くソースを読んで、スタックの扱いを追ってみた。システム用のスタックは config/sh3/cat709/sys_config.h ファイルで

/*
 *   スタック領域の定義
 */
#define STACKTOP    0x0c400000    /* タスク独立部用スタックの初期値 */
としてスタックボトムを与え、伸びていく方向は知らんぷりのようだ。まだ良く見ていないが、このスタックはコンテキストの外の時のスタックなんだろうな。タスク毎のスタックはTCB構造体内部にSPの保存フィールドがあって最初のタスクディスパッチの際に初期化されるらしい。なお、タスク毎のスタック領域は コンフィギュレータが作成する kernel_cfg.c 内で
static VP __stack_TASK1[TCOUNT_VP(8192)];
static VP __stack_TASK2[TCOUNT_VP(8192)];
static VP __stack_TASK3[TCOUNT_VP(8192)];
static VP __stack_MAIN_TASK[TCOUNT_VP(8192)];
static VP __stack_LOGTASK[TCOUNT_VP(LOGTASK_STACK_SIZE)];
 
const TINIB tinib_table[TNUM_TSKID] = {
        {TA_HLNG, (VP_INT)(( VP_INT ) 1), task, INT_PRIORITY(10), TROUND_VP(8192), __stack_TASK1, TA_HLNG, tex_routine},
        {TA_HLNG, (VP_INT)(( VP_INT ) 2), task, INT_PRIORITY(10), TROUND_VP(8192), __stack_TASK2, TA_HLNG, tex_routine},
        {TA_HLNG, (VP_INT)(( VP_INT ) 3), task, INT_PRIORITY(10), TROUND_VP(8192), __stack_TASK3, TA_HLNG, tex_routine},
        {TA_HLNG | TA_ACT, (VP_INT)(0), main_task, INT_PRIORITY(5), TROUND_VP(8192), __stack_MAIN_TASK, TA_NULL, NULL},
        {TA_HLNG | TA_ACT, (VP_INT)(( VP_INT ) 1), logtask, INT_PRIORITY(LOGTASK_PRIORITY), TROUND_VP(LOGTASK_STACK_SIZE), __stack_LOGTASK, TA_NULL, NULL}
};
といった具合で8Kバイト用意されていた。スタック領域の実体は__stack_TASK1 グローバル変数だから.bssセクションに入ると思われる。実際、objdumpでELFをダンプしてみると
8c00025c l     O .bss   00002000 ___stack_TASK1
8c00225c l     O .bss   00002000 ___stack_TASK2
8c00425c l     O .bss   00002000 ___stack_TASK3
8c00625c l     O .bss   00002000 ___stack_MAIN_TASK
8c00825c l     O .bss   00000800 ___stack_LOGTASK
なるほど、TOPPERSわかってきたぞ。TCB(タスクコントロールブロック ... linux kernelで言えば task_strcutの事だ)内にSP保存メンバー変数があり、ここにコンテキストとして保存される。わかりやすい構成だ。linuxはここらへんが変則的になっていて、プロセスのSPをコンテキストに保存しないのだ。linuxは逆にタスクのスタック領域の中(スタックトップ)にtask_structを保存していて、SP相対でカレントプロセスの管理構造体にアクセスする仕組みになっている。SPを切り替えることがすなわちタスクディスパッチになっている。

時間を作って勉強をかねながらTOPPERSのスレッドで動作するlinuxローダーを作ってみるつもり。


2003年05月20日 曇りときどき雷雨

また故障

PCの故障が相次ぐ。最近は毎月のようにどこかのPCが不調になる。この日記でもPCを修理する話が多い。今回は社員全員で使っているメインの開発用計算機が壊れた。海老原もCAT709をこの計算機で開発していたので仕事にならなくなった。

朝きてみたらカーネルが飛んでいて kdb> で落ちていた。いじってみたが直る気配がないのでrebootしてしばらく使っているとまた kdb> に落ちる。メモリーが悪いのかな?とPCケースを引き出してみると燃えるように熱い。げげ。電源のファンが回ってない。PC屋に走って電源を交換だ。

取り外した方の電源は回らなくなったファンを交換して再生する。セコイかもしれないがつまりこれはリサイクルでエコなのだ。こういうところは岩崎のほうがマメだ。電源ファンのケーブルがコネクタではなくて電源の基板に直付けになっていた。極限まで安くしてある。仕方がないのでケーブルをぷっちんして半田付けしなおす。(そうだ熱収縮チューブが減ってきたので買い足そう)。

この電源装置は実験用にまわすことにする。PCケースには取り付けないのでファンを吸気方向にすることにして、フィルターをつけて生まれ変わった。

主力の計算機はすぐに直ったが、このPCは高熱状態にさらされていたので各部にダメージを受けただろう。HDDが心配だ。データは毎晩バッチ処理でbackupしているので心配ないが、OS全体をbackupしているわけではないのでもしもHDDが飛んだら開発環境を整えなおすのに一苦労なのだ。


2003年05月22日 曇り

仕事

仕事で作るソフトのXツールキットを検討中。GTKで行くか、Qtで行くか。ご存知のとおりGTKはLGPLライセンスでQtはQPLだ。仕事だから、安定性・見栄え・必要な工期が焦点だ。Qtのプライスはhttp://www.trolltech.com/products/qt/pricing.htmlここに書いてあった。EnterpriseEdition/SiglePlatform/1Developerライセンスで$2330だと。一週間工期が短くなるなら十分元が取れる。

最終的にはウチのプログラマの判断を聞くことになるがどっちがいいんだろーか。俺が趣味プロするならGTKなんだが。


2003年05月26日 曇り時々雨

仕事

ルーティングデーモンのお勉強。 routed (RIPv1のみ) → bird (RIPv2, OSPF, BGP)→ zebra (最強)と徐々に複雑なプログラムにシフト。使い方の問題だと思うがbirdに少し問題があった。

bird実行中にOS時間をずらしてしまうとbirdがblockしてしまった。ソースを調べたところ、birdはこれからやろうと計画している事をあらかじめスケジュールしておいてイベントキューに入れておくらしい。例えば「30秒後にブロードキャストを出す」とか。

そのイベント時間にUNIX時間(絶対時間)を使っているのでOS時間がジャンプしてしまうとおかしくなるのだ。このことに対して作者に英文でメールを送ったところ、直ぐに返信を頂いた。話を要約すると「そりゃbugじゃないよ。UNIXシステムでは時間はJUMPしないのさ。ntpdateなんてやぼなものつかわないでxntpdでじわじわと時間を合わせなよ。OS時間をJUMPさせたら他のソフトも混乱するぜ。てなわけでこれはbugじゃないんでよろしく」という感じだった。まぁそりゃそうか。とりあえずメールのお礼を書いておく。

サーバ

またファイルサーバのRAID HDDが片方落ちた
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath]
read_ahead 1024 sectors
md0 : active raid1 hde1[0]
      80035712 blocks [2/1] [U_]
unused devices: 
仕方がないので raidhotremove /dev/md0 /dev/hdg1 して様子み。また落ちるようなら交換する。

2003年05月27日 薄曇り

CAT709

yak (yet anothor knoppix-jp)をベースにして CAT709のクロス開発環境を作ってみた。オリジナルの yak-cd の作り方はわかった。このオリジナルCDでブートすると、HDDにインストールすることなくsh3のクロス開発環境が動くのだ!。もちろんHDDを一切使わずにramで動くので電源を切ってしまうとファイルが消えてしまうから、USB-FLASHメモリーやUSB外付けHDD等にファイルを保存すると良いだろう。もちろんHDDに空きパーテーションがあるなら書き込めるぞ。ただ、最近のPCはWindowsXPプリインストールなので全面NTFSだったりする。LinuxからはNTFSはReadOnlyなのでファイルを保存したり書き込むことは出来ない。

再構成手順は長くて覚えるのも大変なので si-linux-builder のようにコマンドスクリプトを作ると楽ができるだろう。いやぁknoppixすばらしいですよ。ここまで綺麗で日本語化もばっちりなLinuxデスクトップ環境は他にないかもしれない。

再構成手順はわかったけど、まだ boot.img の再構成をすると起動に失敗してしまう。


2003年05月28日 薄曇り

CAT709

5/29木曜日の夕方から名古屋伏見でCAT709を題材にして mtd,jffs2に関するミニセミナーをやります。

http://sea.forums.gr.jp/nagoya/

2003年5月29日(木) 18:30 - 20:30
テーマ (仮題)『Linuxと組み込み』
講師 海老原祐太郎(りぬくす工房)
概要 Linuxと組み込みの話を中心に、
新しいボードの話,http://www.si-linux.com/product/cat709/ 
組み込みLinuxのブートの仕組み基板に半田付けされているFLASH
MEMORYをdiskとしてマウントする仕組みについての話をします。
会場 なごやボランティア・NPOセンター
名古屋市中区栄1-23-13 伏見ライフプラザ12階
(御園座から南へ徒歩3分、中消防署のビルの12階)
http://www.n-vnpo.city.nagoya.jp/plaza1.html
参加費 正、賛助、支部会員(500円)、非会員(1,500円)
定員 50 名
申込方法 WWW:  http://sea.forums.gr.jp/mail/offer.html 
遊びに来てねん。KNOPPIXのデモもできたらします。

[サルサ]

いろいろあって忙しかったので今日のcalizaは休みました。


2003年05月29日 晴れ

仕事

昨日の日記で書いたとおりSEAのセミナーがあって今回は僕が講師をやった。SEAの月例セミナーに出席するのもずいぶん久しぶりになってしまった。会場を見渡すと全員男性だった。笑。だいたい、セミナーをやると一人か二人は女性のエンジニアもきてるもんだけどLinuxって男社会なのか?笑。llug(ladies linux users group)というグループも存在するんですけどね(^^;;名古屋にはメンバーはいらっしゃらないのかな?

そうそう、6年ぶりに再会する友人が居た。全然かわってなかった。


2003年05月30日 晴れ

仕事

今日は東京に出張だ。出版社様と誌面の打ち合わせをした。帰りの東京駅の新幹線ホームでふと見上げると行き先表示板が看板パタパタ方式から一部電光式にかわっていた。今まで、電光板といえば赤緑の2色LEDを使った3色文字ばかりだったが、この電光板は白色LEDを使っていて見た目もものすごくきれいだった。ダイナミック点灯のちらつきもまったく肉眼ではわからないし、輝度もすばらしく明瞭で感動してしまった。

これを作った人は自信もって「これ俺が作ったんだぜ」と言ってるのだろう。モノを作るという職業を選択した人達にとって、モノが何であれ自分の作ったモノが誇れるというのが人生の喜びだろう。こういう仕事は誇っていいと思うし俺も誇れるものをつくりたいもんだと思った。

[サルサ]

今日もエルココいけなかった。最近踊ってないなぁ。それ以上にXAXスポーツクラブに行ってない。体がなまって仕方がない。kernelのcompile待ち時間に腕立てしようとか思うが、計算機をPen4-2GHzにアップグレードしてから4分くらいになってしまったんでトイレにしかいけない。

あぁそうか、それでもKNOPPIXのビルドには20分くらいかかるか。その時間を有効活用することにしよう。


2003年05月31日 台風4号

台風

台風4号が四国に上陸した。名古屋地方は暴風にはならなかったが急にバラバラと雨が降ってきたり晴れ間がのぞいたりと台風特有の変化の激しい天気だった。

仕事

インド人が会社に遊びに来た。彼ら2名は優秀なプログラマだ。春日井市のカレー屋にランチを食いに行った。「日本で食ったカレーで一番うまい」との感想をいただく(^-^)。最後に記念写真をとった。

サルサ

ようやくエルココに行けた。模様替えしていた。机の配置がかわって広くなった。上級レッスンは女性がいなかったので急遽見学に来てた初心者の子たちに基本レッスンをすることになった。

もう十分みんなに周知されたと思うので書いてしまうがEMIKO先生がおめでただ(^o^)/~~ はじめに話を聞いたときからなんとなく男の子のような気がしてたんだけど今日EMIKO先生と話しててご本人も男の子だと思ってるんだって。赤ちゃん楽しみですね。