DELL Latitude X1

最新更新日 2006.06.16.
更新項目  FreeBSD 6.1-STABLE において suspend/resume するようになりました。

Hello. It's the text of a little English;-).

I have DELL Latitude X1. Now 6.1-STABLE is tried. suspend came to operate. resume also came to operate. It is operating satisfactory.

Those who want to carry out a check of operation by themselves Please refer to my loader.conf and sysctl.conf and do your best.

  以降、日本語です;-)。

  新しく DELL Latitude X1 を購入しました。本当はドスパラで発売している AMD64 な NotePC にしようと思っていたのですが、デスクトップ機で Sempron2800+ な CPU で FreeBSD/amd64 を起動させてみるとデスクトップ機としては結構動作しないプログラムがあったので諦めました。

  FreeBSD/amd64 で動作しないアプリとしてはウェブブラウザのプラグイン系、 OpenOffice.org(Java) 、 mplayer(Codec がインストールできない)などがあり、結局 FreeBSD/i386 で動作させるなら素直に PentiumM な PC を買ってしまえ。と言うことになったのでした・・。

  で、DELL の一番小さなヤツですが、法人向けの PC です。会社へのダイレクトメールで「日経ビジネスをお読みの方には特別ディスカウント。」と言うのが届いたので電話して「個人でもこの価格で売ってくれますか?」と聞いたら OK が出たので手に入れました。

  この下に書かれているスペックで、送料込 150,000yen 強で最新の PentiumM NotePC が入ったので激安かな;-)。では本題。

僕の入手した DELL Latitude X1 の主要なスペック

  以下のような感じでしょうか。Bluetooth は使ったことないので嬉しいですねぇ。

OS : WindowsXP Home Edition SP2
CPU : Intel PentiumM 733 1.10GHz (FSB 400MHz)
Memory : DDR2 SDRAM 512MByte
HDD : TOSHIBA MK6006GAH BZ002A 60GB (1.8inch)
Graphics : i82915GMS Mobile Express (1280x768pix)
NIC : BCM5750A1 NetXtreme GbE (10/100/1000Mbps)
Wireless : Intel PRO/Wireless 2200BG (x802.11b/g)
PCMCIA : FC Slot x1 / SD Slot x1
MediaBay : PHILIPS CDRW/DVD SCB5265 TD15 (CD-RW/DVD-ROM:D-USB 接続)
Bluetooth : DELL bluetooth (内蔵で USB 接続)
FireWire : mini Jack 4pin x1
Modem : Intel 97 Modem Controller
USB 2.0 : x2
TPM : トラステッド・プラットフォーム・モジュール

FreeBSD 7-CURRENT のインストールについて

  インストールには付属の CD-ROM(CD-RW/DVD でちょっと贅沢;-) で行います。DELL 専用の電源供給コネクタ付きの USB 接続です。BIOS 画面で CD-ROM ブートを 1 にして 6.0-RELEASE の CD-ROM でブートすればインストールはあっと言う間に終わるでしょう;-)。

インストール直後に cvsup して make world して portupgrade すれば 7-CURRENT で動作します。

7-CURRENT をインストールして動作しているデバイス

・NIC は bge0 がオンボードなのでインストール時にも利用可能。
・ICH6 内蔵サウンド AC'97 はちゃんと音が出力される。
・Bluetooth は ubt0 で一応認識はしたみたいだ。
・SpeedStep ええやん;-)。

7-CURRENT インストール直後での問題点

