■ CASIO FIVA 206VL / Linux 設定メモ CASIO FIVA 206VL はいい Linux マシンになる、、素養がありながら、 なかなかうまくいかないところも多いみたい。 というわけで設定メモを残しておきましょう。 Yutaka Yasuda. Update history 2002. 2.18 Vine 2.1.5 でスタート。あくまで自分用メモを公開しただけ なので他の人は鵜呑みにしないでね。。と。 2002. 4. 6 PCMCIA+CF同時差しでIRQ不足が発覚。それに対応。 2002. 9.29 suspend に失敗するのはキー、ポインタを触るかららしい。 □ TODO APM resume すると eth0 あたりが死んでいる。/etc/sysconfig/apmd の 設定あたりを選んで eth0 を down/up して pcmcia を stop/start する など考えるか?しかし hibernate コマンドは apmd があるとはいえ、 ここを実行するだろうか?そこからまずチェック? ・BSD 系では岩崎さんという人のパッチで ACPI まわりがきちんと動作 しているらしい。この人のパッチを見るとなにか通常の suspend前後に 処理がはさまっている。といってもシステムコールだけみたい。このあたりが 鍵か? ・フラッシュ AS2 BIOS だと輝度調整が駄目とか何とか奇妙な記事が。 PHLASH という DOS プログラムがあるのかな? phlash as2q3a27.bin などという処理について記事が。 /etc/sysctl.conf についても少し。ここで何の設定をすると? phlash プログラムは Casio の Web などにあるというが、、はて?どこ? BIOS update のあたりにあるというが、、 BIOS アップデートの方法としてもう一つ、awdflash rel131jk.bin てな感じのコマンドを利用するという方法が掲載されていたが、これは FIVA じゃない、んだろうなあ。 よくよく見ると FIVA 206 VL は AS2 BIOS がインストールされていた。 ・kbdrate が X resume の際に正しく働いていない。はて? ん? ここ最近は kbdrate を手で実行した覚えがないぞ。何が変わった? ■ システム再インストール □ FIPS FIPS で処理しようとすると、パーティション情報の論理情報と物理情報に 隔たりがある、という。proceed させてもこれが原因か最後まで処理して くれない。 Partition Magic 6.0J で処理させるとうまく動く。 Windows パーティションを分割して、正しく動作するようにした。 □ MBR 厄介なことに MBR が DOS 的なものでないと、フロッピーブートなどの際に 停止する。器用な BIOS だ。 故に /dev/hda の MBR には WinME の FDISK /MBR を、lilo は /dev/hda3 に 入れること。 ただし、システムをレストアした場合などは BIOS の起動スイッチ設定を 有効にしなおせ、だが BIOS 設定でその項目だけに直すのではなく、F9 で デフォルトに戻せ、というような記述がマニュアルにある。奇妙。 デフォルトに戻すと、キーボード英語版、Boot from PCMCIA 、などの 設定を確認しなおすこと。 □ 緊急時ブート WinME を起動時に Control キーを押しっぱなしにすると、startup menu が 出てくる。そこで #4 を選択すると step by step 起動が可能になるが、 ここで config.sys himem.sys だけを選択して起動すれば DOS プロンプトが 出るそうだ。 □ 緊急ディスクの作成 WinME の「アプリケーションの追加と削除」で緊急ディスクを作成。 ただしこれには CASIO の PCMCIA ディスクドライブのドライバが含まれない。 単純には FIVA 用レストア CD で何か別のマシンを起動し、起動したところで レストアするか否かの問い合わせに「N」と答え、その時点で見える A: ドライブの中身をフロッピーに書き出せば良い。 (ただしおそらくその時はフロッピードライブが使えない。一旦 C: ドライブ などに移しておき、あとでフロッピーに拾い出す。) ここには FIVA / CASIO のドライバなどが含まれている。このフロッピーに 自分の手持ちの CDROM ドライバを組み込んで、フロッピー起動すれば大抵の 場合はなんとかなるだろう。 □ COMMAND.COM だけの緊急ディスク FORMAT /S 的起動ディスクも作成可能。とりあえず普通にフォーマットして WINDOWS\COMMAND\EBD ディレクトリの IO.SYS と COMMAND.COM をコピー すれば OK。 □ ハイバネーション方式の指定 BIOS の suspend 設定を Save to Disk にする。 □ ハイバネーション領域の確保 VAIO 用の PHDISK を使って、DOS 起動した状態で A:> PHDISK /REFORMAT /CREATE /RAM256 などとしてパーティションを作成。 ==== ディスク /dev/hda: ヘッド 255, セクタ 63, シリンダ 3648 ユニット = シリンダ数 of 16065 * 512 バイト デバイス ブート 始点 終点 ブロック ID システム /dev/hda1 27 990 7743330 c Win95 FAT32 (LBA) /dev/hda2 2049 3648 12852000 83 Linux /dev/hda3 * 1024 2048 8233312+ 83 Linux /dev/hda4 991 1023 265072+ a0 IBM Thinkpadハイバネーション ==== というような状態にする。1-26 には元の Linux 領域が hda3 として入って いたが、今は寝かせてある。 本体OSスイッチによって、BIOS が hda1/hda3 を排他的に activate して、 そこからブートするようだ。MBR は Windows マシンで FDISK /MBR して初期化、 /dev/hda3 パーティションの先頭に lilo をインストールするのが正解。 lilo の dos ブート機能を用いてここから WinME を起動するもよし。 hda4 に type=160 (a0) のパーティションをとっておけば、それを PHDISK は 使ってくれる。 □ WinME のインストール すでに作成したリカバリ CD ベースの緊急ディスクの中身を見ると、RECOV.BAT がレストアのための BATCH 手続きだが、この冒頭に FDISK/Linux設定/FORMAT の 処理がある。パーティションをいじったりしている状態から WinME をインストール するため、この冒頭部分を削った RECOV2.BAT などでも作っておく。 (中を見ると、MKLXPART /C /M:200 /SNADISP で、MBR 再構成他をやっている ようだ。そのあと RDUXIMG 2:IMAGE_R1.DAT で、Linux 領域を合成している。) この緊急ディスクで起動したあと、RECOV2.BAT を実行してやれば、WinME 環境を /dev/hda (C:) に作る。 □ Linux のインストール bootable CD であれば、CD-BOOT が可能である。ただし BIOS の PCMCIA BOOT が Enable になっていること。 FIVA 標準の CASIO CDROM では、boot 時に kernel に ide2=0x190 という オプションを渡してやること。これで正しく root partition をマウントできる。 □ デバイス PCMCIA Texas Instruments PCI-1420 cardbus controller Sound/video/game Ali Audio Accelerator WDM Driver Video Silicon Motion Lynx Network Realtek RTL8139(A) PCI Fast Ethernet Adapter irq 11 : memory FC006800 - FC0068FF : I/O 1400-14FF □ Loadlin Loadlin については autoexec.bat などに埋める方法が無く、断念。 WindowMe と Loadlin は Windows 環境から起動するしか方法がない、という ような記述もあった。で、lilo を使う。 □ lilo ブートローダは hda3 先頭に入れる。 boot=/dev/hda3 map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message append="apm=on" default=linux lba32 image=/boot/vmlinuz-2.2.18-0vl4.2 label=linux read-only root=/dev/hda3 other=/dev/hda1 label=dos などとする。気を付けるべきは lba32 と apm=on と /dev/hda3 くらいか。 この設定では、hda1 の DOS (WinME) も、正しくブートする。これなら OS スイッチを B に固定しておくとパチパチせずにすむ。 Vine 2.1.5 のインストーラ(setup)では、困ったことに /dev/hda3 に 正しく lilo をインストールしなかった。おまけに boot: プロンプトが でているときに rescue すればよいとドキュメントにはあるが、これでは エラーが出て root partition re-mount 時に kernel panic になる。 手持ちの Slackware 7 の CD で、shell に落して後で手作業で hda3 に インストールした。 ■ 起動後のシステム設定 □ Floppy mtools が使えるといいのだが、USB FD は /dev/fd0 としてではなく、 /dev/sda として認識されてしまう。 # mount -t vfat /dev/sda /mnt/floppy # ls /mnt/floppy などとして使うこともできるが、やはり mtools が使いたい。 ネットには /dev/sda を /dev/fd0 にリンクしてしまうような答えもあったが、 mtools を取得して devices.c を部分修正することで /dev/sda にアクセス させて対応。ドライブレターは D: を使う。 使用時はアクセス権限が必要なため、su して # mdir D: などとする。 具体的には、mtools-3.9.8 で、 % diff devices.c devices.c.org 717c717 < {"/dev/sda",'D', GENHD }, /* Commented out by Yasu. */ --- > /* {"/dev/sda4",'D', GENHD },*/ % という具合。これは #ifdef OS_linux から #endif /* linux */ までの 間に用意されていたコード、 #define predefined_devices struct device devices[] = { {"/dev/fd0", 'A', 0, O_EXCL, 80,2, 18,0, MDEF_ARG}, {"/dev/fd1", 'B', 0, O_EXCL, 0,0, 0,0, FDEF_ARG}, /* we assume that the Zip or Jaz drive is the second on the SCSI bus */ {"/dev/sdb4",'J', GENHD }, {"/dev/sdb4",'Z', GENHD }, /* {"/dev/sda4",'D', GENHD }, */ REMOTE }; の、コメントを外したもの。はじめから /dev/sda4 に D: ドライブレターを 割り当てられるものと推測されるコード。なぜだ? とにかくここを活かして、/dev/sda をアクセスするように変更した。 デバイスファイルのアクセス権は、/dev/fd0 などは自動的に login user の ものになるように設定されるが、sda はそうなっていない(あたりまえ)ので、 root 権限でアクセスする必要あり。 superbit を立てても良いが、ある程度危険(sda に本当にディスクがつながっ たら?)と思ってパス。 su して mdir D: などとして使うべし。 □ APM ・apm --suspend でサスペンドはする。Vine でとくに設定なし。 (カーネルパラメタに apm=on を与えている。lilo.conf の append="apm=on" で今は設定している。) ただし二度目は suspend 自体しない。しかし APM BIOS call を直接行なう プログラム(~yasuda/bin/hibernate)では確実に落ちて、確実に上がる。 と、おもっていたらそうならない場合もあり。要追跡。 (2002.9.29 追記。経験的にどうやら X のキー、ポインタのイベントを 入れると駄目のよう。つまり hibernate を開始してからキーやポインタに 触らなければ落ちる。触ると停止する。) ・X を suspend/resume 後に起動するとポインタが気を失っている場合あり。 一旦仮想コンソールに落として(Control-Alt-F?)、それから戻れば(Alt-F7) 復帰する。 これについては X を kill -USR1 してやれば復旧することが判明。 ・ソフトで電源を切りたい場合は halt -p で。 ・gpm をつけたまま X を起動することそのものがよくないため、常時は外して おく。gpm -t ps/2 で起動。gpm -k でダウン。 ・/etc/sysconfig/apm-scripts/apmscript にいろいろ追加。 hibernate コマンドなどを利用して APM BIOS をキックした場合も、おそ らくは apmd からであろう、正しく call されている。 X 上でのキーリピート速度が戻ってしまうので、kbdrate -d 150 -r 15.0 と、 内蔵 eth0 が上がっているのを嫌って ifdown eth0 ; rmmod rtl8139 と、 pcmcia が上がっているのを嫌って down させる。ただしこれだけは /etc/sysconfig/apmd の PCMCIARESTART="yes" を設定することで実現。 ・kbdrate コマンドは resume のときにうまく機能していないようだ。 □ LongRun 0.9 ソースを取ってきてそのままコンパイル。/usr/local/bin に置く。ソースに 含まれるスクリプトでデバイスファイルを作成。 mkdir -m 0755 -p /dev/cpu/0 mknod /dev/cpu/0/msr -m 0600 c 202 0 mknod /dev/cpu/0/cpuid -m 0444 c 203 0 # longrun -c /dev/cpu/0/cpuid -m /dev/cpu/0/msr ..... などと明示指定して動作させてもよいが、/etc/conf.modules に alias char-major-202 msr alias char-major-203 cpuid を追加した。 初期的に longrun -s 0 100 と設定して上限自由としておく。その後は longrun -f economy でエコノミー、-f performance で能力重視動作になる。 root 権限が必要なため、sticky bit を立てておくと楽? □ サウンド(ビープ) 音を止めたい。ビープが辛い。 # setterm -blength 0 または、setterm -blength 0 > /dev/tty[0-9] あたりで各仮想端末ごとの ビープが止められる。 /etc/rc.d/rc.local にこれを入れても効かないところが変。 ~root/.bashrc などに適当に入れておくと大丈夫な模様。 ところが kon ではビープが復活する。原因不明。/etc/kon.cfg で止められ ないかと思案したが不明。 /etc/sysconfig/apmd の設定中に、$TERMNALBEEP だったら、というような 処理を見つけ、ためしに /etc/sysconfig/keyboard に TERMINALBEEP="no" を加えてみると鳴らなくなった、ようだ。はて? これはしかし /etc/sysconfig/apm-scripts/apmscript で、 if [ "$TERMINALBEEP" != "" ]; then # first we set the beep-length for t in 1 2 3 4 5 6 7 8 9; do setterm -blength $BEEPLENGTH >/dev/tty$t done fi という処理に突っ込むだけのことだが、、、効いているのか?これで? /etc/rc.d/rc.local ではそれほど効かなかったくせに。 □ キーボード (英語版キーは少々扱いづらいが、BIOS で US Keyboard に指定しておけば ほぼ大丈夫。あとは Vine インストール時に us キーを選択すればOK) ・コンソールレベルのキー設定 設定は /etc/sysconfig/keyboard にあり。 KEYBOARDTYPE="pc" KEYTABLE="us" 標準はこうなっている。これを KEYTABLE="us_Ctrl_CAPS" に変えることで CAPS - Control の入れ替えが可能。最終的にはこれは loadkey コマンドに反映される。See /etc/rc.d/init.d/keyboard この名前は /usr/lib/kbd/keymaps/ 中にあるファイル名と一致。 ・X のキー設定 X のキー設定は Vine に関してはうまいことにこの console レベルでの キー配置を拾ってくれているようで、ここだけ設定すれば OK 。 もし X レベルで何か変更したければ /usr/X11R6/lib/X11/xkb/keycodes/ 以下を参照。 http://suken.jp/~tet/freebsd/free22.html □ Network /etc/sysconfig/network にホスト名あり。 NETWORKING=yes HOSTNAME=veju ここの NETWORKING は no にしない。noだと jserver が上がらないなど さまざまなところで引用されている。 /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルに起動時設定あり。 DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes ただしここで DHCP などを指定して、そこに DHCP サーバがないと止まって しまうので要注意。 DEVICE=eth0 BOOTPROTO=static ONBOOT=no IPADDR=133.30.218.44 NETMASK=255.255.255.0 GATEWAY=133.30.218.254 DNS1=133.30.218.32 などとしておいておくと楽。ブート後にこの設定を生かしてインタフェイスを あげたければ、 # ifup eth0 とすればよし。/etc/resolv.conf にはちゃんと nameserver の値が反映されて いたが、ドメイン名 rieb.kobe-u.ac.jp を指定するところがなかった。不明。 nisdomainname コマンドでは設定できない。 □ PCMCIA ・プローブ デフォルトでは活線挿抜に反応しなかったが、/etc/sysconfig/pcmcia に PCMCIA=yes PCIC=i82365 PCIC_OPTS="poll_interval=100" CORE_OPTS= を設定してみたら問題なくプローブするようになった。 ・CDROM 標準の CDROM は /etc/pcmcia/config ファイルに card "Panasonic KXLC005" version "KME", "KXLC005" bind "ide_cs" というような記述を追加して問題なく IDE CDROM ドライブとして認識。 ・network なぜか Vine は /etc/pcmcia/network を特別なものに置き換えている。 元に戻して使用。内蔵 Ether の RealTek ドライバが読み込まれているときは eth0 を内蔵 NIC が使うので、PCMCIA 側が eth0 ではなく eth1 になる。 そのくらいであとは気にする必要なし。 ・Wireless Wireless tool をコンパイルすると、再び例の version 11 以上でないと、 というようなエラーがでる。確かに Vine 2.1.5 の /usr/src/linux 以下の wireless.h は古い。 これでは iwconfig などのコマンドが正しく機能せず、Bit Rate や ESSID を指定できない。 /usr/local/src/wireless_tools.22/wireless.h: * Version : 12 5.10.01 /usr/src/redhat/BUILD/linux/include/linux/wireless.h: * Version : 9 16.10.99 である。この古い wireless.h ファイルを Wireless ツールについてきた wireless.h で上書きしてカーネル再コンパイル。これで iwconfig などが 機能する。 ところで iwconfig などのコマンドは pcmcia-cs が作った eth0 などが 抱え込んでいる wireless.h バージョン情報を見て動作するため、 wireless extension -- kernel -- pcmcia-cs の三者のバージョンを揃えた 上で全部コンパイルしなおしてやらないと正しく動作しない。 順序からいくと kernel, pcmcia-cs, wireless ext. の順で再コンパイルせよ。 インストール時には /etc/ld.so.conf に /usr/local/lib が入っていない ので追加し、ldconfig を実行して libiw.a を登録した。 ・二枚のカードを同時に差した時、IRQ不足になる Feb 19 19:56:06 veju cardmgr[381]: socket 0: ATA/IDE Fixed Disk Feb 19 19:56:06 veju cardmgr[381]: executing: 'modprobe ide_cs' Feb 19 19:56:06 veju kernel: ide_cs: RequestIRQ: Resource in use Feb 19 19:56:07 veju cardmgr[381]: get dev info on socket 0 failed: Resource temporarily unavailable というような感じ。/etc/pcmcia/config.opts の # First built-in parallel port exclude irq 7 をコメントアウトして、IRQ をひとつ使えるようにしてやることで解決。 どうせパラレルポートはないし、使ってなかった。 □ X あちこち ・ ビデオ Sillicon Motion Inc, SM712 LynxEM+ / 2MB RAM を指定すれば良い。 まあ XConfigure がうまく作ってくれる。ディスプレイは generic LCD 800x600 Device 指定のところに Noaccel とアクセラレータを外す指定を入れよと している web page あれども実際には特に問題なし。APM resume の処理で 何か問題が減るのか? ・色数 startx コマンドに serverargs="-bpp 16" などを加えて、16bit color などで 起動するように。 ・kterm kterm のスクロール行増加には .Xdefaults に KTerm*saveLines: 1024 を追加。emacs の行数なども .Xdefaults にあり。 ・キーコード xev を起動して枠内にポインタを持っていってキーを押せばいろいろ表示。 ・リピート速度。 kbdrate コマンドにて X 上でのキー速度などを決められる。.xinitrc などに 入れておくと良い、はずだが、今回は startx に kbdrate -d 150 -r 15.0 を 加えた。また、/etc/sysconfig/apm-script/apmscript に同様に加えた。 □ Wnn /etc/sysconfig/network で NETWORKING no などにすると jserver ごと 動かなくなるので注意。ネットワークインタフェイスを使いたくない場合は 単に ONBOOT=no にしておけばよい。 Vine では setime wnn とすることで利用する IME を変更できるようだ。 setime status で現状を知ることができる。 /etc/sysconfig/ime との関連がいまいち曖昧。 .emacs の設定を下記のように。 ;; "nn" で「ん」を入力 (setq enable-double-n-syntax t) ;; "." で「。」、"," で「、」を入力。 (setq use-kuten-for-period "。") (setq use-touten-for-comma "、") /etc/FreeWnn/ja/jserverrc ファイルの tankan 辞書関係が当初はコメント アウトされているのでそれを入れる。 /usr/share/emacs/site-lisp/egg/eggrc-wnn にも同様に tankan 関係が コメントアウトされているのでそれを外す。 □ Emacs ・フォントサイズ指定 color-mate というスクリプトの中で、困ったことにサイズなど多くを 決めているらしい。.emacs-color.el の (setq default-fontset "fontset-14") をいじることで調整するのが一番簡単。.emacs.el 中に一般的な記述をしても (.Xdefaults にそれっぽいものを書いても)効かない。 □ ppxp ppxpadduser yasuda などとして、ユーザを追加する必要あり。これは単に アクセス権設定を行なう。 serial モデムカードが、ttyS1 になる(S0 は内蔵モデムか?これはしかし ソフトモデムなのだ、、)ので、そこだけ変更を要する。 generic_nodialtone などの自前設定ファイルを /etc/ppxp 中に正しく置く ようにね。 ■ カーネル再コンパイル SRPM をとってきて、 # rpm -i kernel-2.2.19-0vl0.23.src.rpm でインストール。 # rpm -bc /usr/src/redhat/SPECS/kernel-2.2.vine21.spec で展開、とりあえずコンパイル。(ここでのコンパイルは無駄だろうなあ) # cd /usr/src/redhat/BUILD/liux # make menuconfig # make dep # make clean # make bzImage # make modules # make modules_install までとりあえず。module は /lib/modules/2.2.19-0vl0.23 以下に入るので 既存のものとは衝突なし。 cp arch/i386/boot/bzImage /boot/vmlinuz-2.2.19-0vl0.23 cp System.map /boot/System.map-2.2.19-0vl0.23 cd /boot rm vmlinuz ln -s vmlinuz-2.2.19-0vl0.23 vmlinuz rm System.map ln -s System.map-2.2.19-0vl0.23 System.map を用意して、 # lilo Added linux * Added linux-vine Added dos # で登録。lilo しないと boot 時に「ぴぴぴぴぴ」といって怒られる。 その後、pcmcia-cs の新しいものをコンパイル、インストールして完了。 Wireless ツールについては PCMCIA-CS の項を参照。 ■ 細かい設定 □ updatedb 長い resume から戻ると、まず updatedb が動く。これがディスクを回して 困る。locate コマンドを利用することは滅多にないので、定期的には動作 させないことにする。/etc/cron.daily/slocate.cron を修正。 □ kupdated ディスクを定期的に buffer flush するために回してしまう update 処理が カーネルデーモンになっている。厄介。 /proc に bdflush の時間などについての設定箇所あり。 # cat /proc/sys/vm/bdflush 40 500 64 256 500 3000 500 1884 2 # フォーマットについては /usr/src/linux/Documentation/sysctl/vm.txt に 記述があるはずだが、どうもそこは古い。/usr/src/linux/fs/buffer.c の bdf_prm の記述あたりを見るとわかる。5 番めの要素あたりが update される interval のようなので、そこを書き換えれば良い。 # echo '40 500 64 256 6000 3000 500 1884 2' > /proc/sys/vm/bdflush など。ただし困ったことに、最大値が 6000 (60sec) でしかない。6001 に しても反映されない。 最大値の設定は /usr/src/linux/fs/buffer.c の bdflush_max らしいので、 これを変更してカーネルリコンパイルした。デフォルトも長めに変更。 % diff -uNr fs/buffer.c fs/buffer.c.org --- fs/buffer.c Wed Feb 13 10:00:08 2002 +++ fs/buffer.c.org Tue Feb 5 12:42:22 2002 @@ -123,11 +123,11 @@ int dummy3; /* unused */ } b_un; unsigned int data[N_PARAM]; -} bdf_prm = {{40, 500, 64, 256, 180*HZ, 300*HZ, 50*HZ, 1884, 2}}; +} bdf_prm = {{40, 500, 64, 256, 5*HZ, 30*HZ, 5*HZ, 1884, 2}}; /* These are the min and max parameter values that we will allow to be assigned */ int bdflush_min[N_PARAM] = { 0, 10, 5, 25, 0, 1*HZ, 1*HZ, 1, 1}; -int bdflush_max[N_PARAM] = {100,5000, 2000, 2000,3600*HZ, 3600*HZ, 3600*HZ, 2047, 5}; +int bdflush_max[N_PARAM] = {100,5000, 2000, 2000,60*HZ, 600*HZ, 600*HZ, 2047, 5}; void wakeup_bdflush(int); % このカーネルで起動すると、 # cat /proc/sys/vm/bdflush 40 500 64 256 18000 30000 5000 1884 2 # めでたく値が上がっている。