Let's Note W2にLinuxを!

Let's Note W2 (CF-W2BW1AXS)を入手しました。 これにLinuxをインストールしてみます。

Linuxの動作状況

内蔵有線LAN Intel 8139tooと自動設定
サウンド Intel i810 sndconfigでi810_audioと設定される

既知の不具合

  1. Linuxでは内蔵無線LANが使用できません。 メルコの無線LANカードは使用できました。

  2. Linux上では Fnキーを押して、音量を調節したり、 画面の明るさを調整したりできませんでした。

目次

  1. パーティションを切る

    Linuxをインストールするために、Windows領域になっているHDDを パーティションを切ってLinux領域を作成します。
    Windowsを削除しちゃう場合は関係ありません。

  2. Vine Linuxの設定

    標準的な設定や内蔵機器の設定を紹介します。

  3. あれこれやってみよう

    標準外の設定を試した結果を紹介します。



パーティションを切る

  1. バックアップを取る

    ハードディスクをいじるため、Windowsのバックアップを取っておきましょう。 W2はリカバリCDが付いていたので、特に何もソフトを入れていなかったり、 データがなければバックアップは要らないかも知れません。

  2. KNOPPIX 3.3日本語版で起動

    1 CD Linuxで知られるKNOPPIX 3.3日本語版を使ってみます。 HDDにインストールせずに使えるので便利ですね。

    1. CDを入れて起動します。
    2. rootユーザで、qtpartedコマンドを起動します。
      KNOPPIX -> root shellでroot権限のターミナルを開き、 手でqtpartedを起動します。
    3. GUIなので、フィーリングで操作できますね。 ここでは、既存のWindows領域を小さくし、約19GBにします。 つまり、Linux領域も約19GBになります。
    4. 分けたら再起動します。
    5. 一応、Windowsを起動してみます。すると、CHKDSKが働き、ディス クのインデックス情報の更新が行われました。 特に、壊れた様子はありません。

Vine Linuxの設定

Vine Linux 2.6r3をインストールします。 さらに細かくパーティションを分割します。 Disk Druidで以下のようになりました。

hda1 19GB Windows領域7
hda2 19GB 拡張領域f
hda5 128MB /boot 83
hda6 9.5GB /home83
hda7 5GB /83
hda8 4GB /usr/local83
hda9 512MB SWAP82

インストール時は、グラフィックインストールできました。 Xの設定は今回はスキップしましたが、1024x768 16bppならできるかも知れません。 LILOはMBRにインストールします。

再起動すると、WindowsもLinuxも起動できました。

LANの設定

システムをアップグレードするにしてもLANが使えないと話になりません。 そこで、まずはじめにLANを設定します。kudzuで自動認識しました。 /etc/modules.conf は以下のようのなりました。

ネットワークが接続できたら、aptでアップグレードしておきます。

# apt-get update
# apt-get dist-upgrade
# apt-get install kernel#2.4.22-0vl2.10 kernel-headers kernel-source kernel-doc

/etc/lilo.confに新しいカーネルの設定を加え、liloを実行し再起動します。

image=/boot/vmlinuz-2.4.22-0vl2.10
        label=linux.new
        read-only
        root=/dev/hda7

other=/dev/hda1
        optional
        label=WinXP

サウンドの設定

sndconfigを使ってサウンドの設定がすぐにできました。i810_audioドライバ が使用されます。

ビデオの設定

Xconfiguratorで1024x768 16bppを選択したら設定できました。

外部モニタに表示するときは、Fnキーは使えません。 i810switch を/usr/local/binにインストールして、コマンドラインで切替えます。 /usr/local/bin/ext_monitor.sh と言うシェルスクリプトを作成して、外部モニタを制御することにしました。

$ ext_monitor.sh on
$ ext_monitor.sh off

内蔵無線LAN

NdisWrapper でなんとか動かしてみようと思います。 まず、カーネルを2.4.23以上にしないといけません。VineSeedから2.4.24の src.rpmを持ってきて、リビルドしてインストールします。

Windows側から、\WINDOWS\inf\oem27.inf と \WINDOWS\system32\drivers\w70n51.sysをコピーして置いてきます。 oem27.infの方は隠しフォルダにあり、また27と言う数字は製品の時期によって 変わりそうです。ファイルを開いて、それらしいものを見つけます。

または、Supported Chipsets からドライバをダウンロードして使用します。

NdisWrapper 0.4の場合

