2009/12/18(金)VAIO P購入

11月下旬に注文したVAIO Pが12月上旬に届きました。


VAIO Pは今年1月の発売時(当時はVAIO type P)から気になってはいました。ただ当時はもう少しパワーのあるCPUを搭載したノートPCが必要だったのと、チップセットUS15Wの内蔵ビデオGMA500がUbuntuで動作するかあやしい状態だったので、ThinkPad X200sを購入しました。

その後、5月にはブラウンキーボードが選択できるようになり、9月のシルバーウィークのときは大幅な値引きがされました。10月にWindows7モデル発表とともに、ボディカラーにカーボナイトブラックが追加され、その実機をヨドバシakibaで触れるにいたって、次のキャンペーンで購入することを考えました。そして11月下旬になると、CPU、WWAN、SSDのトリプルキャンペーン到来。そろそろ発売から1年経つので、モデルチェンジがあるかも、と言われていますがとうとうポチッてしまいました。

購入した構成は、Z550、カーボナイトブラック、128GBSSD、USキーボード(茶)、その他フルオプションで、12万弱でした。価格の安さが売りのatomPCとしてはかなり高いのですが、少しずつオプションを付け加えていくうちにこの価格まで上がってしまいました。DELLやHPの直販も同様なのですが、ついついオプションを追加してしまうシステムは気をつけないとやばいです。

SSDが128GBなので、半分に分けてUbuntu9.10をインストールする予定です。Windows7はおそらくほとんど使わないと思うのですが、BIOSなどのアップデートで必要になる場合があるので残しておきます。自分の使い方だと64GBで間に合う可能性が高いのですが、直販は3年保証で分解交換はしない、という前提で128GBのSSDにしました。


ということで、写真なしのインプレッションです。

VAIO Pを箱から出して手に持った瞬間から高級感でまくりです。普段からいろいろなPCに触れる機会が多いので、PCに対して特別に感じることは少ないのですが、以前AppleのMacBookを手にしたときと同じような感じがしました。

Windows7を起動すると、メーカー製PCの宿命かと思いますがなかなか重いので、とりあえずマカフィーを削除します。これだけでもだいぶ軽くなりますが、あとはいらないソフトを適当に削除していきます。

Windows7における一番の懸案事項は、WWANでwillcom core 3Gが使えるかどうか、ということだったのですが、mbookのときと同じようにダイアルアップ接続で問題なく使用できました。ちなみに付属のDoCoMo接続マネージャを起動すると、APNの1~5まで書き換えられてしまうので注意が必要です。接続マネージャでも設定次第でwillcom core 3Gが使えるみたいなのですが、ちょっと使った限りではわからなかったのですぐあきらめて、削除してしまいました。

次回はパーティションを切ってUbuntu9.10をインストールしていきたいと思います。

2009/12/04(金)DSiLLのケース

任天堂のDSiLLが先月下旬に発売されました。


DSiLL自体にはあまり興味がなかったりするのですが、仕様を見てみると、
本体サイズ:横161.0mm×縦 91.4mm×厚さ 21.2mm
ちなみにmbookのサイズ(工人舎PM)は、
約158mm (W) x 約94.2mm (D) x 約13.5~22mm (H) (突起部含まず)

縦横3mmしか違いませんのでDSiLLのケースがmbook用として使えそうです。ちなみに現在は電子辞書のケースを使っているのですが、ちょっと縦方向があまりすぎなので、もう少しピッタリなのを探していたところでした。DSiLL用なら値段も手頃だろうしかなり期待して検索してみました。しかし、、、


本体が発売してからしばらくしないとケースは出てこないようです。


いくつかは、先週末に発売されたみたいなのですが、週明けにヨドバシakibaに買いに行くとすでに全部売り切れ。amazonの方も売り切れて予約入荷待ちになっていました。先月末まで購入金額に関わらず送料無料キャンペーンをやっていたので、amazonに予約を入れて放置しておくことにしました。忘れた頃に届くとことでしょう。