・S3 サスペンドは動作しない。
・SD カードスロットはドライバが無いので動作しない。
・i915MGS の X は一応 i810 で動作しているがちょっと苦労(xorg-6.8.2)。
・Wireless NIC(iwi0) は技が必要。
・内臓モデムは動作させようとする努力もしてない(^^;;。
・TPM は動作しない(何それ?(^^;;)。
6-STABLET インストールしました(2006/04/20)

  以上、7-CURRENT ネタでしたが、なんか、ブート時に iwi 辺りで刺さるので 7-CURRENT の利用は中止しました;-)。今は 6.1-STABLE を利用しています。
Fn キーを押したときに動作するもの

・画面の明るさ変更はバリバリ動作する。
・ボリューム調整、スピーカ ON/OFF は動作しない。
・Fn+F2 で iwi0 がオフにできる。ただし同時に ubt0 もオフになる。再度押せば ON になる。

X を動作させよう

  i915GMS は 2005/12 中ごろの 7-CURRENT で対応されました。また、6-STABLE でも対応しました。これにより以下に書かれているパッチは、最新の 7-CURRENT、6-STABLE を使っている人は適用する必要は無くなりました。

  以前、本家の FreeBSD の ML で動作するためのパッチが公開されたのでそのパッチを agp.ko に対して適用する必要があります。
  詳細については以下の URL を参照してください。

http://lists.freebsd.org/pipermail/freebsd-bugs/2005-May/012787.html
http://www.freebsd.org/cgi/query-pr.cgi?pr=80396

  ここを参照して、agp-i915.diffagp-i915_new.diff というパッチ(僕の使ったヤツをおすそ分け;-)を適用します。その後、agp.ko をインストールします。カーネルコンフィグでは agp.ko を外して /boot/loader.conf でカーネルモジュールをロードするように設定します。

# cd /usr/src/sys/pci
# cat ~/agp-i915.diff | patch
# cat ~/agp-i915_mew.diff | patch
# cd /home/cvsup/src/sys/modules/agp
# make;make install

  しかし、これだけでは動作しないので、xorg の X サーバを SNAP 版にする必要があります。その時、標準でインストールされる xorg-server-6.8.2 は削除する必要があります。

  後、none0@pci0:2:1: に 82915GM/GMS,82910GML Mobile Express Family Graphics Controller というものがありますが、これは FreeBSD からは使えません。しかし、この機能をある程度実装するものとして、 /usr/ports/sysutils/915resolution があります。

  X を起動する前にサイズを指定してあげるとその通りに動きます。また、 915resolution -l で表示可能なサイズが確認できます。使い方としては以下のようになります。

/usr/local/bin/915resolution 58 1280 768

X を動作させよう・そのに

  実は X を起動させるのはもっと簡単だったりしました(^^;;。 agp.ko ではなく、acpi_video.ko を kldload すれば良いだけでした。こっちのほうが簡単かな。

  後、実はもう一個問題があって、ディスプレーを閉じるとスリープしてしまう場合があります。 hw.acpi.lid_switch_state=NONE してもスリープしてしまう場合は、WindowsXP から Quickset でディスプレーを閉じたときのイベントは何もしないに設定してみてください。

  ディスプレーを閉じるとディスプレーのバックライトが消えるだけで、再度開けば復活します。agp.ko を使っているとバックライトは消えたままの状態となります。 acpi_video.ko を使うと、ディスプレーを閉じる->開けるでバックライトが点きますが、二回目に閉じて開けるとバックライトが点かない状態となってしまいます。チャンスは一回だけです・・。しくしく。

X を動作させよう・そのさん

  二回目にディスプレーを閉じて開けるとバックライトが点灯しない問題点ですが、解決しました。ACPI 周りですね。以下のコマンドを叩いて上げると復活します。

sysctl -w hw.acpi.video.out0.active=1

  で、その方法については devd 経由で処理してあげると良いです。以下の URL のスレッドでその詳細が載っています。

http://lists.freebsd.org/pipermail/freebsd-acpi/2006-March/002626.html

  devd がディスプレーの開け閉めイベントを拾ってくれるのでそのたんびに sysctl -w する。ってことですね。

・/etc/devd.conf の最後に以下の行を追加
# lid open/close events
notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "Lid";
        action                  "/etc/rc.lid $notify";
};

・/etc/rc.lid を新規に用意(chmod 755 を忘れずに;-)
#!/bin/sh
# deal with lid switch events

if [ x$1 = x0x00 ]; then
        logger -t Lid Closed at `date`
        sysctl hw.acpi.video.out0.active=0
else
        logger -t Lid Opened at `date`
        sysctl hw.acpi.video.out0.active=1
fi

無線 LAN カードを利用する

  2005/12 中ごろの 7-CURRENT では ports からファームウェアをインストールする必要が無くなりました。ファームウェアを /boot/firmware/ に入れればドライバが勝手にロードしてくれるようになりました。

  Intel PRO/Wireless 2200BG は iwi0 で動作します。使う前に iwicontrol(8) でいろいろおまじないが必要です。iwicontrol は /usr/ports/net/iwi-firmware をインストールします。カーネルモジュールは if_iwi.ko をロードしておきます。

  尚、iwi-firmware をインストールすると、/usr/local/etc/rc.d/iwi.sh がインストールされますが、ファームウェアのロードしかしてくれないので、僕はスクリプトを書いてしまいました。

      iwistart.sh.sample

  これで通信はできると思うので、もし通信できない場合は、基地局に Mac アドレス認証が入ってないか確認してみましょう(自分が踏んだ地雷;-)。

  後、iwicontrol -i iwi0 -r を実行した時に Radio is OFF と表示される場合は、 Fn+F2 で無線 LAN カードを有効(パワーオンっ!!)にして上げましょう。

無線 LAN カードを利用する・そのに

  2006/03 中頃の 7-CURRENT では iwi ドライバで対応するファームウェアのバージョンが 2.4 から 3.0 にアップしました。それにより firmware.ko を kldload するとともに必要があります。すると自動的に iwi_bss.ko がロードされることになりました(iwi_bss.ko は loader.conf に YES と書いては行けません)。

  この事を知らないでいると以下のメッセージを出力し利用できない状態になります。

lassie kernel: firmware_get: failed to load firmware image iwi_bss
lassie kernel: iwi0: could not load firmware image 'iwi_bss'

  しかし、iwi_bss.ko はデフォルトでは入ってないので拾ってくる必要があります。まずは以下の URL を参考にしてインストールしてみてください。

http://lists.freebsd.org/mailman/htdig/freebsd-current/2006-March/061640.html

  このメールに掲載されたインストール手順により iwi0 が利用可能となります。以下、自分のために書いておきます。

チェックされた iwi コードはファームウェアバージョン 3.0 を必要とします。私の quick hack(TM) を使用するか、あるいは iwi-firmware の公式最新版を待ちましょう。(以上、原文の訳)
・ファームウェアのダウンロード
ipw2200-fw-3.0.tgz は以下の URL にあります。ライセンスに同意しましょう。

http://ipw2200.sourceforge.net/firmware.php?fid=7

・iwi_bss.ko の生成とインストール
# mkdir /sys/modules/iwi_bss
# cd /sys/modules/iwi_bss
# cat > Makefile <<EOF
KMOD=   iwi_bss
FIRMWS= ipw2200-bss.fw:iwi_bss:300

.include <bsd.kmod.mk>
EOF
# tar xvf ipw2200-fw-3.0.tgz
# ln ipw2200-fw-3.0/ipw2200-bss.fw .
# make all install

  後は、/boot/loader.conf に書くようにすれば良いでしょう。

無線 LAN カードを利用する・そのさん

  if_iwi.ko はどうも動作が怪しいので if_iwiNG.ko を使うと安定するでしょう。ファームウェアは Version.2.4 を利用することになります。以下の URL から iwiNG カーネルモジュールを持ってきてインストールすれば良いでしょう。

http://people.freebsd.org/~mlaier/new_iwi/

Bluetooth を利用する

  起動直後、dmesg を見ると何かが ugen0 になっています・・。これがどうやら Bluetooth みたいですが・・。どないすればええねん?って感じですが、簡単です。カーネルロードモジュールをロードしてあげると認識します;-)。/eboot/loader.conf に以下のように追加すれば OK です。

