2016年3月21日月曜日

いつかは来ると思っていたけど…

昨日、VAIO PCGC1-VRX/K から異音が発生。
冷却ファンのベアリングだ。まだ冷えなくはないが、いつ止まっても不思議ではない。

ただゴミが入っただけかもしれないという希望的観測で、久しぶりに分解してみた。
埃は溜まっていたが異音の原因になるようなゴミは見当たらなかった。

一応、掃除をした後で、分解された状態でファンの電源コネクタを外して、そこへ直接5Vをかけて音を聞いた。
異音は、止まらなかった。

ファンが交換できるのなら良いが、とにかく小型で、構造的に難しい。
アルミダイキャスト整形の専用土台と薄いアルミ板の間にファンが挟まれ、リベットで接合されている。
交換はおろか、分解すら困難だ。

15年の長期にわたり頑張ってくれた。このマシンを使いこなすために、私も頑張った。
突然止まるわけではなく、知らせてくれた。相変わらず、主人思いのいいマシンだ。

まだ永遠の別れというわけではない。
異音はするが、起動しないわけではない。すっかり老けこんで、弱ってしまっただけだ。
それでも、もう使わないほうが良いだろう。

いつかは来ると思っていたけど、寂しい。

2016年3月18日金曜日

VAIO PCG-C1VRX/K のFB設定2

前回は脱線して、Windowsを動かしたりしていたが、もう一度Trusty non-paeをインストールし直した。

Trusty non-pae 内のパッケージは古くなっており、インストール後に169個のパッケージを更新しなければならない。
VAIO C1VRX/Kは非力なので、これをやるのも手間だ。という事で、母艦を使って、インストールイメージの更新を行うことにした。
母艦は未だにUbuntu12.04で、Trusty non-paeは14.04だ。バージョンの違いが問題をおこすと嫌なので、VirtualBoxでTrusty non-paeの環境を作って、その中で作業する。
通常のUbuntu Live CDをカスタマイズする方法を参考に、HDDイメージをマウントし、その中にchrootして(/dev,/proc,/sys,/dev/ptsも適切にマウントする)、パッケージの更新を行い、最新パッケージが入ったイメージを作りなおした。
ついでに自分のユーザ登録をしたり、sudoできるようにしたりもしておく。
そこからcpioでファイルを取り出し、新たな「手動インストールTrusty non-pae CD」を作った。それを使ってインストールした。

カーネルも3.13.0-83が新たに出たので、VirtualBox Trusty non-pae上で、自家製パッチを当ててビルド。ビルド前にドライバのソースコードをもう一度見直すと、aty_init_lcd()の呼び出しがFB_ATY_GENERIC_LCD の条件コンパイルになっているのに気がつく。
make menuconfig で、"Device Driver" -> "Graphic Support" -> "Support for framebuffer" -> "ATI Mach64"の下にある、"Mach64 Mach64 CT/VT/GT/LT (incl. 3D RAGE) support" の "Mach64 generic LCD support"(ふー。深い。)にチェックを入れる。
これでビルドすれば、BIOSからLCDのパラメータを読み込むようになるだろう。

VAIO PCGC1-VRX/Kに、新しいカーネルパッケージを入れて再起動後、modprobe atyfb してみるが、うまく行かない。 そもそも、起動した時点で、グラフィックモードになっているように見えるのは、何かがおかしい。

Ubuntu12.04は、GRUBだが、Ubuntu14.04はGRUB2だ。
GRUB2になって、デフォルトで起動直後からグラフィックモードになったらしい。これによって無駄なフリッカーが減って、気持ちのいい起動になる。それはいいことだが、VESA BIOSの機能を利用するようだ(もう少し調べる必要がある)。
VAIO PCGC1-VRX/Kの問題の1つに、そのVESA BIOSでは、1024x480に切り替えられないというのがある。
GRUBが無理やり中途半端なグラフィックモードに切り替えるために、おかしなことになっているようだ。