ケースとはまったく関係ないですが、DSと言えば、nblogの中の人は最近はラブプ(ryしかやっていません。




2009/11/17(火)mbookでWLAN-BT StatusをON

前回のサスペンドの検証をしていたときの副産物というかTIPSです。


mbookの欠点として、無線LAN&bluetoothの状態が保持されない(電源を入れるたびにWLAN-BTボタンを押さなければならない)というのがあります。ちなみにmbookの日本語版であるPMシリーズにはBIOSでWLAN-BT Statusと項目があり、ONにしておくと起動時に無線LAN&bluetoothが使えるようになっています。
参考サイト
懲りないねっと[はかせのBlog.jp] - 工人舎 PM1WX16SA(2)

BIOSアップデートで対応されればいいのですが、今のところUMIDからBIOSが提供される気配はありません。そこで、ちょっとあやしい方法なのですが、試行錯誤の結果、mbookでも同様の設定ができることを確認しました。その方法は、、、

電源がONになってる状態で、電源ボタン長押し


BIOS設定時などは電源ボタンを押すとすぐに電源が切れてしまうので、このTIPSは使えません。またOSが起動してる状態で電源OFFを行うと、最悪起動しなくなる可能性があります。そこでおすすめの方法はUSBでLive版のOSを起動する方法です。

Ubuntu9.10はmicroSDを挿した状態でサスペンド、または無線のファームウェアを入れた状態で接続すると、ほぼ間違いなくフリーズします。これを利用して、mbookをフリーズさせ、その時に電源ボタンを長押しすることでWLAN-BT StatusをONにすることができます。ちなみに解除の方法は、確認した限りでは、ACをはずした状態でバッテリーをはずす、ことです。これで初期のWLAN-BT Status OFFの状態に戻ります。

なんというか、胡散くさいTIPSなのですが、結構な回数を試したので間違いないと思われます。nblogの中の人は無線LAN環境でmbookを使用することが多いので、このTIPSでWLAN-BT StatusをONにしてします。



以上の作業によりmbook(またはOS)が壊れてもnblogの中の人は責任を取れませんので、自己責任でお願いします。

2009/11/13(金)Ubuntu9.10なmbookでサスペンド

たまにmbookとUbuntuをキーワードに検索してるのですが、サスペンド関係の話が目についたので、自分も少しかじってみたメモです。


初期の状態でサスペンドを行うとmbookはフリーズして失敗し、BIOSでSDIO Controllerをdisabledにするとサスペンドが成功することから、USB周りがあやしいと思っていました。無線LANのフリーズの時は苦労したので、今回もきついかな、と思いつつ検索してみるとなんてことはなく、SDカードをマウントしたままサスペンドするとフリーズしてしまうのは割と有名なbugでした。

解決方法は簡単で、サスペンド前にSDカードをアンマウントするだけです。もっともアンマウントし忘れると大変なので、サスペンドをしたら自動でアンマウントするようにします。

サスペンドに入る前

サスペンドは /usr/sbin/pm-suspend というコマンドで実行されるのですが、このファイルはスクリプトになっているので、編集してSDカードをアンマウントするようにします。
$ sudo vi /usr/sbin/pm-suspend
================

# SD card unmount
unmount /media/microsd

# The rule here? Simplicity.
export STASHNAME=pm-suspend
unmount /media/microsd が追加した行です。microsdの部分は人によって違うと思いますので注意してください。
【追記】pm-suspendは変更しないで、下述の00umountchvtにアンマウント処理を入れます

ビデオドライバ

次は復帰に関してなのですが、その前にnblogの中の人のmbookのビデオドライバについて説明しておきます。前回9.10のインストールときは、9.04用psbドライバを流用する方法を説明しましたが、今は9.10に対応したPPAを利用しています。9.10からはPPAの組み込みが簡単になりました。
$ sudo add-apt-repository ppa:kalon33/ppa
3Dは使わないので、最小限の4つだけ利用しています。
  • psb-kernel-headers
  • psb-kernel-source
  • psb-modules
  • xserver-xorg-video-psb


サスペンドからの復帰

話を戻してサスペンドからの復帰です。初期の状態ではサスペンドから復帰すると画面が崩れてしまう場合と、ブラックアウトになる場合があるようです。画面が崩れた場合は Ctrl+Alt+F1 で仮想端末に切り替えてから、Ctrl+Alt+F7 で復帰できます。

ブラックアウトになってしまった時は仮想端末を切り替える方法が使えないので、acpi-support の DOUBLE_CONSOLE_SWITCH=true についているコメントを外し、ブラックアウトが起こらないようにします。
$ sudo vi /etc/default/acpi-support
================

# Uncomment the next line to switch away from X and back again after resume.
# This is needed for some hardware, but should be unnecessary on most.
DOUBLE_CONSOLE_SWITCH=true

最後に画面の崩れ対策です。崩れないようにできればいいのですが、これはビデオドライバが原因のようです。psbドライバを組み込まないでサスペンドさせると、画面がまったく崩れません。

画面の崩れは Ctrl+Alt+F1 のあと Ctrl+Alt+F7 で復帰できるので、これを自動実行するスクリプトを作成します。/etc/pm/sleep.d に実行ファイルを置いておくとサスペンド時に実行されるので、00umountchvt というファイルを作成してパーミッションを755にしておきます。中身は以下の2行です。
chvt 1
chvt 7
chvtは仮想端末の切り替えを行うコマンドで、とりあえずこれで目的は果たせるのですが、これだとサスペンドに入るときと復帰時の2回実行されてしまうのでもう少し修正します。


検索していたら見つけた、サウンドドライバをサスペンドの復帰時に読み直すスクリプトらしいのですが流用させてもらいます。
【追記】SDカードのアンマウント処理を追加しました。
case "$1" in
        hibernate|suspend)
                [ -b /dev/mmcblk0p1 ] && umount /dev/mmcblk0p1
                ;;
        thaw|resume)
                chvt 1
                chvt 7
                ;;
        *) exit $NA
                ;;