netgraph_load="YES"
ng_bluetooth_load="YES"
ng_ubt_load="YES"
ng_hci_load="YES"
ng_l2cap_load="YES"
ng_btsocket_load="YES"
ng_socket_load="YES"

  ただ、僕は Bluetooth の機器は持ってないので本当に ubt0 で認識した Bluetooth が正しく動作するのかは解らないし、使い方も良く知らないんです(^^;;。今後の勉強課題ということで;-)。

SpeedStep を利用する

  まぁ、PentiumM なので消費電力は押さえて利用したいな。と言うのが人の心でして。 sysctl の CPU 速度系の ACPI の mib は dev.cpu.0.freq、dev.cpu.0.freq_levels 辺りです。 loader.conf に cpufreq_load="YES" と記述します。これで SpeedStep が Ready になります。

  僕は最近 AMD の CPU しか使ったことが無いので良く知らない (AthlonXP で使える事さえしらなかった(!_!) のですが、Intel の CPU は仕事量に応じて CPU 速度を動的に変更できるらしいので、それを有効にするのは /usr/sbin/powerd です。/etc/rc.conf に powerd_enable=YES とすれば良いでしょう。

  実際に速度可変で動作しているかは GNOME アプレットであったり、 /usr/ports/sysutils/gkfreq で確認できます;-)。

