VAIO PCG-SRX3E/BD で Linux

VAIO PCG-SRX3E/BD に Linux を入れて強力なプログラム開発ツールを手に入れよう! やっぱり Windows だけを使っての開発ってお金がかかるし、良い物を作るには UNIX マシンが不可欠。 薄々感じてはいたんだけど、やっとこれで環境が整うかな? それにしてもまたノートマシンだ。2代目の購入時には世に存在してなかったバイオ! 今までのノートマシンは一応、ブータブル FD ドライブが付属していたが、この VAIO は別売りだそうな。 しかも、純正は 1万円 もするらしい。インターナショナルなマシンなのに。。。 購入するのはもったいないのでなんとか i.Link のコンボドライブだけで終わらせよう。
追記(2005/8/07):現在はMomonga2に移行しています。素直にi.Linkのコンボからインストール可能です
  1. Turbo Linux 7 (ftp) のインストール
  2. RedHat Linux 7.2 (ftp) に乗り換え
  3. KXL-830AN の認識
  4. kernel2.4.17 へアップデート 今なら2.4.18が良いかも
  5. 無線 LAN の設定
  6. ジョグダイアルの設定
  7. i.Link コンボドライブの設定
  8. LILO をアップデート
  9. vim のアップデートとスクリプト
  10. Cygwin のインストールと WindowMaker スクリプト関連更新
  11. お役立ち VAIO リンク

Turbo Linux 7 (ftp) のインストール

インストール時に使用するのは
先ず、WindowsXP を起動して D ドライブのパーティションを分割する。 Windows で使用するパーティションは Linux からでも R/W できるように FAT32 でフォーマット。 残りは未確保状態にしておく。そして i.Link ドライブに TurboLinux7 のインストールディスクを入れ、 全てのファイル(Disk2枚分)を新 D ドライブにコピーする。
追記(2002/5/25):TurboLinuxはインストールディスクのドライブツリーのコピーがローカルディスクにあればインストール出来るが、RedHat等はISOイメージでないとダメ。
コピーが終了したら CD を入れたままリブートする。CD からブートされたら
lilo: install nousb
と入力して USB を使わない状態でインストールを開始する。途中でコンボドライブを認識しなくなるが インストール元にローカルディスクを指定してインストールを開始することが出来る。 インストールは無事終了したがあまり TurboLinux は好きじゃないので RedHat をインストールすることにする。

RedHat Linux 7.2 (ftp) に乗り換え

インストール時に使用するのは
前PCの時に購入した CD-ROM(PCMCIA) を TurboLinux が認識してくれたのでこれを使って RedHat の CD をイメージ化する。 ( i.Link コンボドライブだけのはずが・・・) TurboLinux7 はツリーイメージをハードドライブに置いておけば良いのだが、 RedHat7.2 のインストールでは ISO ディスクイメージでなければならない。
追記(2002/5/02):現在はIEEE1394のパッチを当てれば i.Link コンボだけで CD のイメージ化は出来るハズ
$ dd if=/dev/hdc of=/mnt/dos/discX      Xは 1,2 枚目の数字
TurboLinux と同様 USB を使わないオプションで i.Link コンボドライブから RedHat をブートする。 途中でコンボドライブを認識しなくなるのでローカルディスクからのインストールを行う。 RedHat7.2 の売りの GRUB ブートローダーはとりあえず入れた。興味あったんで。(もちろんMBRに)

KXL-830AN の認識

TurboLinux では認識してくれていたドライブだが RedHat では認識してくれない。 どうやら TurboLinux では ide-cs にパッチを当ててくれていたらしい。 TurboLinux を見直したが既に遅し。 そこで、ide-cs.c にパッチを当ててモジュールを再作成しよう。 が、RedHat Linux7.2 に入っているカーネルは 2.4.7-10 となっている。 ACPIのパッチを入れないと PCG-SRX3E 内蔵の無線 LAN が使えないそうなのでどうせならカーネルをバージョンアップさせることにする。

kernel2.4.17 へアップデート