esac


まとめ

以上で自分の場合はサスペンドがうまくいくようになりましたが、環境が違うと、この方法でうまくいくかわかりません。SDカードのマウントでフリーズする辺りは、早々に修正されそうな気もします。

ちなみにnblogの中の人は、まったくと言っていいほどサスペンドを使わないので、修正が来ても気づかないかもしれません。

2009/10/31(土)mbookでUbuntu9.10

Ubuntu9.10がリリースされたので、さっそくmbookにインストールしてみました。


RCからのアップグレードで問題なさそうだったのですが、いろいろ手を加えまくったのでもう1度クリーンインストールしつつまとめてみました。ほとんど以前の記事の手直しになります。
  • インストール
  • 解像度を1024x600にする
  • タッチパネルを使えるようにする
  • 音を出す
  • 無線LANを使えるようにする
  • 内蔵HSDPAでWWAN通信
  • まとめ

インストール

mbookの起動時にFn+F11でUSBメモリから起動し、いつものようにインストールします。インストール自体は特に問題ないのですが、リリースに不具合として「ext4 ファイルシステムでは巨大なファイルが破損する恐れがあります」というのが上がってましたので、動画などで512MB以上のファイルを扱う場合は注意が必要かも(問題ないという話もあり)しれません。ちなみにクリーンインストールだとext4でフォーマットされます。

作業が多いので、内蔵無線LANが使えるようになるまでは、挿すだけで使えるUSB接続のLANアダプタ(有線無線問わず)があると便利です。

解像度を1024x600にする

以前からUbuntuのwikiに、HardwareSupportComponentsVideoCardsPoulsboというのが上がっていて、今でもこの方法が主流のようです。これをスクリプトにしたページがありますので、比較的お手軽にpsbドライバを組み込めると思います。
wget http://gma500re.altervista.org/scripts/poulsbo.sh && sh ./poulsbo.sh 
個人的にはレポジトリでまとめてインストールするのが好みなので、Lucazade(gma500)に期待していたのですが、xserver-xorg-video-psbがFailed to buildのままで残念でした。xserver-xorg-video-psb以外をインストールしても、結局最後の部分で手動が入るので、上記にあるGMA500REのスクリプトでインストールするのが楽だと思います。

スクリプトを実行して、再起動すると1024x600になります。

タッチパネルを使えるようにする

  1. 解像度を1024x600にしてから作業に入ります。
  2. GalaxTouchDriver から該当するファイル(自分の場合は2.06.2905)をダウンロードします。
  3. 展開して setup.sh を実行し、途中の選択肢は[2]PS/2 を選びます。
  4. /etc/init.d/rc.local の case “$1” inの前に echo -n serio_raw > /sys/bus/serio/devices/serio4/drvctl と付け加えます。
  5. 再起動後、eGalaxTouchを起動して、Toolタブから4点キャリブレーションで調整して設定終了です。

音を出す

/etc/modprobe.d/alsa-base.conf に以下の2行を追加します。
alias snd-card-0 index=0
options snd-hda-intel model=basic
再起動後、ターミナルで alsamixer を実行して、右から2番目にあるMonoのボリュームを大きくします。

無線LANを使えるようにする

ファームウェアの準備
  1. firmwareをダウンロードしてきます。
  2. 展開してFwImageの中にある、helper_sd.bin を sd8686_helper.bin に名前を変えます。
  3. sd8686_helper.bin と sd8686.bin を /lib/firmware にコピーします。
一応この時点でコマンド(iwconfig)による無線の設定はできますが、NetworkManagerを使うとフリーズします。コマンドでも数回実行するとフリーズするようです。フリーズしないようにするには無線のドライバ(libertas)を作り直す必要があります。