/etc/default/grubを見てみると、GRUB_TERMINALというのがある。
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=consol
グラフィカルターミナルを禁止する機能のようだ。これをアンコメントして、update-grubして再起動する。
BIOS設定画面のようなフォントで、Linuxが起動する。テキストモードだ。
その状態で、modprobe atyfb をしたら、1024x480に切り替わった。
/etc/modules(2016/10/07修正) /etc/initramfs-tools/modulesに、atyfb を追加して、update-initrdを行い、initrdを作りなおす。
/etc/default/grubの、GRUB_CMDLINE_LINUX_DEFAULTを""、GRUB_CMDLINE_LINUXを"video=atyfb:ywrap:mtrr"にして、再度update-grubして、再起動する。 起動の途中で、1024x480のグラフィックモードに切り替わるようになった。

この状態で、fbset -iをして、パラメータを見ると、メモに残されていたいくつかの値のうちの1つに、一致するものがあった。わかりやすく正しい値を記録しておいた。
この値がわかっていればLCDのパラメータをBIOSから読み出す必要はないのだが、いくつか問題がある。与えられた値は内部で再計算され、内部値が作られる。そのとき、H/Wで利用不可能な値や矛盾する値はエラーとなり、無視される。丸め方向等を意識して値を調整しなければ、同じ値にならない。
modprobe/insmodでの引数と、カーネル起動時の引数の形式が違うので、modprobeで実験した後で、それを起動時の引数に変換する必要もあり、その変換方法もすっかり忘れてしまった。
これらについて、もう一度調べるか?
調べるのは悪いことではないが、なくてもBIOSからの値で動作する。

気が向いたらやるとして、VAIO C1の環境づくり作業をすすめて、早く使える状態にしたほうがいい。
という訳で、この問題は放置する。


PCMCIAに挿入した 3Com 3C575-TX が使えるので、NAS上にsquashfsの形で残したホームディレクトリの内容をマウントして、必要なデータを取り出す。また必要なパッケージをapt-get installして、環境を整える。