1.ファイルの準備
2.ダウンロードしたファイルの展開など
$ cd /usr/src
$ tar xvfz linux-2.4.17.tar.gz
$ gunzip acpi-20020308-2.4.17.diff.gz
$ gunzip Configure.help-2.4.17.ja.gz
$ mv linux linux-2.4.17
$ ln -s linux-2.4.17 linux
$ ln -s linux-2.4.17 linux-24
$ cp linux-2.4.7-10/configs/kernel-2.4.7-i686-smp.config linux/.config   smpってマルチプロセッサ用かも
$ cp Configure.help-2.4.17.ja linux/Documentation/Configure.help
$ patch -p0 < acpi-20020308-2.4.17.diff

KXL-830AN 用に ide-cs.c にパッチを当てておく。(ide-cs.c と ide_cs.c の違いはカーネルドキュメント参照のこと)
3.kernel-2.4.17 を作成
$ cd /usr/src/linux
$ vi Makefile

  4 行目を以下のように変更
  EXTRAVERSION = -custom    ←個人的こだわり

$ make oldconfig 又は make xconfig
  
  PCMCIA の無線 LAN の設定はもちろん、他に以下を有効にする。
  (ただ usb-storage を入れると起動時にお亡くなりになる。。。なんでだろ?)
  ・[Code maturity level options]-[Promt dor development ...]
  ・[General setup]-[ACPI Support]-[ACPI Support]
  ・[Character devices]-[Sony Vaio Programmable I/O Control Device support]
  
$ make dep
$ make clean
$ make bzImage
$ make install
$ make modules
$ make modules_install
4.lilo.conf を作成して MBR に書き込む ( 最初に GRUB だったんで lilo.conf が無かった)
$ vi /etc/lilo.conf

      :
  image=/boot/vmlinuz-2.4.7-10
    label="RedHat Linux"
    read-only
    root=/dev/hda7

  image=/boot/vmlinuz-2.4.17-custom
    label="RedHat New"
    read-only
    root=/dev/hda7
      :

$ lilo -v
これでアップデート完了。LILO で RedHat New を選べばニューカーネルで起動する。 結局、GRUB は使ってない。というか LILO で上書きしてしまった。 もちろんニューカーネルでの起動に失敗しても旧カーネルが残ってるので大丈夫。 だけど、やっぱりリカバリ FD が作れないのは精神的によろしくない。

無線 LAN の設定

無線 LAN は以下のように認識されている。
$ cardctl ident

Socket 0:
  no product info available
Socket 1:
  product info: "Lucent Technologies", "WaveLAN/IEEE", "Version 01.01", ""
  manfid: 0x0156, 0x0002
  function: 6 (network)
で、/etc/pcmcia/config 内の 以下の wvlan_cs を orinoco_cs に変更する。 新カーネルには wvlan_cs が入ってないんで。(これもカーネルドキュメント参照のこと)
card "Lucent Technologies WaveLAN/IEEE Adapter"
  version "Lucent Technologies", "WaveLAN/IEEE"
# bind "wvlan_cs"    ← # でコメントアウトした
  bind "orinoco_cs"

ついでに KXL-830AN の設定を追加しておく
card "Panasonic KXLC005"
  version "KME", "KXLC005", "00"
  bind "ide-cs"
ここで PCMCIA を再起動させると「ピー」と普段よりもトーンの高い音がして認識してくれる。 状態を見てみると
$ /etc/rc.d/init.d/pcmcia restart
$ cat /var/lib/pcmcia/stab

Socket 0: empty
Socket 1: Lucent Technologies WaveLAN/IEEE Adapter
1 network orinoco_cs  0  eth1
となっているので、あとは /etc/sysconfig/network-scripts に eth1 の設定を作ってあげる。 ( ifcfg-eth0 をコピーしてちょろっと変更した。) ワイヤレスの設定は /etc/pcmcia/wireless.opt に ESSID 等を記述する。 MACアドレスの先頭 3byte で認識しているようなので 00:02:2D でヒットするようスクリプトを変更する。 で、ネットワークをリスタートすると、以下のように無線LANが使えるようになった。 (MACの一部はzzで伏せておく)
eth0      Link encap:Ethernet  HWaddr 08:00:46:zz:zz:zz
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:168 (168.0 b)
          Interrupt:9 Base address:0x9000