ビルド環境の構築
まずはビルド環境を整えます。
$ sudo apt-get install build-essential kernel-package libncurses5-dev libqt3-mt-dev

$ sudo apt-get install linux-source-2.6.31
$ cd /usr/src
$ sudo tar xvjf linux-source-2.6.31.tar.bz2

$ cd linux-source-2.6.31
$ sudo cp /boot/config-2.6.31-14-generic .config
$ sudo make oldconfig

libertasの修正
以下、/usr/src/linux-source-2.6.31/ で作業します。
libertas-dev mailing listのログにあったsd8686 linux system hang when associating to access pointからの流れが解決方法で、後半には差分が書かれてるのですが、2.6.29で取った差分らしく、9.10(karmic)のカーネル2.6.31だと微妙に違っていてうまくいきません。

2.6.31用に直したのが以下のテキストですのでコピーして libertas.patch など適当な名前で保存しておきます。
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 6850981..ede1c5b 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -1496,6 +1496,13 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
 		ret = lbs_cmd_fwt_access(cmdptr, cmd_action, pdata_buf);
 		break;
 
+	case CMD_802_11_GET_LOG:
+		cmdptr->command = cpu_to_le16(CMD_802_11_GET_LOG);
+		cmdptr->size = cpu_to_le16(sizeof(struct cmd_ds_802_11_get_log) +
+					    S_DS_GEN);
+		ret = 0;
+		break;
+
 	case CMD_GET_TSF:
 		cmdptr->command = cpu_to_le16(CMD_GET_TSF);
 		cmdptr->size = cpu_to_le16(sizeof(struct cmd_ds_get_tsf) +
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c
index c42d3fa..4fe93b4 100644
--- a/drivers/net/wireless/libertas/cmdresp.c
+++ b/drivers/net/wireless/libertas/cmdresp.c
@@ -189,7 +189,21 @@ static int lbs_ret_802_11_bcn_ctrl(struct lbs_private * priv,
 		priv->beacon_period = le16_to_cpu(bcn_ctrl->beacon_period);
 	}
 
+	lbs_deb_leave(LBS_DEB_CMD);
+	return 0;
+}
+
+static int lbs_ret_802_11_get_log(struct lbs_private * priv,
+					struct cmd_ds_command *resp)
+{
+	struct cmd_ds_802_11_get_log *log = &resp->params.log;
+
 	lbs_deb_enter(LBS_DEB_CMD);
+	priv->wstats.discard.retries = get_unaligned_le32(&log->retry);
+	priv->wstats.discard.code = get_unaligned_le32(&log->wepundecryptable);
+	priv->wstats.discard.misc = get_unaligned_le32(&log->ackfailure);
+	lbs_deb_leave(LBS_DEB_CMD);
+
 	return 0;
 }
 
@@ -266,7 +280,9 @@ static inline int handle_cmd_response(struct lbs_private *priv,
 	case CMD_RET(CMD_802_11_BEACON_CTRL):
 		ret = lbs_ret_802_11_bcn_ctrl(priv, resp);
 		break;
-
+	case CMD_RET(CMD_802_11_GET_LOG):
+		ret = lbs_ret_802_11_get_log(priv, resp);
+		break;
 	default:
 		lbs_pr_err("CMD_RESP: unknown cmd response 0x%04x\n",
 			   le16_to_cpu(resp->command));
diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h
index c8a1998..7ce35fc 100644
--- a/drivers/net/wireless/libertas/hostcmd.h
+++ b/drivers/net/wireless/libertas/hostcmd.h
@@ -771,6 +771,7 @@ struct cmd_ds_command {
 
 	/* command Body */
 	union {
+		struct cmd_ds_802_11_get_log log;
 		struct cmd_ds_802_11_ps_mode psmode;
 		struct cmd_ds_802_11_get_stat gstat;
 		struct cmd_ds_802_3_get_stat gstat_8023;
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index 8bc1907..9e0d161 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -788,7 +788,6 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev)
 	int stats_valid = 0;
 	u8 rssi;
 	u32 tx_retries;
-	struct cmd_ds_802_11_get_log log;
 
 	lbs_deb_enter(LBS_DEB_WEXT);
 
@@ -830,13 +829,8 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev)
 	quality = rssi_qual;
 
 	/* Quality by TX errors */
-	priv->wstats.discard.retries = dev->stats.tx_errors;
 
-	memset(&log, 0, sizeof(log));
-	log.hdr.size = cpu_to_le16(sizeof(log));
-	lbs_cmd_with_response(priv, CMD_802_11_GET_LOG, &log);
-
-	tx_retries = le32_to_cpu(log.retry);
+	tx_retries = priv->wstats.discard.retries;
 
 	if (tx_retries > 75)
 		tx_qual = (90 - tx_retries) * POOR / 15;
@@ -852,9 +846,9 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev)
 		    (PERFECT - VERY_GOOD) / 50 + VERY_GOOD;
 	quality = min(quality, tx_qual);
 