Locale:
sudo apt-get install language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8
Font:
sudo apt-get install unifont
Japanese input:
sudo apt-get install uim-fep uim-mozc mozc-server
ホームディレクトリに、以下の内容で、.uimファイルを作る。
(define default-im-name 'mozc)
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> " "escape"))

(require-module "anthy")
(define-key anthy-shrink-segment-key? '("tab" "<Control><IgnoreCase>i"))
(require-module "prime")
(define-key prime-wide-latin-key? '("<Control><Alt>l" "<Control>L"))
(require-module "canna")
(define-key canna-shrink-segment-key? '("tab" "<Control><IgnoreCase>i"))
anthy prime canna はもう使わないのだが、伝統的に入れてある。
漢字IN/OUTは、Alt+Grave(Alt+`)にしたいが、uimは端末でも使えるように作られているため、Alt+Graveは使えない。

WiFi:
kernel 3.13系なので、ドライバのソースをabperiasamy/rtl8812AU_8821AU_linuxから取ってきてビルドする。
ビルドのためには、build-essential を入れておく。
WiFi設定については、GUIが使えないので、nmcli を使う。NetworkManagerもnmcliも最初から入っているので、コマンドを入力するだけ。
nmcli dev wifi con "<アクセスポイント>" password <キー> name "<接続の名前>"
以前は、 NetworkConfigurationCommandLine/Automaticを読んで作業をしていたが、今はこの方法よりもnmcliを使うほうが楽だ。NetworkManager自体は、Ubuntuのデフォルトだし、メンテも行われている。
NetworkManagerが動かないときにネットワーク接続を行うためには役に立つ文書だが、NetworkManagerが動くなら、nmcliを使ったほうがいい。使い方の詳細については、man page参照。

fbterm:
fbterm で w3m-img をつかおうを参照。
前のホームから、.fbtermrcをコピーする。


これでとりあえず使えるようになる。
今回、この作業をしたのは、今年出る16.04を使う準備のためだ。
ずっと12.04を使い続けていたが、これのサポートも2017年4月に終わる。
これを機に、母艦もいよいよ64bit環境へ移行する予定だ(おそらく今年の秋ごろに)。その際にはメモリも倍増化させる。
そして、VAIOはやっと解任される予定だったのだが、trusty non-pae を発見したので、使ってみたくなった。
動くようなら、みんなで、16.04に移行しようと。
VAIOにLubuntu11.10をInstallしたときは、かなり前で記憶も薄れており、乗り換え作業をおさらいしておきたかったので、試した。また本番は16.04のinstallだ。安定してきた秋ごろにInstall作業をするつもりだ。その時にはまた忘れているだろうから、メモを整理して新しくしておいた。

2016/10/07 修正
initrdにモジュールを追加するには、/etc/modulesではなく、/etc/initramfs-tools/modulesに追加する。
ごく最近になって、initrdに関連する作業があったので、もう一度調べているときに、間違いに気がついた。
古い記録を見ると、/etc/initramfs-tools/modules に追加するようにしていたので、しばらく使わないうちにどこかで間違ったようだ。
ついでに、もう少し細かく書いておく。
/etc/modulesは、Upstart(誤解を恐れずに言ってしまえば、SysVinitの新しいやつ)が読み込む。
そのため、起動の瞬間ではなくinit実行時に読み込まれることになる。
ルートファイルシステムもマウントされているので、モジュール自体は/lib/modules/<カーネルバージョン>以下にあるモジュールを読み込むことができ、initrdに入れる必要はない。

/etc/initramfs-tools/modulesは、initrd内の/initが読み込む。
initrd内の/initは、shellスクリプトで、/dev, /sys, /proc等の特殊なファイルシステムのマウントや、ネットワークブートのための処理など、本格的な初期化の前の初期化処理を行なっている。
その中で、script/finctionsを読み込んでいる。この中には、様々な処理が関数形式で書かれている。
その1つに、load_modules()という関数があり、それがinitrdの/conf/modulesを読み込み、そこに書かれた内容を引数としてしてmodprobeを呼び出している。

また/etc/initramfs-tools/modulesはモジュール名のみならず、モジュールのパラメータを書くことができる。
書き込んだ内容は、そのままinitrdの/conf/modulesに入り、そしてそのままmodprobeに渡されることになる。
そのため、modprobeの引数の形式でパラメータを書きこめばいい(Kernelパラメータの形式ではなく)。
とはいえ、VAIO C1-VRX/Kはもう引退だ。こんな情報、どうでもいいことになってしまった。
2018/07/06 修正
よく見たら、Japanese Inputの.uimファイルの説明の部分で、<,>をそのまま入力していたせいで、おかしなHTMLに解釈され、正しく表示されていなかった。&lt;,&gt;で書きなおした。
なお、この"<Control> "は、101キーボード(USキーボード)で必要な措置だ(全角/半角キーがないので)。

2016年3月6日日曜日

VAIO PCG-C1VRX/K のFB設定

先日、ボロVAIOでtrusty non-pae を使ってみたが、その時FrameBufferが正しく動作しなかった。
Lbuntu11.10をInstallしたのは、もう4年以上前の事だ。その時にもFrameBufferが正常に動作せず、苦労をした。
その頃のメモが発掘された。
こんなページが全部で10ページぐらい続いている。

見ているうちに色々思い出した。
Kernel logを見たり、atyfbを改造して内部変数の内容をklogに出させたりして、情報を収集し、それらを1つ1つ検証している。FBドライバには、垂直同期割り込みを利用する機能があり、atyfbでもそれが使える。それを利用して垂直同期周波数を計測したりもしていた。
ドライバのソースも、2.4と、3.0の両方を追いかけ回して、内容を把握して、意味的に同じになるように改造したのだった。

そして、肝心の画面モード設定についても思い出した。
値は、どこかから入手する必要はなく、BIOSから読み取った値を使えば良かったのだ。

ノートのメモ(まさしく上記見開き)の、左下には"BIOS contains drivers information table:"の行がメモされている。
このメモは、kernel logを書き取った内容だ。
そのつつきが、右上の方に書かれている。そこに"LCD CRTC parameters:"の書き込みがあり、この数値は実際にBIOSから読み取られた内容から作られたものだ。
右下の方の部分は、これを調べた時の個人的な考えで、正確な内容ではない。
同期が外れて、LCDの表示が止まってしまうのは正しいが、パラメータや設定は全て正しく、ドライバを改造することで正しい表示となるのだ。

そこまでは思い出したけど、細かいことがさすがにもやっとしている。
これらメモの内容は、どういう時にkernel logに記録されるのかと、ドライバのソースコードを確認する。 atyfb_base.c/init_from_bios()を見ると、"BIOS frequency table..."メッセージ表示後に、aty_init_lcd()を呼び出しており、その中で、BIOSシグネチャを確認して、期待される値なら、"BIOS contains drivers..."や"LCD CRTC parameters..."が表示されるはずであることがわかった。

表示されれば、BIOSパラメータが使われるはずだ。
ではなぜまともに動かないのか?
Trusty VAIO-C1では、同表示されているのか?と思って見たら、"BIOS contains drivers..."や"LCD CRTC parameters..."が、なんと!表示されていない。
これが表示されないとすれば...BIOSシグネチャ?
自然にBIOSが消えてしまうなんて経験はないが、Flashメモリはいつか消えてしまうものだ。
購入後、16年。そろそろヤバイのかもしれないと思い、BIOSをリフレッシュするために書き換えてみようと考えた。

しかし古すぎるVAIO。BIOSの更新ファイルは入手できるだろうか?
ネット上を探してみたが、見つからない。
いろいろ探してみたら、CD-ROMが発見された。そのCDはVRX/K購入から数年後、VAIOサポートが有料で提供していたもので、それまでの更新をまとめたものだ。ひどく忙しい時期だったので、有料でそれらをまとめてくれているなら助かると思い、買ったのだった。
今まで1度も使ったことがなかったが、ここまで時間が経過してから使うことになろうとは思いもしなかった。

CD-1/2の中の"BIOS_R0213P1.exe"と"BIOS_WXP02P1.exe"がBIOS更新のためのファイルだ。
R0213P1はリカバリ用で言うならばWindows2000用、WXP02P1はWindowsXPを使う時のためのものだ。
これらは自己解凍書庫で、展開して、中にある"crisdisk.bat"を実行し、FDを作る。
全く使わなくなっていたかなり古いWindowsPCで、Windowsを起動して、FDを作った。
FDDはVAIO用のUSB接続のもので問題なかった。
ディスケットは、以前使用していたVine Linuxのboot-diskを潰して作った。
(ウチにはまだ未使用の3.5"FDが5枚ぐらい残っている。一度使ったものは数十枚ある。)
なんとか作ったFDで、早速BIOSを更新した。
(更新後FDイメージを取り出し、Linuxで同じFDが作れるようにしておいた)
更新ついでに、Windows2000をリカバリしてみたくなった。
どうせlinuxはまだまともに動作しないので、一旦消してCDでWindowsをリカバリする。
久しぶりにVAIO-PCGC1VRX/KでWindows画面を見た。セキュリティホールも開きっぱなしなので、ネットには接続しないで、少し使ってみた。この機械でも充分にGUIが使える。Windowsもこの頃のものはとても軽い。

途中ですっかり脱線してしまった。
FrameBuffer設定のやり直しは、また次の機会に。

わざわざ紙にメモをしていた理由は、その数年前にPCがFreezeすることが多かったためだ。Freezeすれば電子文書はアクセスできなくなる。紙なら、電源喪失でも、PCがbootしなくても読める。
1日1時間程度の作業で、PCがFreezeしたせいで30分も無駄になれば、作業効率はガタ落ちだ。昔ながらのローテクはいざという時でも使えて、意外に消えにくい。写真以外のページにも、貴重な情報が大量に書かれている。メモ書きも多く、意味がわからないのもあるけど…。しかし、読み進めていくうちにいろいろ思い出す。
文字の丁寧さや汚さも、また記憶を呼び起こすきっかけになる。
今回、設定値を記録し忘れていたが、記録する必要が無いことも思い出した。
少なくとも、以前はBIOSからその情報が読み出せたのだ。それができないのが問題であり、それを何とかすれば、すべてうまく行くだろう。
その方面で、調査を続ける。

井田ブルー

黒潮のおかげで、この時期としては水温も高く18℃。透明度20m。
美しい井田ブルーだった。
晴天でベタ凪。砂地が広がりゴロタは短い。エントリー&イグジットがしやすい。
最高のコンディション。
今回初めて10倍のバブを使ってみた。これもすごく暖かかった。

みんなはドライスーツだけど、自分は6.5mmの2ピースロングジョン、一度水着に着替えて、上下を着ないといけない。
表面がゴムなので滑りが悪く、ものすごく着難い。ドライの人よりも用意が遅れる。
みんながブリーフィングで見所情報を得ているときにも、準備作業をしていて、何がいるかわからない。
「田中さんが見ものを探してくれるからいいか」という感じで潜った。

潜ってすぐに、奥のほう、遊泳禁止地帯境界のロープの方までどんどん泳ぐ。
ロープのそこそこ手前で、田中さんがジェスチャーで「この辺だ」という。
懐中電灯を灯していろいろ見ていると、カエルアンコウ発見。
見つけたと思って、指し棒でタンクをカンカン叩く。

みんなはさらにロープへ接近し、5mぐらい離れている。誰も気が付かない。
叩き方の調子を変えながら、叩くが全く気が付かない。かなり激しい叩き方をするけど、それでもダメ。
こっちも早く撮影したいので、カメラを用意して、撮影をする。
とりあえず、1枚撮影して、さらにタンクを一生懸命タンクをガンガン叩く。
みんなは10mぐらい離れていた。全く気が付かない。というより、何かを一生懸命探している。

考えてみれば、私は見所情報を聞いていない。田中さんの「この辺だ」というジェスチャーを聞いただけだ。
みんなは、「見所情報を聞いていない者が何かを発見できるわけがない。」「邪魔しないで欲しい。」「私達はある目標を探しているんだ。」と考えているかもしれない。
もしそうなら、どんなにタンクを叩いても無駄だ。

写真を見せれば、理解できるだろう。
ただし、移動する前にやることがある。場所の記憶だ。似たような大岩がゴロゴロしているので、少し離れるとどこかわからなくなる。後ろ向きに泳ぎながら、少し引いたところからその場所を見て、目印になるものを探して、記憶する。深さも見ておく。24mぐらい。結構深い。

淳ちゃんに写真を見せて、ジェスチャーで「あっちに居る」と示す。
自分はそのまま戻って、現場でもう一枚写真を取る。
淳ちゃんがみんなを集めてきてくれた。

水中では、小さなオオモンカエルアンコウだと思っていたけど、写真を見たらイロカエルアンコウだった。

後でわかったのだが、実はこれが見ものだったらしい。

その他、黒潮の影響か、ブリが一匹すーっと泳いでいった。
井田は時々大物も入ってくるが、まあまあ珍しい。
写真を撮ろうかとしたけど、省電力状態になっていて、シャッターが間に合わなかった。

群れはすごく綺麗だった。明るい青の中を群れが右へ左へ。
井田の見所は、やはりこれだろう。
透明度が高く、気持ちのいいダイビングだった。