eth1      Link encap:Ethernet  HWaddr 00:02:2D:zz:zz:zz
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:512 (512.0 b)
          Interrupt:9 Base address:0x100

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:420 (420.0 b)  TX bytes:420 (420.0 b)
本体に付いている WIRELESS スイッチは Linux では意味がないのだろうか? OFF のままでもカードを認識しているぞ。ってことは使わないときは電池の無駄使いになるのか? カードは使うときにだけスタートするように
$ chkconfig pcmcia off              としておく。
$ /etc/rc.d/init.d/pcmcia start     使うときにこうする。
有線LAN(ブロードバンドポート) と異なるネットワークアドレスを使用する場合等はデフォルトゲートウェイを手で追加する必要があるのかな? resolv.conf はどうやって書くんだろう。詳しくはよく知らない。 ついでだけど KXL-830AN もちゃんと動くことを確認した。hdc で認識されている。

ジョグダイアルの設定

Xwindow でジョグダイアルを使うには sonypi が必要になる。 カーネルのコンパイル時にモジュールとして作成してあるのでドライバーはこのままで良い。 mknod で /dev/sonypi を作成(Major=10,Minor=63)。(メジャー番号がカーネルソース添付のドキュメントと異なっているのに注意) あとは jdmouse をダウンロードしてインストールすることに。 が、これは PCG-SRX3E が持ってる [BACK] ボタンには対応していない。 しかし、ありがたいことに jdmouse はソースで公開されていてコメントにこう書かれている。
追記(2003/02/08):マイナー番号の説明が間違っていました。240〜255の間の空きを使用するようです。
/*
 * jdmouse.c: jogdial -> wheel mouse event converter
 *
 * 2001/08/23 by JR0BAK = Kunihiko IMAI
 *
 * You can freely use, modify or re-distribute this program.
 * But don't delete, modify these credit sentence.
 */
なので自分でソースを変更して対応させることにしよう。 変更したのは以下の通り(太字部分)
        :

char *jogtable[] = {
  "",
  "\x08\x00\x00\x01",
  "\x08\x00\x00\xff",
  "\x09\x00\x00\x01",
  "\x09\x00\x00\xff",
// "\x09\x00\x00\x00",        // ジョグダイアルを押した場合は LBUTTON を
  "\x0c\x00\x00\x00",         // ジョグダイアルを押した場合は MBUTTON にする
  "\x08\x00\x00\x00",
};

        :

    case SONYPI_EVENT_JOGDIAL_PRESSED:
    case SONYPI_EVENT_JOGDIAL_RELEASED:
      write(fdm, jogtable[c], 4);
      break;
    case 35:                  // ← これが [BACK] ボタン
      write(fdm, jogtable[SONYPI_EVENT_JOGDIAL_PRESSED], 4);
      break;
    case SONYPI_EVENT_CAPTURE_PARTIALPRESSED:
    case SONYPI_EVENT_FNKEY_F5:

        :
make して出来た実行ファイルは /usr/local/bin にコピーした。 そして jdmouse の README.euc を参考に /usr/X11/XF86Config-4 を編集し、/dev/jdmouse を作成する。
        :

Section "ServerLayout"
        Identifier     "Anaconda Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Mouse1" "SendCoreEvents"
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Jogdial" "CorePointer"
EndSection

        :

Section "InputDevice"
        Identifier  "Jogdial"
        Driver      "mouse"
        Option      "Protocol" "IMPS/2"
        Option      "Port" "/dev/jdmouse"
        Option      "Device" "/dev/jdmouse"
        Option      "DeviceName" "jog dial FIFO"
        Option      "ZAxisMapping" "4 5"
        Option      "AlwaysCore" "1"
EndSection

        :
最後にシステム起動時に自動実行するようにしておけば良い。 自分は rc.local に /usr/local/bin/jdmouse & を記述しておいた。 リブート後 X を起動すると、見事!ジョグダイアルが使えるようになった。 ついでにjdmouseでは Fn キーでバックライトの調整が出来たりする。 別に X とは関係ないんだが、かなりうれしい。
デフォルトのウインドウマネージャ(と言って良いのか?)は GNOME になっている。 これはSRX3Eでは起動に結構時間がかかる。そして、なによりも重たい。 そこで軽そうな WindowMaker を使用することにする。
$ cd /usr/bin
$ ln -s /usr/local/bin/wmaker .
$ vi /etc/ld.so.conf

  最終行に以下を追記
  /usr/local/lib

