やる気のない日々の日報です。
仕事上の愚痴っぽいネタが多いのは、テンパっているせいかもしれません。
以前のネタの改訂版。 前回はyulanに直接zaurusを繋いでいたんだけど、 どうも2.4.x系のusbnetの動きがあやしいので、 2.6.xなカーネルで動いているacacia経由にすることにした。 で、そのあたりの設定を書いていなかったので。_ まず、acaciaの/etc/network/interfacesに
と書いておき、yulanでは、zaurusへのパケットはacaciaがゲートウェイに なると教えてやる。iface usb0 inet static address 192.168.129.1 netmask 255.255.255.0 network 192.168.129.0 broadcast 192.168.129.255 up echo 1 > /proc/sys/net/ipv4/ip_forward down echo 0 > /proc/sys/net/ipv4/ip_forwardあとはzaurus側で、root@yulan:~# route add -net 192.168.129.0/24 gw 192.168.101.22 metric 1としてやればよい。/sbin/route add -net default gw 192.168.129.1 dev usbd0_ zaurus側も自動化できないかと/etc/hotplug/usbdnet{,.conf}をいじってみたけど、 どうもうまくいかない...なぜだ。
昨日の環境で、./configure --prefix=/opt/QtPalmtop --with-gc=/opt/QtPalmtop --with-ssl=/opt/QtPalmtop --with-termlib=ncurses --with-migemo --enable-image=x11 --disable-nls --enable-messagel10n=ja --host=arm-linuxとして、FORMAT_NICE, CLEAR_BUFを生かしてビルドしてみた。 w3m_0.5.1-async-7j1_arm.ipk_ ただし、うちのクロス環境にはXまわりがないのでw3mimgdisplayは入っていません。 どこかからw3mimgdisplayのバイナリを持って来て、/opt/QtPalmtop/libexec/w3m/ に放り込めは動くはずですが。
特に身体を動かしたわけでもないのに、なぜか腹が減る。(0:45)_ 冷蔵庫にあったプリンを食べる。
_ 微妙だ。
殻付きDVD-RAMが使えるドライブが税込み12,000だったので買う。 バルク品よりリテールのほうが安いってどーよ。 とか思いながらIDEALのIEEE1394a/USB2.0コンボな箱、ME-320に入れて、 IEEE1394aで繋いでみると、なぜか認識しない。 正確には、IEEE1394aのデバイスがあることはわかるんだけど、 SCSIデバイスとして(/proc/scsi/scsiに)エントリが出てこない。 仕方がないので、USBで繋ぐと、ちゃんと見えた。 しかしこれ、裸のディスクの入れかたが微妙だな。 いったん奥に押し込んで、手前の爪に引っ掛けるようにしないとダメ。 そのかわりに殻付きRAMだと置くだけでいいわけだが。_ それはそうと、usb-storageの管理下にあるデバイスが増えてきて、 デバイス名とマウントポイントの対応付けがあまりうまくいってない。 (さらにsbp2管理下のデバイスもある) usb-storageは物理的なデバイスに対してSCSIホストアダプタがひとつあるように ふるまうが、/proc/scsi/scsiのエントリからいったん消えたデバイスを 再度接続したときに、以前と同じホストアダプタ番号を割り振る。 って、ここまで書いて思ったけど、実はhotplugの方でなにかしてんのかね?
_ scsiadd -r ? 0 0 0 でデバイスを外して、/proc/scsi/scsiのエントリから消えても、 psでプロセスを見ると、usb-strorage-?やscsi_eh_?などの、 対応するカーネルスレッド(?)が生きているのが いけないような気がするんだけど。 とりあえずこいつらを消すには、usb-storageをmodprobe -rで外すしかない。
_ まあいいや。とりあえず参考になりそうなページ
- USBをシリアルコンソールにタイトルのとおりに、USB-シリアル変換器をコンソールに設定しようという ページだけど、USBデバイスを挿抜したときのhotplugの動作を詳しく書いているので。
- Gentoo udev ガイドudevにすると解決する?
- hotplug(linux/debian)usb-storageで、デバイスを自動的にマウントさせるスクリプトの例がある。 でも、デバイス名は決め打ちだ。
_ うう? Linux1394の sbp Module #Hotplugにあるように、 scsi add/rem patchをあてると改善されるのか?
上記パッチをあててビルド。_ む。alsa-modulesのビルド中に止まる。 http://sourceforge.net/mailarchive/forum.php?thread_id=6218876&forum_id=1752ということなので、modules/alsa-driver/include/adriver.hのmsleepのマクロ定義を LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 29) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 6)) で有効になるように修正する。
うとうとと8:30ごろに目が覚めて、もう少しと思いつつ、次に気がついたら10:30、 ぼーっとしていたらいつのまにか13:30をまわっていた日。
_ Sharp Zaurus SL-C760 Tips: NAND Backupについて検索していて辿りついた。
_ QDBM: Quick Database Manager: QDBM is a library of routines for managing a database. The database is a simple data file containing records, each is a pair of a key and a value. Every key and value is serial bytes with variable length. Both binary data and character string can be used as a key and a value. There is neither concept of data tables nor data types. Records are organized in hash table or B+ tree.
forkパッチとsjisパッチをあててビルド。_ vforkがなくなったわりには、自分自身のビルドでも それほど引っ掛かりはない。 エクスプローラの動きが悪いのは、NC4.78とExcelが動いているWin98SEではふつー。
doc/README.environmentやdoc/debugging.htmlなんかを読んでみる。_ ./configure --enable-thread=pthreads のあと、LDFLAGSに-no-undefinedを 足して作ったcyggc-1.dllに向けてリンクしたw3mで、 GC_INITIAL_HEAP_SIZE=16000000 ./w3m -B としてやると一応は起動した。
_ ただし、しばらくバッファの生成と廃棄を繰り返すとSEGVをくらったり くらわなかったり。 ちなみに、8000000だとリンクを2回辿ったところでSEGV、 12000000だと3回辿ってBACKで戻ったところで
などと出て、死ぬ。Duplicate large block deallocation of 0x102ce000 Duplicate large block deallocation_ gcから見たときの、cygwin側のdata, bss領域の設定値がおかしいのかねぇ。
_ とか書いていたら、また死んだ。
_ パワー不足度チェック: パワー不足90%とか出てしまいましたよ? 医者に相談しろと言われても、なんと説明したものか。
ようやく Bohem GC を DLL 化して w3m が動くようになった。 ヒントはdoc/README.win32に書いてあった。 まずドキュメントを読めってハナシだね。_ まず、以前の スクリプトで Bohem GC に付属する libtool をアップデートする。
でconfigureした後、以下のパッチをあてる。 Makefileの修正の方はDLLを生成するために必須。 gc.hはinclude/private/gcconfig.hの定義をコピーしたもの。 これがないとDLLにしたGCを正常に初期化するためのコードがビルドできない。./configure --prefix=/usr --enable-threads=posix --enable-shared --enable-parallel-mark--- Makefile.conf 2005-01-08 10:27:08.845536000 +0900 +++ Makefile 2005-01-08 10:28:36.331334400 +0900 @@ -190,7 +190,7 @@ # linuxthread semaphore functions get linked: libgc_la_LIBADD = mach_dep.lo $(THREADDLLIBS) $(UNWINDLIBS) libgc_la_DEPENDENCIES = mach_dep.lo -libgc_la_LDFLAGS = -version-info 1:2:0 +libgc_la_LDFLAGS = -version-info 1:2:0 -no-undefined EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \ mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_darwin_mach_dep.s \ @@ -200,7 +200,7 @@ libgccpp_la_SOURCES = gc_cpp.cc libgccpp_la_LIBADD = $(THREADDLLIBS) $(UNWINDLIBS) -libgccpp_la_LDFLAGS = -version-info 1:2:0 +libgccpp_la_LDFLAGS = -version-info 1:2:0 -no-undefined AM_CXXFLAGS = -fexceptions AM_CFLAGS = -fexceptionsあとは普通にビルド、インストールする。--- include/gc.h.orig 2004-10-14 13:08:15.000000000 +0900 +++ include/gc.h 2005-01-08 10:00:43.766304000 +0900 @@ -948,6 +948,28 @@ * Similarly gnu-win32 DLLs need explicit initialization from * the main program, as does AIX. */ +# if defined(__CYGWIN32__) + extern int _data_start__[]; + extern int _data_end__[]; + extern int _bss_start__[]; + extern int _bss_end__[]; + /* For binutils 2.9.1, we have */ + /* DATASTART = _data_start__ */ + /* DATAEND = _bss_end__ */ + /* whereas for some earlier versions it was */ + /* DATASTART = _bss_start__ */ + /* DATAEND = _data_end__ */ + /* To get it right for both, we take the */ + /* minumum/maximum of the two. */ +# ifndef MAX +# define MAX(x,y) ((x) > (y) ? (x) : (y)) +# endif +# ifndef MIN +# define MIN(x,y) ((x) < (y) ? (x) : (y)) +# endif +# define DATASTART (MIN(_data_start__, _bss_start__)) +# define DATAEND (MAX(_data_end__, _bss_end__)) +# endif /* cygwin */ # define GC_INIT() { GC_add_roots(DATASTART, DATAEND); } # else # if defined(__APPLE__) && defined(__MACH__) || defined(GC_WIN32_THREADS)_ 次は w3m。普通に ./configure してから、以下の修正を入れる。 GC_init() から GC_INI() への変更は、スタティックライブラリとリンクする 場合には影響がないので、CVSへコミットしてもいいかも。
--- main.c.orig 2004-10-06 21:19:25.000000000 +0900 +++ main.c 2005-01-08 10:57:56.542393600 +0900 @@ -383,7 +383,7 @@ wc_ces CodePage; #endif #endif - GC_init(); + GC_INIT(); #if ENABLE_NLS setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR);あと、現在のcygwin環境では、config.hでHAVE_LANGINFO_CODESETを 殺しておくこと。--- Makefile.orig 2005-01-08 10:54:43.534862000 +0900 +++ Makefile 2005-01-08 10:58:24.312324800 +0900 @@ -42,7 +42,7 @@ -DCGIBIN_DIR=\"$(CGIBIN_DIR)\" -DHELP_DIR=\"$(HELP_DIR)\" \ -DETC_DIR=\"$(ETC_DIR)\" -DCONF_DIR=\"$(CONF_DIR)\" \ -DRC_DIR=\"$(RC_DIR)\" \ - -DLOCALEDIR=\"$(localedir)\" + -DLOCALEDIR=\"$(localedir)\" -DGC_DLL LDFLAGS = LIBS = -L. -lindep -lintl -lgc W3M_LIBS = -L./libwc -lwc -lssl -lcrypto -lssl -lcrypto -lncurses_ で、ビルドしてやると、
というバイナリができる。$ LANG=C objdump -p w3m.exe | grep 'DLL Name' DLL Name: cygcrypto-0.9.7.dll DLL Name: cygwin1.dll DLL Name: cyggc-1.dll DLL Name: cygintl-3.dll DLL Name: cygncurses-8.dll DLL Name: cygssl-0.9.7.dll DLL Name: KERNEL32.dll DLL Name: USER32.dll_ というわけでバイナリ。
ひとつ負け。_ linux-2.6.9にpatch-2.6.10, patch-2.6.10-ac8, v4l2(ALL-2.6.10.diff.gz), trackpoint-2.6.9.patchをあてて、さらに v4l2-2.6.10-saa7133-stvpci.diffをあてる。 configは こんなかんじで。 あと、udev, dbus-1 を導入し、ねぎ式の udev を使ってみるを見てVMwareのデバイスノードの設定を/etc/udev/links.confに追加しておく。
_ リブートすると、
という問題が発生。 他にもちまちました問題が発生するので、順番に片付ける。
- saa7133-stvpciのtvaudioが/dev/dsp0に登録されてしまうらしく、 wmmixerがalsaのcmipciをコントロールできない。
- ProLiteH540Sのハブにぶら下げているOKI Minikeyboardのトラックポイントが 正常に認識されない。
- advansys.koがなく、SCSIデバイスが見えていない。
_ まず、saa7134とalsaは、とりあえずsaa7134を/etc/hotplug/blacklist.d/localに 記述してhotplugの配下から外すことで解決。
_ トラックポイントの方は、カーネルのコンフィグでCONFIG_USB_KBDとCONFIG_USB_MOUSE がyになっていた (*1)ので外して...も変わらない。
_ 考えながら、usbfsのマウント時に"gid=5,mode=620"というオプションなんか 知らないと言われるので、/etc/fstabからusbfsの行をコメントアウト。 /boot/grub/menu.lstのカーネルオプションから"hdc=ide-scsi"を削除。
_ dmesgを見ても、
と出るばかりで有意な情報がない。 仕方がないので、H540Sのハブに繋いでいたMinikeyboardとTrackmanを、 本体のポートに繋ぎ直してやる...と正常に動くようになった。 つまり、iiyamaのUSB HUBがなんかおかしいってコト?usbhid: probe of 4-2.1.3:1.2 failed with error -5_ まあいいや。とりあえず録画はできる。
_ 問題はadvansysなのだが...やられた。 "Select only drivers expected to compile cleanly"がyになっているせいで ビルドされてない。 ビルドしてインストール。
_ ぐあ、USB-HDDをつないでも認識されない。 USB-Block Deviceとして認識されるっぽいので、 /etc/hotplug/blacklist.d/localに追記、してもusb-storageをロードしてくれない。 IEEE1394のデバイスはOKなので、当面はこっちでしのぐか。
_ しかしまぁ、いろいろ予想外のトラブルだわ。
_ ああ、やっぱりダメだ。USB-HDDが使えないと困るので、2.4.29-pre3に戻す。
_ あれ? なぜか 2.4.29-pre3 でもおかしくなった。 USB-HDDを繋いでも認識しない。 ごちゃごちゃやっているうちにハングアップ。
_ 結局、2.6.10-ac8でしばらくすごすことにしました。
_ あれ? いったん2.4.29-pre3に戻して時点で、MinikeyboardとTrackmanをH540Sのハブに ぶらさげなおしたんだけど、今度はちゃんとMinikeyboardのTrackpointを認識した。 なぜだ。
_ 忘れてた。 dpkg-reconfigure xserver-common して、 Xサーバのnice値を-10から0に設定しなおした。
(*1): たぶん2.6.0-testの頃にyにしたままだった。 これらは"USB HID Boot Protocol drivers"といって、組込み向けに 機能を制限したもの。通常のPCではCONFIG_USB_HIDが入っていれば良い。