外部ディスプレーに表示する

  Fn+CRT/LCD ボタンは動作しませんネ。ACPI でキーボードイベント拾ってくれないみたいです。なので手動で変えましょう。以下の MIB を sysctl -w で 1 に変更して上げればよいです。crt0 は外部ディスプレー、out0 は液晶ディスプレーです。out1 は無いので 1 にすると 真っ暗になります;-)

hw.acpi.video.crt0.active: 0
hw.acpi.video.out0.active: 1
hw.acpi.video.out1.active: 0

  後、X1 は BIOS の video 設定の所で LCD Panel Expansion と言うのがあってこれをオンにしておくと画面サイズが無条件で 1280x768 になってしまいます。915resolution の意味がなくなってしまうんですね。コンソールはちっこく(640x480)なりますが X や WindowsXP には支障はでないので思い切ってオフにしてしまいましょう。

  その後、xorg.conf の値を 1024x768 にした後、915resolution 45 1024 768 16 などと打った後に X を起動すると 1024x768 で X が起動するようになります。これで外部出力できると思います。

  尚、外部ディスプレーと液晶の両方に表示させる時は crt0 と out0 を 1 -> 0、0 -> 1 とか数回いろいろなパターンで試してみてください。その内両方に表示されるようになると思います。けど、なんか外部ディスプレーへの表示はサイズが変です・・。とほほ。

S3 suspend/resume について

  カーネルに device apic を組み込んで、以下の設定を /boot/loader.conf に書くとサスペンド/レジュームしてくれる NotePC があるみたいなのでためしにやってみた。

hint.apic.0.disabled="1"

  はっきり言って、suspend と resume が動作しました。しっかり寝て、しっかり起きます。resume 後は X の表示もちゃんと戻って来て、それはまるで Windows のように動作します;-)。

  以下の点に注意してみなさんも頑張ってみてください。