-	priv->wstats.discard.code = le32_to_cpu(log.wepundecryptable);
+//	priv->wstats.discard.code = le32_to_cpu(log.wepundecryptable);
 	priv->wstats.discard.retries = tx_retries;
-	priv->wstats.discard.misc = le32_to_cpu(log.ackfailure);
+//	priv->wstats.discard.misc = le32_to_cpu(log.ackfailure);
 
 	/* Calculate quality */
 	priv->wstats.qual.qual = min_t(u8, quality, 100);
@@ -864,6 +858,9 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev)
 	/* update stats asynchronously for future calls */
 	lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0,
 					0, 0, NULL);
+
+	lbs_prepare_and_send_command(priv, CMD_802_11_GET_LOG, 0,
+				     0, 0, NULL);
 out:
 	if (!stats_valid) {
 		priv->wstats.miss.beacon = 0;

差分はgitで当てます。
$ sudo apt-get install git-core
$ sudo git apply libertas.patch

カーネルビルドをmbookで行うと5時間以上かかるので、ドライバのみビルドします。
$ sudo cp /usr/src/linux-headers-2.6.31-14-generic/Module.symvers ./
$ sudo make modules_prepare
$ sudo make M=drivers/net/wireless/libertas

ドライバの組み込み
無線がONになってる場合は、WLAN-BTボタンを押して、無線をOFFにしてから組み込まれてるドライバをはずします。
$ sudo modprobe -r libertas_sdio libertas
/lib/modules/2.6.31-14-generic/kernel/drivers/net/wireless/libertas/ に現在のドライバがあるので、(使わないと思いますが)一応バックアップしておきます。./drivers/net/wireless/libertas/ にビルドしたドライバ libertas.ko と libertas_sdio.ko が出来上がってるのでmodulesの方へコピーして、念のため depmod -a をしておきます。

WLAN-BTボタンを押して、dmesgやlsmodで新しいドライバが組み込まれたか確認します。

NetworkManagerで無線の設定をして、固まらなければ成功です。カーネルイメージのバージョンアップがあるたびに libertas.ko と libertas_sdio.ko をコピーするのを忘れないようにします。

内蔵HSDPAでWWAN通信

mbookに内蔵されているのは、C-motech CHE-628Sというモデムです。lsusb で確認すると以下のように表示されます。
Bus 004 Device 002: ID 16d8:6007 CMOTECH Co., Ltd.
しかし、usbserialのドライバがまだ入っていないので、ttyUSB*が存在しません。ですので、まずはudevにドライバの組み込み設定をします。/etc/udev/rules.d/50-local.rules というファイルを作成して、次のような中身にします。
SUBSYSTEM=="usb", SYSFS{idProduct}=="6007", SYSFS{idVendor}=="16d8", RUN+="/sbin/modprobe usbserial vendor=0x16d8 product=0x6007"

再起動すると、/dev以下に ttyUSB0~2 まで出来るはずです。あとは gnome-ppp をインストールして設定していきます。モデムは /dev/ttyUSB1 を使用、Options の Check carrier line のチェックを外す、を注意しておけば大丈夫だと思います。

Screenshot-GNOME PPP.png


Screenshot-Init Strings.png


Screenshot-Setup.png


Screenshot-Setup-2.png



まとめ

かなり長文になりましたが以上がmbookにUbuntu9.10をインストールする方法になります。所持していないのでわかりませんが、おそらく工人舎のPMシリーズもほぼ同様にインストールできると思われます。

webカメラはあいかわらずWindowsで起動(Fn+B)してから、再起動しないと使えない(PMはBIOSで設定できる)し、内蔵モデムもNetworkManagerから使用できない(こちらはもう少し)などまだまだ課題が多いのですが、とりあえず9.04で出来ていたことは最低限なんとかなっていると思います。

ビデオドライバ(psb)がおかしいのと省電力関係(USB周り)に不具合があるっぽいので、サスペンドやハイバネーションは今のところ厳しいかもしれません。この辺りはビデオドライバを無理矢理インストールしてるので、ある程度仕方ないかもしれません。
【追記】サスペンドに関しては別記事にまとめてみました。

半年付き合うことになるので、少しずつ解決していきたいと思います。