# tar zxvf ndiswrapper-0.4.tar.gz
# cd ndiswrapper
# ./install.sh
Give the full path to .inf file of windows driver? oem27.inf
Give the full path to .sys file of the windows driver? (oem27.sys) w70n51.sys
Executing make install to build the module and loadndisdriver.
make -C driver install
...
make[1]: 出ます ディレクトリ `/root/src/ndiswrapper/utils'
Which directory should the loadndisdriver be installed in? (/usr/sbin) /usr/local/sbin
What interface name should ndiswrapper configure? (wlan0) 
Where should module directives be placed? (/etc/modules.conf) 

NdisWrapper 0.5の場合

# tar zxvf ndiswrapper-0.5.tar.gz
# cd ndiswrapper
# make install
# ndiswrapper -i w70n51.inf (パスはドライバの置いてあるところに変更する)
# ndiswrapper -l            (確認)
Installed ndis drivers:
w70n51  present,fuzzy
# modprove ndiswrapper      (ドライバの読み込み)

ここで、/var/log/messageにエラーが出ず、次のようにMACアドレスが表示され れば問題ありません。

wlan0: ndiswrapper ethernet device xx:xx:xx:xx:xx:xx using driver w70n51.sys

エラーが出ていなければ、次のようにすれば/etc/modules.confに設定が加え られます。

# ndiswrapper -m

ネットワークに関する設定

設定ができたら、/etc/sysconfig/network-scripts/ifcfg-wlan0 にネットワー クに関する設定をします。 <ESSID>にはアクセスポイント(AP)に設定したESSIDを書きます。

DEVICE=wlan0
ONBOOT=no
BOOTPROTO=dhcp
USERCTL=yes
ESSID=<ESSID>

次のようにしてネットワークインターフェイスwlan0を有効にします。

# ifup wlan0

現状では、AP経由でDHCPでIPアドレスが振られるところまでできました。 しかし、その後の通信ができていません。

ドライバがリリースされたようです。 詳細はhttp://ipw2100.sf.net/より。


あれこれやってみよう

無線LAN

内蔵の無線LANが使えないので、メルコ(BUFFALO)の無線LANカードを使えるようにしました。 カード自体はすぐに認識されたのですが、IRQがうまく取れないらしく、 失敗してしまいました。

基本設定

有線も無線もDHCPでIPアドレスを取得するとします。起動時は有線LANが eth0として設定されます。無線LANはeth1としますが、起動時はoffにします。

/etc/pcmcia/config.optsを次のように修正します。

#exclude irq 4   ※ この行をコメントアウトする
service pcmcia restratで設定を有効にできます。

無線LANカード使用時

無線LANカードをスロットに差したときには、有線LANのeth0をdownにし、 無線LANのeth1をupにします。また、ルーティングも変更します。 これらの設定は /etc/pcmcia/network に記述します(以下は抜粋)。

#! /bin/sh
action=$1
device=$2
case "${action:?}" in
'start')
    ### ここから設定を追加
    if [ -f /etc/sysconfig/network-scripts/ifcfg-${device} ]; then
        active=`/sbin/ifconfig  | grep eth0`
        if [ ${#active} -gt 0 ]; then 
            /sbin/ifconfig eth0 down                        # eth0を使用中ならば停止
        fi
        /etc/sysconfig/network-scripts/ifup ifcfg-${device} # eth1の起動
        #/sbin/route add default gw 192.168.1.1             # ルーティング変更
    fi
    ### ここまで
    ;;
'stop')
    #
    [ -f /etc/sysconfig/network-scripts/ifcfg-${device} ] && \
      /etc/sysconfig/network-scripts/ifdown ifcfg-${device}
      ### ここから設定を追加
      /sbin/service network restart                         # eth0を再起動
      ### ここまで
    ;;
'restart')
    /sbin/ifconfig ${device:?} down up
    ;;
esac

cpufreqを使った省エネ(?)

/proc/cpufreq で現在の動作周波数を変更できます。

$ cat /proc/cpufreq 
          minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0       124689 kHz ( 12 %)  -     997517 kHz (100 %)  -  performance

/usr/local/sbin/cpufreqと言うシェルスクリプトを用意すれば、 powersaveとperformanceで動作周波数を変えることができます。 powersaveを選択すると、12%に落とすことができます。/proc/cpuinfo で確認すると、124.602 MHz になっています。 performanceを選択すると、100%まで使用します。

# /usr/local/sbin/cpufreq powersave
[root@nerve kawamura]# /usr/local/sbin/cpufreq status
          minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0       124689 kHz ( 12 %)  -     500000 kHz ( 50 %)  -  powersave
# /usr/local/sbin/cpufreq performance
# /usr/local/sbin/cpufreq status
          minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0       124689 kHz ( 12 %)  -     997517 kHz (100 %)  -  performance

ACPIを利用した設定

電源ボタンで停止

acpiが利用できるので、「電源ボタンで停止(halt -p)」を実行するようにしてみました。 acpidというパッケージがあるので、これをダウンロードします。 設定は /etc/acpi/events/の下にイベントに対応した設定を書いたファイルを用意すればよいです。

電源ボタンを押した際に halt -p を実行するには、例えば /etc/acpi/events/power_off と言うファイルに以下のように書きます。

event=button/power *
action=/sbin/halt -p

event=行は/var/log/acpid に表示される内容をみながら決めます。 action=行は実行するコマンドか、スクリプトのファイル名を指定します。

ふたを閉じたときに省エネモード

cpufreqとacpidを組み合わせると、ふたを閉じた際にpowersaveにすることができます。 また、ふたを開けた際にperformanceに戻すこともできます。 /etc/acpi/actions/lid_down.shと言うシェルスクリプを用意し、 /etc/acpi/events/lid_down に以下のように記述します。

event=button/lid 
action=/etc/acpi/actions/lid_down.sh %e

ふたの開け閉めの判定はbutton/lidが呼ばれた回数が偶数か奇数かで判定しています。 何かの拍子にずれた場合、誤動作するかも知れません。

同様に、ACアダプタが接続されているかどうかで、切り替えることもできます。 /var/log/acpidのイベントの第4引数が 00000000 ならばACアダプタ無しで、 00000001ならばACアダプタ有りと言うことがわかります。

/etc/acpi/actions/ac_adapter.shを用意し、 /etc/acpi/events/ac_adapter に以下のように書きます。

event=ac_adapter
action=/etc/acpi/actions/ac_adapter.sh %e

注! ふたの開閉とACアダプタは互いに連動していません。 従って、ふたを閉めてからACアダプタを刺すと、performanceになります。 イベント駆動式ですから、最後に発生したイベントに依存します。

ソフトウェア・サスペンド(hibernation)

Vine Linux 2.6r3より、ソフトウェア・サスペンドが可能になりました。 hibernationと言うコマンドを実行すると、現在の状態をスワップ領域に 保存して、停止します。次に、電源を入れると、保存してあった元の状態に 戻ってくれます。acpiで「ふた閉じ」を検知して、サスペンドさせてもよいかも 知れません。

ただし、サスペンドに失敗したり、復帰した際に一部のドライバモジュールが 戻らないこともあるようです。使用に際しては、何度かテストを繰り返した方が よいでしょう。復帰の際に、サービスを再起動させることもできるので、設定を ちゃんとすれば使えるはず。

設定

Vine Linux 2.6r3をそのまま使うと、ソフトウェア・サスペンドは無効になって います。以下の設定を行います。
  1. カーネルオプションを設定する (/etc/lilo.conf)

    スワップ・パーティションをデータの保存領域にするので、 カーネルオプションを追加します。/etc/lilo.confに以下のように記述し ます。

    image=/boot/vmlinuz-2.4.22-0vl2.8
            label=linux
            initrd=/boot/initrd-2.4.22-0vl2.8.img
            read-only
            append="resume=/dev/hda8"
            root=/dev/hda6
    

    この設定で、ソフトウェア・サスペンドが有効になります。

  2. ソフトウェア・サスペンド用のソフトウェアをインストールする

    ソフトウェアは http://sourceforge.net/projects/swsusp からダウンロードします。suspend-script を選択してください。ここから、 suspend.shをダウンロードします。

    rootユーザで、suspend.shを実行すると、 /usr/local/sbin/hibernate と言うコマンドがインストールされます。

  3. /etc/suspend.confを確認

    設定ファイルは /etc/suspend.conf です。 特に設定を変更しなくても、使えると思いますが、モジュールが復帰しな い場合などは、このファイルをいじればよいはずです。

サスペンドさせてみる

rootユーザで、/usr/local/sbin/hibernate を実行すると、モジュールの削 除やサービスの停止などを行い、現状を保存します。そして、停止しました。

注!: 再起動するときは、同じカーネルで起動しないと、 壊れるとどこかに載っていましたので、間違っても違うカーネルで起動しないよ うに。私は実験したくはありません。

電源を入れると、一応復帰しました。しかし、USBのモジュールが戻っていなかっ たので、手動で murasakiを再起動しました。これは/etc/suspend.conf をうま く書けば、自動化できるかも。

注!: はじめてサスペンドさせたとき、"-"がいっぱいでて 停止しないことがありました。2回目からはうまく行っています。まだ、失敗す る場合があるようです。


kawamura@ic.sci.yamaguchi-u.ac.jp
Last modified: Fri Sep 11 11:10:16 JST 2009