ならぬ寝大晦日です。
昨日、朝まで起きていたので今日は爆睡していました。
深夜12時前後から、ドコモは3時間、KDDIは5時間、SBMは3時間程度、発信規制がかかるそうですが、うちの街はたぶん繁華街の範疇に入っていないので、電話もメールも普通に使えました…。
嬉しいような悲しいような。
高校時代のクラスメートが一同に集まる同窓会がありました。
30人近く集まったのが驚愕だったのに、二次会に一次会の参加者がほぼ全員来るという奇跡。幹事のT氏とT氏の力ですね。
同窓会では、卒業以来会ってない懐かしい面々がたくさん。
三次会の途中で終電が行っちゃったので、そのあとは友達の家になだれ込んで朝まで話し込みました。
話しているうちに高校時代の記憶が結構よみがえりました。
あんなに楽しかったのに全然覚えてなくてショックでしたが、良く考えたらもう6年も前なんですね。詳細に覚えてないのも当然のことです。
まじめに通ってたつもりだったんですけど、話しているうちに色々思い出しました。学生って先生をかなりなめてた気がします。
つまらん授業で寝るためのクッション買って持ってくるとか、廊下でテニス(体育館あるのに)とか先生からしたら相当むかつくだろうなあ。
さすがに不良校じゃないし、僕らも馬鹿じゃなかったので、法に触れるような愚かなこと(窓割ったり(器物破損)車壊したり)はなかったけどね…。
家族で映画「大奥」を見に行きました。
妹曰く、ドラマは、世継ぎ争いに端を発した女同士のどろどろした争いが面白かったとのことです。
しかし映画は妙に色恋沙汰を強調しすぎて、全然面白くなかったです。せっかくの超豪華キャストが…泣いてますよ。
ドラマ(今日放送していたスペシャルのこと)の方も見たのですが、何これ、びっくりするほど面白くねえ。最後のほうなんか完全に映画の番宣への繋ぎじゃん。
よっぽどのものでない限り駄作なんて思わないのですが、これは駄作だ!
映画、ドラマ(映画の番宣)の順で見てしまったのも大失敗でした。ただでさえつまらないのにもう最悪です。
コートと、こっちで着る服と、靴を買いました。
ついにダッフルとお別れです。
北海道に帰省しました。16:00の便(13:40のTXに乗らないと厳しい)なのに、起きたのは13:00でした。しかもご飯が保温にしっぱなし、台所には洗い物が残ってる。
さすがに2週間放置したら絶対カビ生えて液化する!って思ったので、超スピードで洗ってダッシュで出かけました。
で、アパートの駐輪場に下りたら、ぬおぉぉおお、自転車がねえー!
…って、昨日いけじに送ってもらったので自転車は研究棟だった。仕方ないから平砂のバス停まで歩きました。
飛行機には間に合いました。
とにかくバタバタしすぎな一日でした。
なぜか深夜アニメで武装練金やってるよ。ムーンフェイスなつかしー!
雨強すぎる。なんで今日だけ?出かける気が失せるよ。
研究室では冬休みとかそんなのは関係ありません。今日は今年最後のゼミがありました。
雨さえ、この雨さえなければ清々しく参加できるのにねえ。
いけじ達と小の村にご飯食べに行きました。
途中で眠くなって寝てしまった。すんません。やっぱ徹夜は良くないね。
久々に爆笑した。
カウンタの集計機能で、ブラウザなどが渡してくるUser-Agentの値を「ブラウザ」って呼んだり「エージェント」って呼んだり、表記が適当なまま放置しておりました。
何を今更って感じですが、今日hdk氏にツッコまれて思い出したので、直しときました。
修正の内容ですが、サイトを見に来るのはブラウザばかりではないなと思ったので、エージェントって方に統一しておきました。
大下さんからマフラーと手袋をいただきました。
手袋はちょうど買おうと思っていたところだったので非常にありがたいです。
あとはコートだな。
日付的には昨日ですが、時間的には今日なのでこっちに書きます。
再就職の決まった(?)じょーを迎えて北脇邸で飲み会をしました。
ストーブが壊れているとかで寒い寒い。つくばの夜ってなんでこんな冷えるんですかね。家の中が寒いのはうちも同じですけどね…。
じょーからドイツワインのうんちくが聞けてためになった。じょーいわく、フランスは産地しか書いて無くて素人には理解不能ですが、ドイツワインはラベルに情報が書いてあって、分類も割とすっきりしているからわかりやすいみたいです。
加藤先生のお宅での歓迎会、兼クリスマスパーティに参加しました。
毎年そうなんだけど、料理うめー!!種類が豊富すぎて全部食えんかったのが残念です。
福島からはるばる小磯氏も来てくれてすげーと思った。
解散後、加藤先生のお宅の前で縄跳びしたんですが、先生の娘さんが超うまかった。それだけでなく加藤先生も二重跳びを軽くこなしていました。縄跳び得意なんでしょうかね?
Cybex STEPで卓球しました。2時間くらいやったら足が痛くなってきたので、カラオケ組と合流して、4時間遊びきりました。
11人という大人数で押しかけて、カード作るとか作らないとか、お買い得なパック料金を使う使わない、をごちゃごちゃに混ぜて注文したのがまず間違いの始まりでした。
遊ぶ物を変更するときは伝票をカウンターに持って行くんですが、誰か言いに行かなかったみたいで、伝票が余ってしまいました。そのせいで店の人がかなり混乱していました。
20分くらいすったもんだしたあげく、我々に「パックのお客様は何人でしたか?」とか聞いたりと、かなり混乱していたようです。最後はめんどくさくなったのか、会計金額だけ合ってる内容めちゃくちゃな伝票を切って解決(?)していました。いい加減な人だなw
東京のTV番組をネット経由で視聴できるサービスまねきTVが勝訴したそうです。
おわ、いつのまにネット配信OKになった??って一瞬びっくりしたんですが、違いました。まぎらわしい書き方すると誤解を招きますよ朝日新聞さん。
要は「自分で買った」ソニーのロケーションフリーテレビの片割れ(ベースステーションの方)を、まねきTVのビルに置くだけです。東京に借りた部屋にロケーションフリーのベースステーション置いて、実家からアクセスするのとなんら変わりません。
マスゴミ各社は、ネット配信によって今まで築いてきた電波の牙城が崩れる、と恐れるあまり、反応過剰になってるんでしょうか。
それよりこの投げやりなサービス、別の点の方が気になります。
NHKの料金はどうなるの?って話です。規約には会社では払わねーから、お前ら勝手に払え、って書いてあります。
NHKって会社と世帯間で契約するものだった気がするんですが、規約にある書き方だと、家族がばらばらに住んでいる場合は、地元NHKと契約するときと同じように、各世帯で払うのかな?その辺工夫できたらもっと良さそうなのになあ。
偶然早起きしたので、たまには早目に研究室に行くか、って思って行ったら、ちょうどゼミの時間だったらしい。知らなかった。これが三文の得という奴か。
ブラウザをSeaMonkey 1.1bにアップデートしました。サムネイル機能が良い感じです。
あと個人的にはブックマークメニューで右クリックすると、編集メニューが出るようになったのが、かなりGood です。
Visual Studio 2005 SP1が出ていたので適用しました。なんと441MBもあるんですね。ほとんど入れ替えてるんじゃないか?ってくらいの容量です。
ノートPCにインストールしたら、HDDが遅すぎなせいか2時間もかかりました。
一番腹立ったのは「残り時間0秒」って出てから、10分以上待たされたことですね…。嘘もいいところだ。
Thunderbird様にバージョンアップしたから入れ替えろや、ゴルァ!って脅され、言われるがままに入れ替えたら起動しなくなりました。
A previous install did not complete correctly. Finishing install.
何度起動しても、これが出るばかり。
そこで私の取った手順は、まず設定ファイルをバックアップして、Thunderbirdのバイナリがあるディレクトリを葬ってから再インストールしました。起動を確認したら、一旦終了させて、バックアップから設定を書き戻してやります。これで元通りです。
で、結局この現象はなんだったのか調べたら、mozdev.orgのFAQ に書いてありました。それによればThunderbirdのインストールディレクトリにあるxpicleanup.datを消せばいいらしいです。
FAQは親切で結構ですが、エラーメッセージは典型的な意味不明のダメメッセージですね。まあ、人のこと言えませんけどね。
コメントで \ を打つと出力される文がおかしくなっていたので、直しました。
目次: Linux
クロスコンパイルが楽そうなLinux kernelですが、2.4.33.5がコンパイルできない。
$ make bzImage (...snip...) make[1]: Entering directory `/home/katsuhiro/share/tmp/cross/build/linux-2.4.33.5/drivers' make -C block make[2]: Entering directory `/home/katsuhiro/share/tmp/cross/build/linux-2.4.33.5/drivers/block' make all_targets make[3]: Entering directory `/home/katsuhiro/share/tmp/cross/build/linux-2.4.33.5/drivers/block' arm-linux-gcc-3.4.4 -D__KERNEL__ -I/home/katsuhiro/share/tmp/cross/build/linux-2.4.33.5/include \ -Wall -Wstrict-prototypes -Wno-trigraphs -Os -fno-strict-aliasing \ -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=4 \ -march=armv4 -mtune=arm9tdmi -malignment-traps -msoft-float -Uarm \ -nostdinc -iwithprefix include -DKBUILD_BASENAME=blkpg -c -o blkpg.o blkpg.c blkpg.c: In function `blk_ioctl': blkpg.c:252: error: asm-specifier for variable `__r1' conflicts with asm clobber list blkpg.c:252: 前のエラーにより混乱していますので、脱出します (...snip...)
put_userと、u64の組み合わせがまずいのか、put_userを使っている各所でこのエラーが出ます。
if (cmd == BLKGETSIZE)
return put_user((unsigned long)ullval, (unsigned long *)arg);
else
return put_user(ullval << 9, (u64 *)arg);
gcc-3.3.5がダメなのかと思って、gcc-3.4.4でコンパイルしてみた(3.4では-mshort-load-bytesを -malignment-trapsに変えないと別のエラーになる)ものの、やはり同じ。いっそ立ち戻って2.95とか、新しい4系でやるべきでしょうか。
つーか、ARM用のカーネルって世の中にいっぱいあると思うんだが、誰がどうやってコンパイルしてるんだよ?
ちなみにgccに文句を言われるput_userは以下のようなマクロです。行末の継続記号は省いています。
こんなに長いのにマクロなのはinline展開に比べて何か良いことがあるからでしょう。たぶん。
#define put_user(x,p) (
{
const register typeof(*(p)) __r1 asm("r1") = (x);
const register typeof(*(p)) *__p asm("r0") = (p);
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__put_user_x(__r1, __p, __e, 1, "r2", "lr");
break;
case 2:
__put_user_x(__r1, __p, __e, 2, "r2", "lr");
break;
case 4:
__put_user_x(__r1, __p, __e, 4, "r2", "lr");
break;
case 8:
__put_user_x(__r1, __p, __e, 8, "ip", "lr");
break;
default:
__e = __put_user_bad();
break;
}
__e;
})
#define __put_user_x(__r1,__p,__e,__s,__i...)
__asm__ __volatile__ (
"bl __put_user_" #__s
: "=&r" (__e)
: "0" (__p), "r" (__r1)
: __i
)
put_userが呼んでいる __put_user_xの前半を見ると、サイズ(1, 2, 4, 8)に応じて __put_user_1とか __put_user_2などを呼ぶ(blはブランチ命令)関数みたいです。
gccのインラインアセンブラが理解できないので、後半がイマイチわからないんですが…。誰か読めませんか?これ。
どうでもいいけど、これ見ていたら、gccってマクロの引数を可変にできることに気づきました。
gcc専用のコードになってしまうのが難点だけど、メチャクチャ便利だな。
ドコモとのミーティングをなぜか明日だと思っていてすっぽかしてしまった。やってしまった。
さらに今日、停電になるのを忘れていて、リモートからの作業中にマシンが落ちた。
研究室に行って、電源投入してきた。
昨日、今日と研究室に行ったせいか、のどが痛い。研究室は暖かくて良いんですけど、猛烈にのどと目が痛くなる。
hdk氏にそれは登校拒否だって言われた。否定できないよ、うわぁぁヽ(`Д´)ノぁぁーん!
目次: C言語とlibc
glibcは最適化を外すとコンパイルできないことを昨日お伝えしました。
これじゃあるオプション(-fno-omit-frame-pointer:フレームポインタの省略を行わない)つけたいのにできないよ、って思ったんですが、試しに -O2 --fno-omit-frame-pointerって同時に指定したらコンパイルできました。
でも確か -O1くらいの最適化をかけると、アーキテクチャによってはフレームポインタが省略されるはずです。それを考えると -O2と -fno-omit-frame-pointerは矛盾した指定に思えますが…?
gccが、オプションを見ているふりをしている可能性も疑って、生成されたlibc-2.3.2.soを逆アセンブルして確認しましたが、フレームポインタの省略はないようです。
というわけで、最適化とこのオプションは排他ではないことがわかりました。うーん、便利ナリ。
-fなんちゃらのオプションってビットフラグみたいな感じなのでしょうか。-O1とか -O2ってのは、それらをまとめて立てたり倒したりするだけかな。
とりあえずglibcはうまくいきました。割とすんなりできたのは、glibcがクロスコンパイルのことを考えて作られているからでしょう。
ところが、みんながみんなクロスコンパイルが容易にできるわけじゃないんですよね。
ncursesはautomake/autoconf使ってる(ほんとか?)っぽいのにtarget=arm-linuxって指定しても完全に無視だった。他のライブラリはまだ試してないけど、ずっとこんな調子だったら泣けてしまうよ。
あと、以前からつまづいていたのは、Linux kernel 2.4でのmake menuconfigですね。make configはできるから、そっちでやりゃいいんですけど、さすがにmenuconfigすらできないのは悲しすぎです。
ARCH=arm
CROSS_COMPILE=arm-linux-
まず、以上の変数を指定して、make menuconfigすると、こんな事言われます。
$ make menuconfig Menuconfig has encountered a possible error in one of the kernel's configuration files and is unable to continue. Here is the error report: Q> scripts/Menuconfig: line 831: MCmenu0: command not found Please report this to the maintainer <mec@shout.net>. You may also send a problem report to <linux-kernel@vger.kernel.org>. Please indicate the kernel version you are trying to configure and which menu you were trying to enter when this error occurred. make: *** [menuconfig] 1
MCmenu0ってファイルが悪いそうですが、このファイルは自動的に生成される上に、クリーンナップでご丁寧にも消されるので残ってません。というわけでscripts/Menuconfigを追って調べたら、arch/arm/config.inで、drivers/ssi/Config.inというファイルを指定しているところが怪しそう。
わざわざコメントで、ssiだよ、scsiのスペルエラーじゃないよ!なんて書いてありますが、現在のカーネルだとそもそもdrivers/ssi/Config.inと言うファイルがありません。昔はあったのでしょうね。
そのせいでifブロックの中が空のシェルスクリプトが生成され、shが怒っていたのです。
下のような感じでコメントアウトすると良いみたいです。
$ diff -u linux-2.4.33.5/arch/arm/config.in.orig linux-2.4.33.5/arch/arm/config.in
--- linux-2.4.33.5/arch/arm/config.in.orig 2006-12-15 01:29:03.000000000 +0900
+++ linux-2.4.33.5/arch/arm/config.in 2006-12-19 03:33:31.000000000 +0900
@@ -599,10 +599,10 @@
fi
endmenu
-if [ "$CONFIG_ARCH_CLPS711X" = "y" ]; then
- # This is _meant_ to be ssi _not_ scsi. It is not a spelling error.
- source drivers/ssi/Config.in
-fi
+#if [ "$CONFIG_ARCH_CLPS711X" = "y" ]; then
+# # This is _meant_ to be ssi _not_ scsi. It is not a spelling error.
+# source drivers/ssi/Config.in
+#fi
source drivers/ieee1394/Config.in
って書いた後で、既に指摘されていたことがわかったりすると、ほんとガッカリだよ(´・ω・`)ネー。
しかし、私にはmakeの出すエラーメッセージとarch/arm/config.inがおかしい、って事はパッと結びつかなくて、検索もできませんでしたよ…。宇宙人ですか?この人は。
ちなみに、arm以外にも影響あるっぽいので、カーネルクロスコンパイルしちゃうぜ、って奇特な方は参考にどうぞ。
まあ、俺の思いつく事なんてたいがい、どっかのすげー人がやったことの二番煎じなのさ。それならそれでいいのだ。
< | 2006 | > | ||||
<< | < | 12 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |
合計:
本日: