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キーボード)で必要な措置だ(全角/半角キーがないので)。

0 件のコメント:

コメントを投稿