$ ldconfig
$ cd
$ wmaker.inst
$ switchdesk WindowMaker
$ startx
実はインストールディスクに WindowMaker が在ることを知らずソースから入れた。 なのでこんな感じになってしまった。はじめからインストールしていれば wmaker.inst からの実行で良いのだろう。

i.Link コンボドライブの設定

認識させたいドライブは i.Link CD-RW/DVD-ROMドライブ(SONY:PCGA-CRWD1) 。 kernel2.4.17 内の ieee1394ソースでは動作させることが出来ないので IEEE1394の最新(?)ソース(ieee1394-473.tar.gz)をダウンロードして展開する。 モジュールを再作成してインストールする。
追記(2002/5/30):5/2時点での最新は ieee1394-473.tar.gz だった
追記(2003/6/14):現在はここから辿ればダウンロードできる
$ cp ieee1394-473.tar.gz /usr/src/linux/drivers
$ cd /usr/src/linux/drivers
$ mv ieee1394 ieee1394.org
$ tar xvfz ieee1394-473.tar.gz
$ cd /usr/src/linux
$ make modules
$ make modules_install
さらに、以下のようにモジュールを組み込んで各情報を見てみる。 SCSIデバイスが見つからない場合は rescan-scsi-bus.sh をやってみる。 (これをどこで入手したか覚えていない。。。)
$ insmod scsi_mod
$ insmod ieee1394
$ insmod ohci1394
$ insmod sbp2
$ rescan-scsi-bus.sh        ←これは必要ないかな
$ cat /proc/scsi/scsi

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: MATSHITA Model: UJDA710          Rev: 1.50
  Type:   CD-ROM                           ANSI SCSI revision: 02

$ cat /proc/scsi/sbp2/0

IEEE-1394 SBP-2 protocol driver (host: ohci1394)
SBP-2 module load options:
- Max speed supported: S400
- Max sectors per I/O supported: 255
- Max outstanding commands supported: 8
- Max outstanding commands per lun supported: 1
- Serialized I/O (debug): no

$ cat /proc/bus/ieee1394/devices

Node[00:1023]  GUID[0800460300f6a7d4]:
  Vendor ID: `Linux OHCI-1394' [0x000000]
  Capabilities: 0x0083c0
  Bus Options:
    IRMC(0) CMC(1) ISC(1) BMC(0) PMC(0) GEN(0)
    LSPD(2) MAX_REC(2048) CYC_CLK_ACC(0)
  Host Node Status:
    Host Driver     : ohci1394
    Nodes connected : 2
    Nodes active    : 2
    SelfIDs received: 2
    Irm ID          : [63:1023]
    BusMgr ID       : [63:1023]
    In Bus Reset    : no
    Root            : no
    Cycle Master    : no
    IRM             : no
    Bus Manager     : no
Node[01:1023]  GUID[0800460300dfa838]:
  Vendor ID: `Sony' [0x080046]
  Capabilities: 0x0083c0
  Bus Options:
    IRMC(0) CMC(0) ISC(0) BMC(0) PMC(0) GEN(1)
    LSPD(2) MAX_REC(2048) CYC_CLK_ACC(255)
  Unit Directory 0:
    Vendor/Model ID: Sony [080046] / i.LINK CD-RW DVD-ROM Drive [190007]
    Software Specifier ID: 00609e
    Software Version: 010483
    Driver: SBP2 Driver
    Length (in quads): 8

ここでi.Linkドライブをマウントしてみると見事!!使えるようになった。
$ mkdir /mnt/dvdrom
$ mount -t iso9660 /dev/scd0 /mnt/dvdrom
$ mount

/dev/hda7 on / type ext2 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
/dev/hda5 on /mnt/data type vfat (ro,noexec,nosuid,nodev)
/dev/scd0 on /mnt/dvdrom type iso9660 (ro,noexec,nosuid,nodev)

CD-ROM は手元にいっぱいあるが DVD-ROM は持ってないので DVD が使えるかは不明。 ただ、CD を認識してるんで大丈夫だろう。CD R/W も試してみたいが手元に無い。。。 使うのは cdrecord だろう。これって SCSI でないと駄目なようだけど i.Link では SBP2 を入れる際に SCSI モジュールを組み込んでる。 だから /etc/cdreord.conf に設定を書いておけば使えるんだろう。 これで KXL-830AN はもういらない。