1. loader.conf、sysctl.conf、Kernel Config は下のを参考にしてください。特に sysctl.conf は重要です。
2. BIOS 画面で Video の設定 LCD Panel Expansions を OFF にして /usr/ports/sysutils/915resolution を利用してください。
3. if_bge.ko は resume 後に暴走するので /etc/rc.suspend で kldunload if_bge.ko;sleep 2 と記述してください。また、resume 後は bge0 は利用できません。iwi0 は問題ないです。
4. 最近の X はビデオカードを初期化してくれるみたいですが kdm を利用している時はこの初期化処理がいまいち正しく動作しないようなので xdm を利用するようにしてください。gdm は試していません。また、kdm との因果関係もいまいち解かっていません・・。

  大体こんな感じでしょうか。Fn+Esc で S3 suspend してくれます。acpiconf -s3 でも suspend してくれます。その後ディスプレーを閉じて、ディスプレーを開けると resume します。

  Fn+Esc で S3 suspend する時「ピピピッ・ヒューン。」と音がします。最初の「ピピピ」はビープ音です。最後の「ヒューン」は HDD が停止する音です(聞いていてなかなか気持ちが良いです;-)。その後、パワー LED はゆっくりと点滅します(iBook のように;-)。この時、Bluetooth の青い LED は消えています。

  resume 後、ディスプレーが暗いままの場合はバックライトに電源が供給されていない状態です。ディスプレーの明るさを変更するボタン(Fn+「↑」or「↓」)を押してみてください。バックライトに電源供給が再開されます。
  それでも戻ってこない場合は sysctl hw.acpi.video.out0.active=1 してあげる必要があります。僕は KDE を使っているので F12 キーで sysctl hw.acpi.video.out0.active=1 を実行するスクリプトが動作するように設定しています。あ、当然 sudo してからの実行ですけど;-)。

  後、redume 後の if_bge.ko の動作ですが、以下のメッセージを連発し、カーネルがループ状態に陥ります。ロードアベレージは 10 を越えることでしょう。一瞬、あれ? resume から復活しないのかな?と勘違いするほどですX-(。
  なので、suspend 前に kldunload しておく必要があります。また、resume 後は kldload if_bge.ko しても使えるようになることはありません。bge0 はきっぱりとあきらめましょう。

kernel: bge0: PHY read timed out
kernel: bge0: PHY write timed out

  ちなみに、write のメッセージは出ないかもしれません。僕は if_bge.c を直して使っているので write のメッセージが出ています;-P。

  また、resume 後にシステムタイムと CPU 速度が固定してしまいます。そのおかげで、gkrellm が CPU の負荷をグラフ表示できなくなってしまいます。これは痛い・・。多分、ACPI にリセットが入らないのでしょうねぇ・・。
  この対処方ですが、まず、ps(1) で ntpd が起動しているか確認します。多分、お亡くなりになっているかと思います。で、/etc/rc.d/ntpdate start と打ってみてください。一瞬画面は暗くなります。そして、次の瞬間、時間は正常な値を示すようになり、CPU は powerd が有効になることでしょう\(^^)/。ntpdate(8) によって ACPI がリセットされたような形でしょうかねぇ。まぁ、めでたしめでたし。

お待ちかね。動作させるために必要と思われる情報

ちなみに僕はカーネルモジュール化が大好きな人です;-)。

acpidump の ASL

dmesg (7-CURRENT)
dmesg (6.1-STABLE 2006/06/16)

pciconf -lv (agp.ko 版)

pciconf -lv (acpi_video.ko 版 7-CURRENT)
pciconf -lv (acpi_video.ko 版 6.1-STABLE 2006/06/08)

Kernel Config (7-CURRENT)
Kernel Config (6.1-STABLE 2006/06/16)

loader.conf (6.1-STABLE 2006/06/16 更新)
sysctl.conf (6.1-STABLE 2006/06/16 更新)

xorg.conf (xorg-6.8.2(Serverのみxorg-server-6.8.99.12_2))
xorg.conf-6.9.0 (xorg-6.9.0)

で、現状は・・。

・S3 サスペンド (suspend/resume) が動作します。
・ディスプレーを閉じて開けるとバックライトが毎回点くようになった;-)。
・Fn キーによるボリューム調整ができないので X のアプリで調整している。
・Fn+F2 で iwi0 と ubt0 の ON/OFF ができる。
・タッチバッドは 3 ボタンマウス ではないので ports の kb2mb2 を利用している。
  起動方法は "/usr/X11R6/bin/kb2mb2 -c 129 &" こんな感じ。
・後、なんかあったかなぁ・・(^^;;。それなりに動作しているので満足している。

  前回 NotePC を買った時は iBookG4 を買ってしまったので、今回は久々の i386 な NotePC です。X1 は大きさも手ごろで重さも気にならないので非常に嬉しいです。安売りしていたのが購入の大きな切っ掛けになりました。

  それにしてももうバリバリ、サスペンド/レジュームしてくれるのですごく嬉しいです。ふふふ。

  まぁ、iBookG4 の重さと、DELL X200 の遅さに耐えられなくなってきたので今後はこれをメインに使っていきたいと思います。


Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.