SDカードにSmartQ5のハードウェア製造元配布のubuntuをインストールしてみます。もうすでに何人もの方がやられていることですが、例によって自分のための覚え書きとして記します。覚え書きなので間を端折ってありますから、このとおり実施すれば誰でもできる、というものではありません。ご留意ください。
環境
- SmartQ5: Covia版
- SDカード: Greenhouse GH-SDHCC32C6D (32GB, class6)
- SDカードリーダ: Princeton PRD-123X (USB接続)
- Linuxマシン: Vine Linux 3.1
SDカードにパーティションを切る
手順
- すでにSmartQ5とともに使っているSDカードを使うので、内容をバックアップ。FAT32なのでWindows上へのバックアップで問題なし。
- SDカードリーダをLinuxマシンにつなぎ、SDカードを挿入すると自動的に認識される。
- fdisk -l でデバイス名を確認(今回は /dev/sda だった)
- 詳細は省くが、fdisk /dev/sda で、次のとおりパーティションを切る。なおC=63, H=255, S=3930
デバイス名 | サイズ(シリンダ数) | タイプ |
/dev/sda1 | 864 | FAT32(0x0c) |
/dev/sda2 | 1000 | Linux |
/dev/sda5 | 1000 | Linux |
/dev/sda6 | 1000 | Linux |
/dev/sda7 | 残り全部 | Linux swap(0x82) |
- 最初にバックアップしたファイルを第1パーティションにリストア。
嵌った点及びTips
- Windows上でCygwinのfdiskを使うと、初期パーティションはちゃんと見えるし操作もできるが、パーティションテーブルの書き込み(wコマンド)で Error closing file と表示されて失敗する(もう一度fdiskを起動して見てみると、変更前のパーティションが表示される)。
- LinuxマシンではなくVirtualBox上のubuntuからやろうとしたが、SDカードが認識されなかった。このケースではSDカードはフロッピーディスクの一種として認識されたが、fdiskやgpartedによるアクセスはできなかった(SDカードにあたるフロッピーディスクを表示できなかった)。
- LinuxでSDカードリーダの取り外し方がよくわからなかった。結果的には次の方法で。
- cat /proc/scsi/scsi で 次の4つの番号を調べる。
- ホストアダプタ番号 (Host)
- チャネル番号 (Channel)
- SCSI ID (Id)
- Logical Unit Number (Lun)
- 取り外す(Host, Channel, Id, Lun には上で調べた番号を入れる)
echo 'scsi remove-single-device Host Channel Id Lun' > /proc/scsi/scsi
追加するときはadd-..とやるらしい。scsiaddを使うともっと簡単になるそうだ。
- カードリーダからSDカードだけを取り外すときは、mountでSDカード関係のマウントがされていないかどうかを確認して、あればすべてumountする。なければいきなりメディアを引きぬいてOK。
- SmartQ5へのSDカードの出し入れ(狭いスリットの間をクリックがあるまでプッシュしなければいけない)には小さい爪切りの太い方の柄が便利。
SDカードのフォーマット
- FAT32パーティション:
mkfs.vfat /dev/sda1
またはWindows上でフォーマットしてもよい。
- 3つのLinuxパーティションとスワップ領域:
mkfs.ext3 /dev/sda2
mkfs.ext3 /dev/sda5
mkfs.ext3 /dev/sda6
mkswap /dev/sda7
必要なファイルを得る
- 智器(SmartDevices)社の下記サイトからSmartQ5用ファームウェアのアーカイブをダウンロードする。今回はver.5.2の667MHz(ノーマルクロック)版を使った。800MHzはオーバークロック版。
http://en.smartdevices.com.cn/Support/Downloads/SmartQ5/
WinCEなんてのもありますね。興味津々。
- アーカイブは.rar形式なのでunrar等のツールで展開するとSmartQ5というファイル一つが得られる。これはそのまま本体フラッシュメモリに書きこめる形式である。
- ファイルSmartQ5を展開するために、Windows上ではSmartQ5Extractorが使える。これは.Netを使って書かれているので、unix上でもmonoを使えば実行可能らしいが、ここではsq5gogo氏の書かれたsq5ext.pyというスクリプトを使う。すると数個のファイルが得られる。
- それらのうち、以下の手順では次のファイルを使用することになる。
- zimage
- rootfs.tar.gz
- homefs.tar.gz
以下手順はSDカードの読み書きできるunix上でスーパーユーザによっておこなうことを前提。
FAT32パーティションへの書き込み
手順
- FAT32パーティションに/bootディレクトリを作ってzimageをそこへコピー
mount /dev/sda1 /mnt
mkdir /mnt/boot
cp -p zimage /mnt/boot/zimage-ubuntu
マルチブートにしたいのでzimageはファイル名を変えておく。
最後にエラーメッセージが出るが気にしない(タイムスタンプを変えたくないので-p)。
- テキストファイルmenu.lstを次の内容で作成する(ブートローダはgrubかな?)。
title ubuntu
kernel /boot/zimage-ubuntu
param root=/dev/mmcblk1p2 init=/sbin/init rootwait splash
logo /boot/ubuntu.bmp4
ルートデバイスのファイル名については下記注釈を参照。logo~はbmp4形式のアイコンファイル名。アイコンファイルを作るツールもあるようだが、私はこのサイトで紹介されているできあいのアイコンファイルを頂いてきて使用している。アイコン不要ならこの行は削除。
- アンマウント
umount /mnt
注釈
- ルートデバイスのファイル名について
- flashとパーティションの関係は以下のとおり
本体flash:mmcblk0
SDカード:mmcblk1
末尾のpNは第Nパーティションを示す。
- menu.lstに記載するファイル名は8.3形式
menu.lstに記載するファイル名(カーネルイメージやアイコンファイルのファイル名など)は、語幹8文字+拡張子3文字までの長さでないと、(組み込みの)ブートローダが認識してくれない(起動時のメニューが出ないでAndroidが起動する)ようです。注意。
と思っていたのだが、私の勘違いで、長いファイル名でもきちんと起動する。
Linuxパーティションへの書き込み
- rootfsとhomefsをLinuxパーティションへ展開。
mount /dev/sda2 /mnt
tar xzpf rootfs.tar.gz -C /mnt/
tar xzpf homefs.tar.gz -C /mnt/home/
- (/mnt)/etc/fstabを次のとおり変更
proc /proc proc defaults 0 0
/dev/mmcblk1p2 / ext3 relatime 0 1
/dev/mmcblk1p7 none swap sw 0 0
そして
/dev/mmcblk0p2 /home ext3 noatime 0 2
の行は削除
- (/mnt)/etc/init.d/smartqの中の4つの行をコメントアウト
#rm -rf /var/log/*
#rm -rf /var/log/*
#rm -f /var/reserve/*
#rm -f /var/cache/apt/archives/*.deb
~/var/log/*の行は二つある。
- (/mnt)/usr/local/bin/homelinkを次のとおり変更
#!/bin/bash
exit
これ以降の行は残しておいても可。
- ディレクトリを作成
mkdir /mnt/var/log/apt
mkdir /mnt/usr/share/info
- アンマウント
umount /mnt
起動
- Androidが起動していたらシャットダウンする。その後普通に電源ボタンを長押しして起動。うまくいけば、ブートセレクタの画面となり、アイコンが2つ(智器のアイコンと?のアイコン)表示される。?アイコンの方が今回インストールしたubuntu。
- アイコンの選択は + ボタン、起動はzoomボタン(Androidではmenuボタン)で。
- Select language でENGLISHを選択
- タッチパネルのキャリブレーションを行う。
これでubuntuのデスクトップ画面になります。
嵌った点及びTips
- カーネルイメージファイル(kernelステートメントで指定)及びアイコンファイル(logoステートメントで指定)のファイル名の長さが15文字以上だと(ファイルが存在してもしなくても)ブートセレクタは出ず、flashから起動するようだ。
- 我家のSmartQ5は、個体差なのかどうか分からないが、電源ボタン長押しだけではブートセレクタの画面が出ず、flashから起動してしまうことが多い。電源ボタン長押しの後、画面を横位置でみて左上のところにカーソルが点滅したぐらいのタイミングでリセットボタンを押すとブートセレクタの画面が出る。また、ACケーブルを繋いだ状態で起動するのも効果がある。
- カーネルイメージファイルが見つからないとselectボタンを押したあとに電源が落ちる(ACに接続している場合は代わりにリブートして再度ブートセレクタが出る。これはたぶん個体差)。
- アイコンファイルが見つからないと代わりに?を白地の丸で囲んだようなアイコンが表示される。
- アイコンファイルのファイル名が14文字ちょうどでも?アイコンが表示されることが
あったので13文字以下推奨。
- アイコンファイルはbmp4形式で、サフィックスは .bmp4 でないといけない(ようだ)。
- 背景画像はbmp4形式で、ファイル名は bgbmp.bmp4 固定である(といわれている)。
- アイコンファイルの作り方や作成ツールに関しては http://voodooman-smartq5.blogspot.com/2009/08/sd-boot.html を参照。
以下ほとんどは、参考ページに挙げたsq5gogoさんの記事のコピーです。
上記文書にはGDebi(智器アイコン > System Tools > GDebi Package Installer)は起動しないように注意、削除せよとあるが、削除のしかたが分からないのでとりあえず注意する。
- WiFiアイコンをクリックしてWifiの設定。ネットワークを選択してパスワードを入力して接続できたら×でウィンドウを閉じる。
- 太陽アイコン > setup > Use AC で、AC電源接続時はサスペンドもパワーオフもしないようにする。
- Accesories > evilvte を起動してスーパーユーザになり、パスワードを変更。
su -s
passwd
rootのパスワードを設定
passwd user
userのパスワードを設定
表示されないパスワードの変更にはてこずる。アイロンのようなマーク長押しがキーボードの設定なので、打ちやすいキーボードに変えるとよい(transがおすすめ)。
- 暫定的なロケール設定
export LC_ALL="C"
- スワップを有効にする
swapon -s
で/dev/mmcblk1p7が表示されなかったので以下を実施
mkswap /dev/mmcblk1p7
swapon -a
swapon -s
で再確認
- sshdをインストール
apt-get update
apt-get install openssh-server
- 智器アイコン > Preferences > Wicd Network Manager でSmartQ5のIPアドレスを調べる。画面最下部のステータスバーにアドレスが表示される。
- PCからsshでSmartQ5にログイン(アドレスは192.168.2.33だったとする)
ssh user@192.168.2.33
パスワードは先ほど設定したuserのパスワード
- スーパーユーザになる
sudo -s
- ロケールの設定。/etc/default/localeの内容すべてを次のとおり置き換える。
LANG="ja_JP.UTF-8"
LC_ALL="ja_JP.UTF-8"
LANGUAGE="ja_JP:ja:en_US:en"
- 一度ログアウトしてログインしなおす。
exit
exit
ssh user@192.168.2.33
sudo -s
このとき
-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
というメッセージが出るが、日本語環境の設定作業が終われば出なくなるそうなので、無視して次へ進む。
- 不要なパッケージを消去
apt-get purge gdebi fcitx language-pack-zh-hans language-pack-zh-hans-base
ロケールに関するwarningが何回か出るが無視
rm -rf /usr/share/locale-langpack/zh_CN (purgeで削除できなかったディレクトリを手動で削除)
apt-get autoremove (依存関係をたどって使われていないパッケージを削除)
apt-get clean (お掃除)
- タイムゾーンの設定
dpkg-reconfigure tzdata
ロケールに関するwarningは無視
Asia/Tokyoを選択
/etc/default/rcSの以下の行を変更
UTC=yes
- リブート
reboot
- ログイン
ssh user@192.168.2.33
sudo -s
- /etc/apt/sources.list のkarmicの行の上に次のとおりjauntyのリポジトリを追加
deb http://ports.ubuntu.com jaunty main universe restricted multiverse
- /etc/apt/preferences の最終行の後に次の行を追加
Package: libanthy0 anthy
Pin: version 9100h*
Pin-Priority: 1001
Package: im-switch
Pin: version 1.16*
Pin-Priority: 1001
Package: libscim8c2a scim-modules-socket scim-gtk2-immodule scim
Pin: version 1.4.7*
Pin-Priority: 1001
Package: scim-anthy
Pin: version 1.2.7*
Pin-Priority: 1001
Package: scim-bridge-agent scim-bridge-client-gtk scim-bridge-client-qt4
Pin: version 0.4.14*
Pin-Priority: 1001
- anthy(日本語IM)と日本語パックをインストール
apt-get update
apt-get install scim-anthy language-pack-ja
localeがらみのメッセージが沢山出るが無視
- スーパーユーザから抜けてIMを切り替え
exit
im-switch -c
6(scim-immodule)を選択
- リブート
sudo reboot
以下はお好みで設定
- ログイン
ssh user@192.168.2.33
sudo -s
- デフォルトのユーザ環境設定をコピー
cp /etc/skel/.bashrc ~/
cp /etc/skel/.profile ~/
cp /etc/skel/.bash_logout ~/
- jp106キーボード(外付け)を使う予定なので /etc/default/console-setup の次の行を次のとおり変更
XKBMODEL="jp106"
XKBLAYOUT="jp"
- マウスカーソルを表示してみる。~/.icons/default/index.theme の次の行をコメントアウト
#Inherits=xcursor-transparent
参考になったページ
手順全体としては、
個々の操作については、
が大変参考になりました。ページ製作者の方々に感謝。
Tag: SmartQ5 智器 Smart Devices Covia Ubuntu Linux install