ただ、cardctl eject に相当するコマンドって何だろう? POWERランプが常に点灯しているので活線挿抜が怖い。していいのかな? もちろん rmmod してモジュールは外してるが。

LILO をアップデート

デフォルトで入っている LILO はちょっと古い。 なので GRUB を使わないと決めた今、 最新(?)の LILO を入れることにする。 最終的な lilo.conf はこんな感じ。グラフィカルなブート選択画面になる。
boot=/dev/hda
map=/boot/map
install=/boot/boot-bmp.b
prompt
timeout=300
bitmap=/boot/ins64a.bmp
bmp-colors=14,11,,15,9,0
bmp-table=21,287p,2,4,175p
bmp-timer=73,29,12,8,0
lba32
default=WindowsXP

other=/dev/hda1
  optional
  label=WindowsXP

image=/boot/vmlinuz-2.4.17-custom
  label="Redhat Linux"
  read-only
  root=/dev/hda7

image=/boot/vmlinuz-2.4.7-10
  label="Redhat Default"
  read-only
  root=/dev/hda7

vim のアップデートとスクリプト

emacs に慣れずに vi を使い続けて既に X 年。 当然 Linux にも入っているのだが、デフォルト設定だと多少不便を感じる。 そこで vim から Vim-6.1 をダウンロードしてインストールする。 ここで、自前のランコマンド (.vimrc) を用意。さらに、ちょっとしたスクリプトを組んでみた。 :Jxxx で自前コマンドが実行できる。 .vimrc はホーム直下に janus.vim は HOME/.vim/janus.vim に置いて使うことにする。 vim では :help で画面分割により操作ヘルプを閲覧できる。 また、このヘルプを HTML として出力するスクリプトがあらかじめ用意されているのでイザというときのために HTML を作成しておく。
$ cd /usr/share/vim/vim61/doc
$ ./vim2html.pl tags *.txt
help.html がトップページに相当する。 また、index.html には vim の全コマンド(dd,i,:w,:q! など)の要約が書かれていてとても参考になる。
追記(2002/7/21):taskrcのURLファイルで簡単にブックマークジャンプ出来るよう Jwww コマンドを追加

Cygwin のインストールと WindowMaker

旧マシンでは Linux の代わりに Cygwin を使用していた。 バイオではデュアルブートとしているが、切り替えが面倒なときも多々ある。 そこで Cygwin をインストールすることに。 ここでは XFree86 を入れるようにした。Cygwin 上で X を動かしてみたいんで。 で、早速インストールして動かしてみるが、X が起動しない。 デフォルトでは startx にパスが通っていない模様。そこで、profile を書き換える。
$ vi /etc/profile

  1行目を書き換える
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$PATH"

$ . /etc/profile
vi は本物(?)の vim6.1 が入っている。なんだか出来過ぎていて気持ち悪い。 それはさておき WindowMaker がデフォルトで使えそうなでうれしい。 なんといっても Linux でも WindowMaker を使っているから。
$ export LANG=ja_JP.eucJP
$ wmaker.inst
$ startx
あらびっくり。WindowMaker が Windows 上で動いてる。ただキー配列が 101 になっている。 これには慣れていないので 106 に変えたい。定義の作成は Linux で行う。
Linuxで実施する
$ xmodmap -pke > Xmodmap
これを WindowMaker 起動時に読み込ませたいので ~/GNUstep/Library/WindowMaker/autostart に次の行を追記 イリーガルな方法かな?
$ vi ~/GNUstep/Library/WindowMaker/autostart

  最終行に以下を追記(パスは環境に応じる)
  xmodmap $HOME/Xmodmap
こうして X を再起動するとキー配列が 106 になった。 これで Windows 使用時に UNIX ツールが使いたなったらある程度のことは Cygwin で出来る。 Linux と Cygwin 両用の bash ランコマンドを用意しておけば使い勝手も向上する。 各環境固有の設定は .bash_HOSTNAME に記述する。
追記(2002/5/30):bashrc内のエスケープシーケンス記述が不完全だったので修正

この状態だとログイン時に .bashrc が 2 度呼ばれているようなので /etc/profile の最終行をコメントにする
$ vi /etc/profile

  行頭に # を付加して最終行をコメントにする
  # test -f ./.bashrc && . ./.bashrc

お役立ち VAIO リンク


[アクセスカウンタ]

[トップページ]