AUTHOR: すz
TITLE: Vine を入れてみよう
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: VineLinux
DATE: 08/29/2008 16:26:23
-----
BODY:
Aspire One に Vine Linux をインストールしてみた。とりあえずは、うまくいったようなので、メモ。
実は、サイズは変えていないが、partition 1 に Linux を入れるために位置をずらしていたのだ。で、Linux をいったんつぶして、Windows のパーティションを 前の DISK と同じ位置にずらしてからリストアした。
... 馬鹿馬鹿しいことに、当然のように立ち上がった。
さて、Windows が立ち上がったので、EASEUS Partition Manager を使って、新 DISK 本来の場所にまたずらす。
あとは Linux のパーティションを 作り直してリストア。
なんだか馬鹿馬鹿しいのだが、これでしたいことが出来た。
パーティションをずらすときの おまじないさえ知っていれば、こんなに遠回りする必要はなかった。
ではあるが、こういう機会でしかいろいろ試せない。これで気が済んだ。
最後に、メモリと DISK を換装したかった理由など。
メモリを少しでも増やしたかったのは、VMware など仮想環境のため。本当は、Linux をメインにして、Windows のほうを仮想環境にしたいのだが、音が出ないとかいろいろあって常用するのはつらい。当面は、Windows をメインにして Linux を 仮想環境にすることにした。そのため、メモリは多いほうが嬉しい。
DISK を増やしたいのも 複数の Linux 環境と Windows 環境を持ちたいため。Linux を常用できるようにするために ビルド環境とか 実験用の環境とかで、結構 DISK を使うのだ。
使い込むなら DISK を 500G にすべきだと思ったのだが、まだまだ、おもちゃ感覚。なので、半端な 320G にしてしまった。
... というのはすべて建前。実はただ分解する理由と、アレコレ試す理由がほしかっただけかも知れない。
追記:取ったゴム足をはめているだけにしていたら紛失してしまった。 タカチ電機工業 黒 B−P42 ハリ付ゴム足をスライスして付けたらどうか?。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 最近のSSD
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: AspireOne
DATE: 12/03/2008 21:47:45
-----
BODY:
最近 32GB の SSD が 8000 円前後と安くなってきているので気になってきた。
で調べてみたら、プチフリSSDまとめというページが見つかった。
これ見ると、CrystalDiskMark の性能が SLC 並に良く、かつお買い得感のあるSSD がことごとく該当している。
FAQによると、JMicron製コントローラーチップ「JMF602」を搭載した SSD は、プチフリ(十数秒から数分フリーズ)することがあるらしい。
システム専用なら 16GB でもなんとかなるので、今は MTRON MSD-SATA3525016あたりの方が安心かも知れない。
自分としては、HDD で不満はないし、当面様子見。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: eeePC 701SD-X
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 12/08/2008 13:43:55
-----
BODY:
eeePC 701SD-X を買ってしまった。2台目として携帯性に優れたものが欲しいと思っていたのだが、 Willcom D4 とか Everun Note とかはどうも値段の割りにイマイチのような気がしてきた。
本命は、1〜2 年先ということにして、がまんするつもりだったのだが、eeePC 701SD-X が ヨドバシで 29800 円 + ポイント20%(6000円相当) さらにマウスやら 30GB の USB Disk もおまけもちゃんと付く というのを知り思わずポチってしまった。
衝動的に買ってしまったのだが、よくよく考えれば 0.91 kg と Aspire One(1.06kg) より軽いし、電池も持つ(スベックで 約3.7時間 vs 約3時間) 。Disk 容量の少なさとか 画面サイズ(800x480)と折り合いさえ付けば、便利に使えるかも知れない。折り合いが付かなくとも 家の DeskTop よりはマシなので、Keyboard, Display を外付けにして、DeskTop 代わりに使えばよい。
... という風に理由づけして、当面 701SD-X をメインに使ってみようと思っている。
まずは、アプリを入れたり、WindowsUpdate したり..
アプリは、とりあえず次のもの
ウィルスチェック :AVG Free 8.0
ブラウザ :FireFox 3.0 + Adobe Flash Player
メディアプレイヤー:SMPlayer
オフィス系 :とりあえずなし
その他
KeySwap, siw , RealSync, Virtual CloneDrive
TrueCrypt, MSYS, 通信系ソフト
インストールの次に、AVG のアップデートをしたら ... メモリ不足で 異常終了してしまった。デフォルトではページングファイルを使わない設定になっているので、ページングファイルを 512MB 割り当てることにした。
これで使い続けるのははっきりいって無理 -- (遅い)SSD なので ページングファイルは使わないようにすべき。メモリは 1GB を買うことにした。2GB も考えたのだが ... 休止を使いたい( メモリ量だけの空きが C: に必要) ので 必要最低限度の 1GB にした。
次に CrystalDiskMark で SSD の 性能をみてみた。
-------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 38.218 MB/s
Sequential Write : 6.959 MB/s
Random Read 512KB : 37.929 MB/s
Random Write 512KB : 1.819 MB/s
Random Read 4KB : 6.624 MB/s
Random Write 4KB : 0.020 MB/s
Test Size : 100 MB
...なんというか Write 系は、SD/microSD レベル以下。
ちなみに ↓は、8GB の A-DATA microSD を右の SD slot に入れたときの性能値。Read は不利なのだが、Write は倍程度の性能。
そして、16GB の A-DATA SD は、これより性能が良い(ただし Random Write 4K は同じぐらい)
microSD A-DATA 8GB (SD Slot)
--------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 20.072 MB/s
Sequential Write : 15.842 MB/s
Random Read 512KB : 19.822 MB/s
Random Write 512KB : 3.928 MB/s
Random Read 4KB : 4.166 MB/s
Random Write 4KB : 0.039 MB/s
Test Size : 100 MB
あまりにひどいので、安くて速いSSDモジュールがあるのなら交換したい。x-gadget:blog の SHD-DI9ベンチマーク結果によると、少しにょごにょする必要があるものの使える可能性は高そうだ。16G の SHD-DI9M16G と 32G の SHD-DI9M32Gで性能差があるなら 迷わず 32G を買うと思うが、同じなら16G で済ませるかも。
使用感
いまのところ FireFox-3.0 はもっさりしすぎ。ちょっと重いページをアクセスするだけでプチフリする。使っていて楽しくない。動画は低ビットレートのものしか持っていないのでまったく問題なし。
まずはメモリを 1G にして ページングファイルを作らないようにしないと問題外か。
800x480 の画面については、慣れることができそう。... というかその解像度でストレスになるようなアプリはそもそも入れない方針。
あと Linux は是非試してみたい。SDカードにインストールできているみたいなので、いろいろ試せそうだ。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SDカードへのVineインストール
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 12/10/2008 02:33:11
-----
BODY:
eeePC 701SDX をいじりたいのだが、SSD のバックアップが終わらないと怖くてできない。バックアップは Linux ですると決めているので、Linux をどうにか動かさないと いじり始められない。
なので、SDカードにインストールしてみることにした。OS は使い慣れている Vine 4.2 。
ところで、eeePC 701SDX の SD カードリーダは、内部的に接続された USB カードリーダ。Vine 4.2 は少々古いOS で、USB ディスクにインストールできても、立ち上がらない。
ググってみたら、Windowsを傷付けずにUSBからLinuxをブートせよ!なんていうページを見つけた。
これを見ると、普通 initrd に USB Host アダプタドライバを入れておけば普通にブートできるらしい。で、その作業のために別の Linux マシンが必要になる。
記事では、ターゲットマシンで 1CD Linux を動かして作業しているが、Linux マシンは既にあるから 私は問題ない。
きれいにインストールしたかったので、CDROM から Vine をインストールしてみた。... のだが ...
Vine のGUI インストーラは起動したのだが、インストール先として、USB ディスクを選べない ... Ctrl-Alt-F2 で shell 画面に切り替えてみると、ちゃんと /dev/sda として認識しているのだが .. やっぱり インストール先として選ぶことが出来なかった。
幸い AspireOne のバックアップがあったので、これをSDカードにリストアして Linux 環境を作ることにした。
とりあえずバックアップさえできればよいので、空いている 8GB の microSD を使い、
1. grubldr.mbr (grub4dos) の書き込み
2. パーティション作成
7GB 弱を / に、1GB を SWAP に
3. tar で AspireOne のバックアップを展開
という手順でベースを作成した。
あとは
4. 上の記事を参考に initrd の作成
5. /etc/fstab や /boot/grub/grub.conf の修正
/etc/mtab の編集
6. /etc/inittab を編集し、initdefault を 3 に変更。
7. grub4dos 用の /grubldr , /menu.lst の作成
といった作業をして 立ち上げる環境を作ってみた。
これをどうやって立ち上げるのか、最初は全然わからずに試行錯誤した。結局
o eeePC では、SDカードを含め USB ディスクは、BIOS で drive0
, drive1 , drive2 ... と認識される。
o BIOS の drive の選択は、起動時 ESC を押すことでできる。
ということが分かった。
で、立ち上げてみると、LAN や 無線LAN あと サウンドは使えないものの Vine が立ち上がってきた。
SSD は、/dev/hdc として認識された。いわゆる Dドライブしかない状態なのだろう。
まずは fdisk 。
Disk /dev/hdc: 8069 MB, 8069677056 bytes
255 heads, 63 sectors/track, 981 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/hdc1 * 1 978 7855753+ 7 HPFS/NTFS
/dev/hdc2 979 980 16065 ef EFI (FAT-12/16/32)
なんか 16MB の EFI パーティションがある。で、EFI をキーワードでぐぐってみた。EFI そのものについても調べたが、eeePC 関連で EFI に言及しているサイトは結構役に立つ情報が載っていることも分かった。
次に バックアップ。
dd if=/dev/hdc of=eee-mbr.img bs=32256 count=1
dd if=/dev/hdc2 of=eee-efi.img
ntfsclone -s -o - /dev/hdc1 | gzip --fast > eee-win-081208.img
と 3 つに分けてバックアップした。
mbr は先頭だけでなく、パーティション 1 までの部分(63 x 512)を全部取っておく。
EFI はとりあえず。
Windows 本体は、AspireOne と同じように ntfsclone でバックアップ。できたファイルは、2.2
それは良いのだが、時間がやたらかかった。これでは常用できない。
real 42m34.168s
user 11m35.991s
sys 22m12.339s
まず、sys が 22 分というのは、/dev/hdc(SSD) が PIO モードになっているためのはず。UDMA モードにすれば CPU を使わなくなる上に 高速化するはず。
追記。リストアしてみた。
real 37m17.168s
user 3m51.842s
sys 22m02.971s
IDE ドライバーをなんとかしないと...
おまけ
Linux からみえるバッテリー
/proc/acpi/battery/BAT0/info:
design capacity: 4387 mAh
last full capacity: 4355 mAh
battery technology: rechargeable
design voltage: 8400 mV
design capacity warning: 436 mAh
design capacity low: 218 mAh
capacity granularity 1: 43 mAh
capacity granularity 2: 43 mAh
model number: 701SD
serial number:
battery type: LION
OEM info: ASUS
/proc/acpi/battery/BAT0/state:
present: yes
capacity state: ok
charging state: charged
present rate: 0 mA
remaining capacity: 4355 mAh
present voltage: 8306 mV
AspireOne は、バッテリー自体に書いてある mAH と ACPI から見える design capacity とは結構大きな差があった。(うろ覚えなのだが、93 % ぐらい? ) 目的は過充電しないためのはず。
こいつは、ぎりぎりまで充電している。バッテリーの劣化が少々心配だ。
あと、serial number は隠したのではなく、付いていない。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: eeePC 701SD-X の消費電力
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 12/15/2008 15:05:43
-----
BODY:
サンワのワットチェッカーで、消費電力を調べてみた。
* CPU モード
PS -- Power Saving Mode (633 MHz)
HP -- High Performance Mode (900 MHz)
SP -- Super Performace Mode (966 MHz)
* Windows 、無線LAN, LAN, カメラ OFF
09 W PS アイドル状態 + ディスプレイ OFF
10 W PS アイドル状態 + ディスプレイ 中輝度
11 W PS アイドル状態 + ディスプレイ 最高輝度
13 W HP アイドル状態 + ディスプレイ 最高輝度
以下 ディスプレイ中輝度
12 W PS Adobe Reader Pg Up/Dn 連打
13 W HP Adobe Reader Pg Up/Dn 連打
15 W SP Adobe Reader Pg Up/Dn 連打
11 W PS CrystalDiskMark 実行 (SD カード)
11 W PS CrystalDiskMark 実行 (内蔵ディスク)
11 W PS アイドル 30G USB DISK 挿入
13 W PS CrystalDiskMark 実行 (30G USB DISK)
どうも PS モード固定で使って、遅くてがまんできないときだけ手動で HP モードにするのが良いように思う。
付属 USB DISK は、思ったより消費電力が少ない感じ。意外と使えるかも。
消費電力は Aspire One と似たような感じ。Aspire One が 3セルなのに対して 4 セルだから 単純に 4/3 の時間もつのかも。
追記
充電時の消費電力
26W 電源 off
26W 起動中
Aspire One でもそうだったが、AC アダプターから供給する電力の上限は決まっているようだ。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: eeePC 701SD-X メモリ換装
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 12/15/2008 18:07:14
-----
BODY:
メモリを キングストン PC2-5300 1GB に換装した。
裏のフタをあけて入れ替えるだけだから、Aspire One のときのような気合いは必要なく、気軽な作業だった。
で、SIW (System Infomation for Wiondows) で チェック。
このメモリは、
3-3-3-9 200 MHz
4-4-4-12 266 MHz
5-5-5-15 333 MHz
に対応している。で、選択されたモードは 3-3-3-9
CPU のモードで、システムクロックが 69.3 〜 106.8 MHz まで
変化するので、たぶんメモリのクロックは、139.6 〜 213.6 MHz 。
少々オーバクロックになってしまうが、Super Performance Mode は使うつもりはないので、気にしないことにする。
追記:
オリジナルは、PC2-3200 だそうだ。.. とういことは、メモリクロック = システムクロックが正解で、上の x2 した値は大間違い。
オーバークロックではなく、余裕ありすぎ。
1GB にした効果について
FireFox が時々プチフリしたりして使い物にならなかったのだが、普通に使えるようになった。
ただ、Aspire One と比べるとやっぱり全然遅い ... ような。画像が沢山あるような今では普通のページを開くと、DISK にキャッシュとして小さなファイルを沢山作るから遅いのだと思う。
よくよく考えれば、FireFox だけが遅くて困るならばチューニングすれば良いだけのことかも知れない。
とりあえず、
アドレスバーに about:config を入力して、
browser.cache.disk.capacity を 0 に
browser.cache.memory.capacity を 50000 に
という設定をしてみることにした。
あと、休止が悲しいほど遅い。ひょっとしてシャットダウンより遅いのでは? もともと遅かったのにメモリが 2倍になったわけだから当然といえば当然なのだが...
再開は休止と比べるとまだマシ。 とはいえ、Aspire One のようにロードのプログレスが一気に進む感じではない。
だいぶマシになったとは言え、まだまだ。
使い勝手をよくするために SSD を換装したくなる。
もう私には、SHD-DI9Mしか見えない...のだが、入手できるのは 先になりそう。その上 x-gadget:blogの記事「SHD-DI9MのCSELを弄り中」を見るとなにやら面倒そうなことをやっている。
Linux では、/dev/hdc として見えるから 701SD-X では セカンドインターフェイスのマスターのはず。ひょっとして、701SD-Xは関係ないのか?
あと、「SHD-DI9M 裏技みたいな何か」の記事を見ると、アクセスランプを点滅させるためには、抵抗のショートが必要らしい。これはもう確定。
なかなか面倒そうだ。
ここでふと立ち止まってみる。
どうせ SHD-DI9M は当面入手できないし、SD(USB) に Windows XP を移して SSD なしで使ってみるのはどうか?
「Windows XPをSDカードやUSBメモリから起動する方法」なんて記事を発見した。すごく面倒そうな上、本体SSD にはもう XP を残せない。
だが、本格的に Linux を導入することにして、XP はおまけ程度に考えれば これもアリか。
なにしろ メインは Aspire One だし、実質 25000円以下で入手したおもちゃだ。あまり追加投資せずに イロイロ遊んでみるというのもひとつの道だ。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: puppy Linux(4.1.1-JP) を試してみた
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 12/19/2008 23:08:07
-----
BODY:
パピーリナックス日本語版 4.1.1-JP をちょっと試してみた。
適当なインストール
これを 立ち上げると ライブCD と同じレベルのものが立ち上がって来た。
追記:あまりに適当なので..補足。
Linux 機器がまったくない場合は→てさぐりなっくす:USBメモリブートのpuppy linuxの作り方が参考になりそうです。
試用
ちょっと端末を開いて 使えるコマンドをチェック ...
ntfsclone , gparted が入っている! これなら Windows のバックアップリストアに使えるので、たとえ常用しなくとも レスキュー用に持っておく価値がある。
次に デスクトップのアイコンをチェック
ファイル ROX-Filer
エディタ Geany 0.12
ワープロ abiword 2.6.3 (GNOME オフィス)
ブラウザ SeaMonkey 1.1.11
予定 osmo 0.2.0
接続
ダイヤルアップ・アナログモデムでインターネット
ネットワークあるいは無線LANでインターネット
無線GPRSモデムでインターネット
ロアリングペンギン PPPOEでインターネット
ヘルプ
表計算 Gnumeric 1.8.2
メール SeaMonkey 1.1.11
再生 gxine 0.5.9
ペイント mtPaint 3.21
ドロー Inkspace 0.36-pre0
チャット Ayttm 0.5.0-81
パーソナル(メニュー)から 抜粋
Didiwiki パーソナルウィキ
Ptimer ストップウォッチ/アラーム
pStopWatch ストップ・ウォッチ
適当に立ち上げて プログラムだけチェックしてみた。
OSまるごと RAM にロードしているので、これらは実に軽快に立ち上がってきた。
その後でメモリ のチェック --- 494M free
o まぁ ライブCD をメインにするなら、1G に増設してないときつそう。
とりあえず、今日はここまで。
感想
- 実をいうと、デスクトップのアプリはなじみがないものばかり。それで満足できれば全然問題ないから、ちょっと使い込んでみたい。
- SSD にインストールしても、どうせ遅いのだから ライブCD+カスタマイズという感じで使えると嬉しいのだが ... どうやって設定すればよいのか? まだ分かっていない。
- 実は b-mobile3G を使っている。これが使えると .. すごく嬉しいのだが ..
ちょっと ZTE 19d2:2000 で ググると Ubuntu 関係で ZTE USB Modem Helpなんてのが見つかった。全然理解していないのだが、ちゃんと読めば設定できるのかも。
Tips メモ
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: プチフリって何?
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 12/20/2008 21:08:52
-----
BODY:
実際に自分がSSDをシステムドライブにしたマシンを使うまでプチフリなるものにさして興味がなかったのだが、だんだんと興味が出てきた。現時点の認識をメモ。
プチフリって何?
Windows を使っていると、マウスカーソルが変わらなくてなにもできない状態が数十秒続くことがある。ひどくなると、画面の再描画まで止まってしまい、フリーズしたと思える状態にまでなる。
で、原因は別にしてこういう状態になることを(本当のフリーズではないので)プチフリと呼ぶらしい。
なぜこんなことが起きるのか?
あるリソースを握っているプロセスが、OS に対してなんらかのサービスを要求したとき、それをするための別のリソースが獲得できなくて止まってしまうと、握っているリソースを別のプロセスが要求したとき、そのプロセスも止まってしまう。そういったことが数珠繋ぎに起きて最初に止まったプロセスとはまったく関係なさそうなものまで止まってしまう。
止まった原因が決して解消しなければ、フリーズだが、単に時間がかかるだけなら、プチフリということになる。
なぜ長時間止まるのか?
端的に言ってしまうと、OS が最初に止まったプロセスにリソースを回さず、別のことを優先してしまっているから。
別のことって何?
他のプロセスが優先されてしまう場合もあるし、OSが窓口を閉めてたまった仕事を片付けている場合もある。他にもたぶんたくさんあるのだが、この2つで説明できるケースが多いのではないかと思う。
... とここまで書いてみたが、???な人は多いだろう。特にリソースという用語に引っかかるかも。わからなければ、逆説的に考えればよい。要するにプロセスが動くために必要ななにか。
そして、わからなくとも、気にしなくて良い。具体的なものについてほとんど触れていないから、意味のあることは、なにも言っていないに等しい。
この文章は、わかった気になるためのもの。たんなる前置き。
なぜ SSD でプチフリがしばしば起きるのか?
ここから先は具体的な話を書こうと思う。推測も多分に含むので大間違いであるかも知れない。決して鵜呑みにしないように。
SSD と ハードディスクの性能的な違いについて
SSD は、WRITE 80MB/sec とか高速なことが宣伝されている。それは事実だがあくまで 大きなファイルを WRITE する場合の性能で、小さなファイルをランダムに WRITE すると極端に性能が悪くなる。
CristalDiskMark でいうと、ハードディスクは 4KB のランダム READ は、0.5 MB/sec ぐらいで、WRITE は、1.5 MB/sec ぐらい。
READ は、要求されてから読みにいくので遅いが、WRITE はいったん受け付けてから、バックグラウンドで ディスクに書くので装置の性能がフルに出る。ちなみに、このベンチマークでは、READ は遅くみえるが、READ するプロセスが沢山あればたぶん WRITE 並みかそれ以上の性能になる。
それに対して たとえば eeePC 701SD-X の性能は、READ では、6 MB/sec と高速だが WRITE では 0.02 MB/sec と非常に遅い。READ では 10 倍速いのに WRITE は 1/100 のオーダなのだ。
高速なSSD は、この弱点に対して、いろいろな対策をしている。その1つは、複数の要求を受け付けて内部の FLASH を並列に動作させること。SATA2 のコマンドキューイングの機能かWRITEBACK キャッシュがあれば装置の性能をフルに出せる。...といっても 4 並列にしたところで 0.02 MB/sec の 4 倍前後のはず。キャッシュによって、2.0 MB/sec とか見かけの性能がよくなるものがあるが、装置自体の性能はそれほどでもない。
WRITE が遅いこととプチフリとの関係
これについては、Windows XP の処理の仕方が大きくかかわってくる。しかもどのような処理なのかについて一般の人が知ることはできない。
では、まったく分からないかというとそうでもない。どのような振る舞いなのかについて定量的に測定できるし、その結果から処理を推測することぐらいはできる。
細かいことを書くと分量が増えてしまうので、ここでは簡単に推測を書くだけにしようと思う。
ファイルへの WRITE は、OS が持っている WRITEBACK キャッシュにいったん書かれ、バックグラウンドで ディスクに書かれる。
キャッシュへの書き込みは、メモリの速度が上限だからものすごく速い。GB/sec のオーダだと考えてもらって良い。この調子で 要求を受け付けると、ディスクとの性能差の分だけ、キャッシュが溜まっていく。キャッシュは有限だから誰かが調整して WRITE をわざと遅くしなければならない。
この調整は非常に難しい。SSD だと、大きなファイルのデータは 80MB/sec とか高速に掃き出せるのに、小さなファイルのデータは、せいぜい 0.1 MB/sec でしか掃きだせない。普通キャッシュは量だけで管理されているので、一定量のキャッシュを吐き出すのにどれぐらいの時間がかかるのか、さっぱりわからないことになる。
たぶん 0.1 秒で済むと考えて設計されてたキャッシュの掃きだしが、10 秒かかってしまうといったことが起きているのではないかと思う。
XP が遅いのは、それだけが理由ではない。どうも ちょっとした処理で WRITE が結構発生しているようだ。
なぜそうなっているかは、推測すらできないが、現象を観測することはできる。
コントロールパネル⇒管理ツールに「パフォーマンス」というツールがある。これを使うと、ディスクの負荷をみることができ、ログも取れる。
システムモニタの+(追加)アイコンで、いろんな情報を見ることができるのだが、PhysicalDisk の項目を紹介しておく。
- % Disk Write Time
選択したディスク ドライブが書き込み要求を処理していてビジー状態にあった経過時間の割合をパーセントで表示します。
まずは、このビジー率をチェック、プチフリ状態なら普通 100 % に張り付いている。
- Avg. Disk Bytes/Write
書き込み操作中にディスクに転送されたバイト数の平均値です。
つぎに、小サイズの I/O が出ているのかどうか確認しておく。
- Disk Write Bytes/sec
書き込み操作中にディスクにバイトが転送される速度です。
やまのような項目があるが、この3つをまずは押さえておけば良いと思う。
おわりに
手引きのつもりで、分かりやすく書こうとおもったら、こんな分量になってしまった。これでもはしょりスギで省略した部分が多く、逆にわからない人もいるかも。
それに加えて、この文章は適当に気楽に書いている。嘘とか思い違いがあるかも知れない。
なにはともあれ、興味を持ったなら、自分でもっと深く調べてみて欲しい。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SHD-DI9M16G ポチッた。
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 12/26/2008 15:25:58
-----
BODY:
16GB のほうの性能の情報が 2ch で出てた。
120 名前:[Fn]+[名無しさん][sage] 投稿日:2008/12/19(金) 01:58:57 ID:GwP3+hoz
SHD-DI9を導入した人、速度はどんな具合?
俺は16GBを入れて、Cドライブにし、こんな感じ。
--------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 70.621 MB/s
Sequential Write : 19.293 MB/s
Random Read 512KB : 69.835 MB/s
Random Write 512KB : 6.158 MB/s
Random Read 4KB : 10.181 MB/s
Random Write 4KB : 0.051 MB/s
Test Size : 100 MB
Date : 2008/12/19 1:44:19
Eee PC 901-X+SHD-DI9M32G システムドライブ編を見ると、32G に比べて遅いわけではないようだから、即効決断。
16GB は人気がないらしく、amazonで 3808円 即納だった。
オリジナルと比べると
オリジナル SHD-DI9M16G
Sequential Read : 38.218 MB/s → 70.621 MB/s
Sequential Write : 6.959 MB/s → 19.293 MB/s
Random Read 512KB : 37.929 MB/s → 69.835 MB/s
Random Write 512KB : 1.819 MB/s → 6.158 MB/s
Random Read 4KB : 6.624 MB/s → 10.181 MB/s
Random Write 4KB : 0.020 MB/s → 0.051 MB/s
read で 2倍弱 。Write で 2倍強 。2 倍というのは大きいが快適になるのかというと少々疑問。
購入後、自分で調べてみたところ、Read 系は同じだが、Write 系が随分違った。NTFS の C: ドライブは、Sequential Write で 12MB/sec ぐらい。Random Write は 0.040 MB/sec ぐらいだった。
ところが、FAT32 の D: ドライブは、Sequential Write で30MB/sec近く出る。Random Write は 0.060 以上 。
SHD-DI9M16G が到着した。FLASH チップは、ちゃんと 4 つ。---これなら 32G に速度が劣ることはなさそう。
まずは、電源を切りバッテリーをはずして、さっそく、装着.... といいたいのだが、701SD-X はロング基板。なにか工夫しないと固定できない。
とりあえず ... 床キズ防止 EVA というのをダイソーで買ってきて、SSD 基板の表裏に貼ることによって、本体の蓋で押さえつけるようにした。それだけでは不安なので、抜け防止に詰め物も作ることにした。
これで改造もなにもせず、電源を入れてみた。... BIOS でちゃんと認識した。701SD-X は SSD が1つしか付かないから 面倒はないようだ。
次に、puppy linux を使って、インストール
1. grub4dos の grldr.mbr の書き込み
2. fdisk でパーティション作成 -- Windows を同じサイズで作る。efi はなし。性能測定用に 仮にDドライブを作成。
3. ntfsclone で作っておいたバックアップをリストア。
4. mount して、grldr と 作っておいた menu.lst をコピー。
こんなかんじ。
これで、まったく問題なく立ち上がってきた。
最初に休止のテスト。これが遅いと買った意味が相当に損なわれてしまう。
... Aspire One と比べて若干時間がかかる程度になった。再開は、むしろ速いかも。これなら常用できそうだ。
もう少し詳しく書くと、休止の準備中という状態が若干長い。その後のプログレスの進行具合は、わずかに遅いという感じ。(ただし、Aspire One 1.5GB / 701SD-X 1.0GB )
その他 SSD に関するメモ1
C: ドライブを FAT32 で作ると 快適になるらしい。ただし、C: は小さなファイルが多いので、アロケーションサイズを 8KB ぐらいにしないとスペース効率が悪くなる(= 空きが減る!)。
FAT32 で作る方法のひとつは、再インストール。
その他の方法は ... 知らない。puppy で
1. tar でバックアップを取る。
2. FAT32 で再度フォーマット
3. tar でリストア
で良さそうなものだが... オマジナイが足りないのでブートしないのではないかと思う。
ひょっとしたら、Parted Magicでなんとかなるかも知れない。全然知らないしあてずっぽうだが。
追記:はずれ -- 全然違った。puppy のカスタマイズ版みたいな感じ。gparted の新しいバージョンが入っていたが、FAT32 にするなんて特殊な機能はなかった。
それとは関係ないが、SSD 自体に暗号化機能がない。
これでは紛失したとき怖いので、TrueCryptを導入したいのだが... C: ドライブ全体を暗号化すると、動作が遅くなるだけではなく、休止が使えない。
で、ググってみると、TCGINAとTrueCryptで暗号化したユーザープロファイルを運用するなんてページを発見。
いいかも。
ひょっとすると... ユーザープロファイルやらキャッシュを 暗号化ボリュームに移すこと自体が、プチフリ対策になるかも知れない。前に調べたところでは、TrueCrypt は書き込みをバッファリングしている。そのため小さいファイルに限れば、見かけの Write 性能が上がる。もっとも、実際やってみたわけではないので、JMicron のように見かけだけ速くなるのかも知れないが...
実際にやってみたところ、4K Random Write は、同程度だった。ちなみに、その他の性能は(当然だが)だいぶ下がる。701SD-X(Power Saving Mode)の場合、19MB/sec で頭打ち。
要するに見かけさえ速くならない。たぶん遅くなることもないから、プチフリと無関係ということか。ひょっとしなかった...残念。
その他 SSD に関するメモ2
eeePC 901-16G の SSD は (プチフリで有名な)JMicron で、シーケンシャルは、SHD-DI9M16G よりさらに高速。たぶん ランダム I/O も 多くの場合で高速なのだろう。
SaruTek で、Runcore製 SSDを扱っている。これもまた、JMicron らしい。新しそうな mini9 用が気になるが、ちょっと高い。
JMicron は、プチフリなど問題も指摘されているが、多数出回っていてSSDのモニタリング・寿命予測が可能なフリーソフト「JSMonitor」なんてものまである。
どうせ遊び用だから、むしろこっちの方が楽しいかも。
その他 SSD に関するメモ3 --- レジストリいじり
自動デフラグを無効にする
SSD では 自動デフラグは迷惑な機能。無効にしたほうが良さそう。
NTFSの最終アクセス日時の更新を無効にする
最終アクセス日時を調べることで、その最終アクセス日時自体が更新されてしまうので、特殊な使い方をする場合のみ役に立つ機能。
普通は無駄。
ファイルにアクセスしただけで、SSD が更新されることになるので、無効にしたほうが良さそう。
Prefetchを無効にする
SSD は、ランダム READ が速いので、無効で良さそう。
MS-DOSの“8.3形式”ファイル名の自動生成をやめる
普通はファイルを生成するとき、(互換性のために)ロングファイルネームと 8.3 形式の2つの情報を作る。FAT などでは、領域が少々大きくなるだけだが、NTFS は、インデックスを作るのでランダムに近い書き込みが増えることになる。
8.3 形式しか扱えないようなソフトを使っているのでない限り、ロングファイルネームだけで良いと思う。
インデックスを作らない設定は、ディスクのプロパティで簡単にできるが、オープンのときの検索が遅くなるのも嫌なので、まずはこれを試してみようと思う。
ついでに --- 【Q&A】IE 7の自動インストールを防ぐには?
FireFox などを常用するなら、IE 7 を入れたくないはず。クリアインストールしたら、レジストリをいじるついでに。
付録:
以下の部分をコピペして、reg という拡張子でファイルを生成し、実行すれば、上で説明した変更が反映される。
... といっても内容について責任を持たないので、"" で括られているキーワードでググるなりして、自分自身で確認のこと。
--- ここから
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisableLastAccessUpdate"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisable8dot3NameCreation"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OptimalLayout]
"EnableAutoLayout"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]
"EnablePrefetcher"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0]
"DoNotAllowIE70"=dword:00000001
--- ここまで
その他 SSD に関するメモ4 --- ランダム Write を高速化
SSD でのプチフリの元凶 -- ランダム Write が遅いこと -- を改善できるソフトがある(らしい : 未確認)
それは、Windows SteadyState
本来、図書館とか学校とかで、ユーザの変更をリブートでチャラにするもの。MicroSoft が Windows のおまけとしてただで出している。
なぜ高速化に関係あるのかというと...
(なんであれ)書き込みを(できるだけ)シーケンシャルに書いて、どこに書いたかを(たぶんメモリに)覚えておくから。
こだわりのMONO: SSDのプチフリ改善策というページのリンク(英文)に解説がある。
→ http://www.ocztechnologyforum.com/forum/showthread.php?t=47183
1. まず SteadyState をインストールする前にデータ用パーティションを用意すべし。
2. Windows SteadyState をダウンロードせよ
3. Steady State Handbook もダウンロードして、できればちゃんと読め。
4-5. Windows SteadyState をインストールして実行せよ
6. コンピュータの制限をすべて解除せよ (ただし、セキュリティを意識するなら、‘LAN Manager Hash’ のところをマークしとけ)
7. ‘ハードディスクの保護’を オンにせよ(再起動になって、いったんキャッシュファイルを作る)
8. 再度 Windows SteadyState を実行し、‘すべての変更を永続的に保持する’設定にせよ
まぁこんなことが書いてあるようだ。
RAMDISK を使う方法とか、EWF とかより、インストールのリスクが少ないような気がするので、試してみたい。
追記:試してみた
まず、‘ハードディスクの保護’を オンにするためには、空きが 4GB 以上必要。(その後 キャッシュファイルのサイズを 、2GB 〜 もとの空き容量の 1/2 の間で変更できる)
残念なことに、休止用ファイルが 1GB あって空きが足らなかったので、休止自体を外す必要があった。
それはともかく、ランダム Write が速くなるか? ... というと確かに速くなった... のだが、FAT と同じ性能。どうも、まっさらのファイルシステムを上にかぶせたようなものっぽい。
ちょっと期待しすぎた。... 空きも厳しいし ... とりあえずパスかな。
実は、こだわりのMONO: SSDのプチフリ改善策の先に SSDのランダムライトを高速化するソフト"MFT"を試してみた という記事のリンクがある。
読んでみると、"MFT" というのは、どうも Copy-On-Write 仮想DISK ドライバ製品(最安ライセンスで 125ドル)らしく、ランダム Write が 格段に高速になるようだ。
ただ、値段が高いのと、システムドライブへのインストールが(現時点で)未対応なのが残念。
まぁ、本命として SanDiskの「ExtremeFFS」か、Windows 7のSSD対応 に期待ってところか。
追記: 2009/1/9:
「ExtremeFFS」を採用したSSD「C25-G3」が正式発表だそうです。値段は、60GBモデルが149ドル(約1万3600円)だそうで、手が届きそう。
--- でも実際の発売は、2009年夏ごろ。まだまだ先というかんじ。
一方、「Windows 7」のベータ版、日本では1月13日からダウンロード可能 だそうで。
--- 楽しみなのだけれども、SSD 対応以外興味ないし 、 メモリ 1GB の 701SD-X でモッサリしか動かなかったら 即効パスかなぁ。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: grub4dos の MBR を書くソフト
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 01/07/2009 21:19:31
-----
BODY:
grub4dos の MBR を書くソフトをお勉強を兼ねてちょろっと作ってみた。
最初のバージョン
→ http://www.nmj.sumomo.ne.jp/arc/grldrmbr-0.1.zip
チェックを追加して少しでも安全にしようとしたもの
→ http://www.nmj.sumomo.ne.jp/arc/grldrmbr-0.2.zip
Linux でビルドできるようにしたもの
→ http://www.nmj.sumomo.ne.jp/arc/grldrmbr-0.3.zip
grun4dos は、このブログお勧めのブートローダ。なのだが... 肝心のインストールの方法がいまいち。
Linux なら簡単なんだが... みたいにお茶を濁していたのが気になっていたので、とりあえずはインストールできるものを(コンソールアプリだが)作ってみた。
上のソフトを使えば、Windows から USB メモリなどに MBRを書き込めて、eeePC や Aspire One で grub4dos を 気軽に 試すことができるようになる。(ただし、C: ドライブは無理。USB メモリにインストールした puppy linux とかでやるべし )
使用例:puppy linux を例に
用意するもの
手順:
これで、USB メモリからブートするようになる。USB メモリに 必要なファイルは、全部で 8 つのみ。( そのうち grldr.mbr と grldrmbr.exe はインストール後 削除して良い )
注意)grldrmbr.exe を使う場合は慎重に。ミスすると たいへんなことになったりする。インストール後は削除することを推奨する。
なお、私はなにも保証しない。使う場合は、自己責任で
おまけ:
MBR をバックアップするだけなら、dd コマンドが使える。dd には複数あるが、一応 dd for Windowsの簡単な使い方あたりが参考になると思う。
それとは別に、WINAVR (AVR の開発キット) にも 結構ツールが入っていて dd.exe も含まれている。MinGW+MSYS+WINAVRの例だと、
dd if=//./c: of=mbr.bak count=1
とかで MBR をバックアップできたりするようだ。ただし書き込みは e: などでもダメ。
puppy linux で Windows のバックアップ
puppy linux で何ができるの? といわれたら、なにはともあれこれ。もちろん他にもいろいろできるが、このためだけに使ったとしても便利。
ちょっと手順を書いておく。
Windows での準備:
1) まずはデフラグ。この機会にやっておくと良いと思う。
2)休止の OFF 。コントロールパネル→電源オプション→休止状態で 無効にすると、メモリサイズと同じ大きさの hiberfil.sys が消える。バックアップファイルが小さくなるので、お勧め。
バックアップが終わったら元に戻せばよい。
3)ページングファイルの削除。コントロールパネル→システム→詳細設定→パフォーマンス→詳細設定→仮想メモリで、ページングファイルなしにする。これもバックアップファイルを小さくするためにお勧め。
追記:1)の前に ...
システム→システムの復元→設定 で、いったん最小にしてもとに戻すと空きが増えバックアップファイルを小さくできる。復元ポイントが減るはずだが、安定している状態をバックアップすることにしていれば問題ないはず。
puppy linux でのバックアップ
端末を立ち上げて
ntfsclone -s -o - /dev/sda1 | grep --fast > バックアップファイル名
注1) /dev/sda1 が puppy では たぶん Windows の システム。
一度は確認すべし。
注2)Disk のマークをクリックしたりしてマウントした状態で バックアップを取ってはいけない。アンマウントすること。
リストアする場合は、
gunzip < バックアップファイル名 | ntfsclone -r -O /dev/sda1 -
注1)環境にもよるが、私の環境だと、バックアップファイルのサイズは、1.7GB 。4GB までなら FAT に置けるが、それ以上は無理なので、NTFS のデータ用 ディスクを用意するべし。
ちなみに、NTFS でフォーマットした USB メモリでも、grub4dos + puppy linux は同じようにインストールできる。詳しくはググるべし。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: FireFox3とTrueCrypt
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 01/13/2009 06:09:52
-----
BODY:
万が一のために、C:Documents and Settings を暗号化したいと思っていたのだが.... なんか面倒そうだし、失敗するとやばそうなので躊躇していた。
他の方法がないかと考えていたのだが、自分の使い方では、パスワードなど個人情報が含まれているのは、FireFox3 のプロファイルだけ。
それで、FireFox3 関係を探してみたら、”Firefox3 の プロファイルディレクトリを移動させる方法”なんてページが見つかった。
けっこうややこしいことが書いてあるが、
- 1. "C:Doocuments and Settings\ユーザ名\Apprication Data \Mozilla\Firefox\Profiles\xxxxxxxx.default" を移動させたいディレクトリに丸ごとコピー
- 2. ファイル名を指定して実行 で、"firefox -p" を実行して、プロファイルマネージャーを起動。
- 3. 新しいプロファイルを作成し、コピーしたディレクトリを指定
- 4. 動作が確認できたら、前のプロファイルを(プロファイルマネージャーで、すべて)削除
という手順でOKだった。私の環境(ver 3.0.5)だとなにも編集する必要はなかった。
この機能を使って、プロファイルをTrueCrypt の暗号化ボリュームに移動させれば、結構安心。マシンやバックアップデータを紛失しても、(見合わないほどの)相当な労力をかけないと、個人データにはアクセスできないはず。
あとは、いつボリュームをマウントするかの設定。
- TrueCrypt の設定で、”ログオン時にお気に入りのボリュームをマウント”するようにして、自動アンマウントは、ログオフしたときだけにする。あと、強制的にアンマウントもすべきではない。FireFox終了忘れのときはダイアログが出るので、FireFox を先に終了させるべき。
- ユーザにパスワードを設定して、電源オプション→詳細設定で、サスペンドからの回復時にパスワードを求める
これで、だいぶ堅牢になると思う。サスペンドしながら使い続けても、個人データを盗むのは難しいはず。
ただし、休止については実はリスクがある。メモリの内容をダンプしているので、中身を丹念に調べられたらなにか出てきてしまうかも知れない。
おなじ理由でページングファイルもリスクがある。
注意:ここで書いたのは、紛失時の対策。ウィルスにはなんの効果もないので誤解なきよう。念のため。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: qemu-img.exe を MinGW でビルドしてみた
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: プログラミング
DATE: 01/19/2009 02:37:23
-----
BODY:
qemu-img.exe といえば VMwarePlayer の 仮想ディスクファイル(vmdk)を生成するツールとして知っている人もいるかもしれない。
それをビルドするのに必要なファイルだけ集めて MinGW で make 一発でできるようにしてみた。
→ http://nmj.sumomo.ne.jp/arc/qemu-qcow2-0.9.1.tgz
(ただし、これはまだ動作確認をしていない。)
実は、qemu-img.exe に必要なソースには、仮想ディスクファイルにアクセスするための機能がすべて含まれている。
それを使って、仮想ディスクドライバを作れないかと思っていて、整理するために、これを作ってみた。
qcow2 が名前に含まれているように関心があるのは、qcow2 フォーマット。Copy-On-Write 機能を持っていて、ランダムライトをうまいこと シーケンシャルにしてくれるかも知れない。
そううまくいかなくとも、仮想ディスクファイルの中身を見れるのは便利そうだ。
ベースにしたのは、qemu(ver 0.9.1) とそれに必要な zlib(ver 1.2.3)。
これをベースに必要なものだけ取り出している。いまのところソースコードを変更する必要はなかった。オリジナルに変更があっても楽に追従できるはず。
ちなみに、Linux だと、4GB 以上のファイルも扱えるが、Windows では、4GB 以下のファイルしか扱えない。ソースを見ると block-raw-win32.c が 32bit しかサポートしていないためらしい。
なんかちょっといじるだけで、64bit 対応にできるように思う。
さて、これをどうやって ディスクドライバーにするのか?
まず Linux の場合、cowloop というものがある。block device ドライバインターフェイス と ファイルアクセスの方法はこれを参考にすればよいはず。
Windows は? ちょっと勉強とか試行錯誤が必要。ひょっとしたらら MinGW では無理という結果になるかも知れない。
とりあえず、vfdをビルドしてみて改造のベースにしてみる予定。わかってきたら TrueCryptのソースを見ていくつもり。
(追記)
続きは、filedisk を MinGW でビルド (wk002)と qcow2 仮想 DISK ドライバ化 Todo (1)。
だいぶ分かってきて、MinGW で動作する filedisk.sys をビルドすることが出来た。今は、qcow2 を filedisk.sys に組み込む作業中。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: vfd を MinGW でビルドしてみた。
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: プログラミング
DATE: 01/19/2009 03:16:56
-----
BODY:
vfdは、ソースコードを公開している 仮想フロッピードライバ。
本来は、MicroSoft が出している DDK (ドライバ開発キット)と Visual C++ が必要なわけだが ... MinGW だけでなんとかならないかやってみた。
なお、対象としているのは、w32api-3.11.tar.gz 。/mingw/installed.ini を確認のこと。
0) ソース集め
とりあえず ドライバをビルドしたいだけなので、inc と sys のファイルを集めてきた。
あと MinGW だと 改行は、CR+LF ではなく、LFなので、全部変換。
1) imports.h の編集
vfd では、いろいろな バージョンの DDK に対応するために、ntverp.h をインクルードして、古いバージョンだと ddk のインクルードを使用せずに自前のものを使用するようになっている。
MinGWでは、ntverp.h がないので、インクルードしないようにして、あとの部分はすなおに ddk をインクルードするように変更。
ntifs.h も MinGW で存在するので、ntifs.h 相当分もコメント。
あと、#pragma も gcc とは関係ないのでコメント。
これで結構コンパイルが通る。足りない define が
RTL_REGISTRY_OPTIONAL
IOCTL_DISK_EJECT_MEDIA
の 2 つ。
RTL_REGISTRY_OPTIONAL に関しては、ググるとどうも 0x80000000 らしいので、imports.h で define 。
IOCTL_DISK_EJECT_MEDIA は、参照しているソースをコメント。
この 2 つの対応で コンパイルは通ってしまった。
さて、これをどうやってリンクするのだろう?
ググってみると、MinGW cross-compilation adventure.が参考になるとのこと。
とりあえず gcc の リンクオプションは、
-shared -Wl,--entry,_DriverEntry@8 -nostartfiles -nostdlib -lntoskrnl -lhal -lndis
らしい。実際にやってみると .. いくつかのシンボルが undefined になった。
2) undefined シンボルの対処(1)
まず対処したのは、
SeCreateClientSecurity
vfddrv.h に
PSECURITY_CLIENT_CONTEXT SecurityContext;
というのがある。コメントを見ると network drive 上のファイルにアクセスするときの対応らしい。
基本的な動作には関係なさそうなので、SecurityContext 自体を コメントして、それを使っている C ソースを全部コメント。
3) undefined シンボルの対処(2)
上の対処をすると、undefined は 1つのみになる。
PsRevertToSelf
乱暴だがとりあえずコメント。
とても動くことは期待できないのだが、以上で、とにもかくにも sys ファイルを生成できた。
→ http://nmj.sumomo.ne.jp/arc/vfd21mingw-001.tgz
(追記)
vfd はとりあえず保留。→ filedisk を MinGW でビルド (wk002) こっちに移行。
filedisk は動作したので、vfd も同じようにすれば OK のはず。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: qcow2 仮想 DISK ドライバ化 Todo (1)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: プログラミング
DATE: 01/19/2009 08:02:39
-----
BODY:
ちょっと vfd の オブジェクトに qemu の オブジェクトをくっつけて リンクしてみた。
少なくとも Linux のカーネルドライバでは ほとんどの libc 相当の関数はそのままは使えない。Windows でも 事情は同じだろう。当然ながら、多くの undefined シンボルが出てきた。あまりに多いので整理。
zlib :
malloc
free
こういう基本的な関数も ドライバでそのまま使ってはいけない。
qemu_malloc / qemu_free を定義して、それを使うように修正が必要。
libgcc :
__divdi3
__moddi3
__udivdi3
__umoddi3
_alloca
gcc が勝手に出力する関数で、libgcc に実体がある。
さすがに -lgcc をつけても大丈夫のような気がするが ... どうなのだろう?
qemu-img:
( 正確には、qemu-img.exe に必要な オブジェクト - qemu-img.o )
1)大文字で始まる win32 API の ファイル操作系 17 関数
これは使ってはダメなのか? ... ダメそうな気がするが TrueCrypt はいったいどうやっているのだろう? 要チェックだ。
2)qemu_ 関数 4 つ (と変更すべき メモリ系関数)
qemu_free
qemu_malloc
qemu_mallocz
qemu_strdup
free
malloc
(realloc)
calloc
(strdup)
これは使う側で用意することになっている。
3)libc系 関数
open, close, read, write,_lseeki64
(mkdir), (rmdir), unlink, (rename), stat
(_errno) ,_fullpath, (strerror)
_get_osfhandle, fprintf, (fwrite),
(opendir), (closedir), (readdir)
localtime, time
toupper, tolower, lstrlenA, strftime, sscanf, snprintf,
_assert
() は機能を落とすことで減らせるもの。
... これら全部なんとかしないと ...
なかなか先は長そうだ。
メモ : Linux カーネル関数について
toupper, tolower, sscanf, snprintf はカーネル内で用意されているので普通に使える。
時刻関係は、do_gettimeofday が使える。
open/close は、filp_open/filp_close ?
seek+read/seek+write は、vfs_readv/vfs_writev ?
malloc/free は、kmalloc/kfree
zlib もカーネルに存在する。(zlib_ プレフィックスが付く )
もちろん カーネルモードなので、使用には十分な注意が必要。
メモ : Windows カーネル関数について
open/close は、ZwCreateFile/ZwClose
seek+read/seek+write は、ZwReadFile/ZwWriteFile
_snwprintf がある。
時刻関係は、KeQuerySystemTime らしい。
ZwAllocateVirtualMemory/ZwFreeVirtualMemory ?
物理メモリ?は、MmAllocateContiguousMemory とか?
→ crosscrypt を見ると ExAllocatePool(NonPagedPool, ..) / ExFree() を使っていた。
filedisk の方が ビルドできたので、qcow2 を再考してみる。
まず、zlib .. malloc/free を使っているが、無理やり qemu_malloc/qemu_free に変更してしまうことにする。
で、本体。まず、いろいろなドライバをサポートしているが、とりあえず興味がある block-qcow2 のみにしてしまうことにする。
で、block-qcow2.c を見てみると、フォーマットする関数が 組み込まれている(qcow_create)。この関数の中で open/read/write/close している。ドライバの中でフォーマットする機能を持たなくとも良いことにして、全部切ってしまうことにする。
さて、上位関数である block.c を見ると、BDRV_O_SNAPSHOT が指定されると、元ファイルを変更せずに、テンポラリファイルを使うようになる。このテンポラリファイルで、create の機能を使うので、サポートするのは無理。BDRV_O_SNAPSHOT 関係は全部削る。
あと、block.c とか cutils.c に含まれる共通関数で使っていないものは削る。( block.c:set_temp_filename とか cutils.c:mktimegm とか )
まず必要な C のソースは、
aes.c block.c block-cow2.c cutils.c + zlib
ということにして、コンパイルし、
ld -o a.o -r aes.o block.o block-cow2.o cutils.o zlib-1.2.3/libz.a
として、a.o の undefined を見てみると
U ___divdi3 (libgcc)
U __assert (どうしよう)
U _bdrv_host_device (block-raw-ddk.c )
U _bdrv_raw (block-raw-ddk.c )
U _memcpy (ntoskrnl.lib)
U _memmove (ntoskrnl.lib)
U _memset (ntoskrnl.lib)
U _qemu_aio_wait (block-raw-ddk.c )
U _qemu_aio_wait_end (block-raw-ddk.c )
U _qemu_aio_wait_start (block-raw-ddk.c )
U _qemu_free (ExFreePool で実装 )
U _qemu_malloc (ExAllocatePool で実装)
U _qemu_mallocz (ExAllocatePool で実装)
U _qemu_strdup ( qemu-img.c から抜いてくる)
U _snprintf (__snprintf → ntoskrnl.lib)
U _strchr (ntoskrnl.lib)
U _strcmp (ntoskrnl.lib)
U _strlen (ntoskrnl.lib)
U _strrchr (ntoskrnl.lib)
U _strtoul (linux カーネルの lib から抜いてくる)
U _toupper (適当に作る)
随分と undefined が減った。だが、問題は、block-raw-ddk.c。
これが、ファイルの I/O 全部受け持つ。カーネルの流儀に従ったものを 新たに作成する必要がある。
block-raw-ddk.c では、BlockDriver という構造体に
raw_open
raw_close
raw_flush
raw_pread
raw_pwrite
raw_trucate
raw_getlength
raw_aio_read
raw_aio_write
raw_aio_cancel
のメソッドを実装して登録する。
これを block.c で wrap して、qcow2 の下位レベル I/O に使用sる。
qcow2 は、同じように BlockDriver という構造体に
qcow_probe
qcow_open
qcow_close
qcow_flush
qcow_is_allocated
qcow_set_key
qcow_make_empty
qcow_aio_read
qcow_aio_write
qcow_aio_cancel
qcow_write_compressed
qcow_snapshot_create
qcow_snapshot_goto
qcow_snapshot_delete
qcow_snapshot_list
qcow_get_info
といったメソッドを実装して登録している。
で、こういった実装を使って、カーネルのリクエストを組む。
要するに filedisk を 2 つに切って、上位から qemu block インターフェスに変換し、qemu block インターフェイスから カーネルの I/O 関数に変換するという 2 つのインターフェイス変換を作る必要がある。
なかなか面倒。
とりあえずここまで → http://nmj.sumomo.ne.jp/arc/filedisk-qcow2-wk001.tgz
(続き)
assert() だが、ddk の場合 ASSERT()を使うらしい。とりあえず使用しているところ aes.c block-qcow2.c を変更。
次に、filedisk.c で ZwCreateFile/ZwCloseFile/ZwReadFile/ZwWriteFile を call しているところを参考に block-raw-ddk.c を作成してみた。ZwCreateFile のところは手続きが難しい。
ZwCreateFile のところで truncate しているところがあったので、これも 実装。
今度は、逆に ZwCreateFile/ZwCloseFile/ZwReadFile/ZwWriteFile 周りを bdrv_file_open/bdrv_close/bdrv_pread/bdriv_pwrite で置き換えていく。
bdrv_file_open のファイル名は、都合により char * ではなく、ANSI_STRING という型になってしまった。
こんな風にでっちあげ。(動くはずはないが)ビルドは通るようになった。
とりあえずここまで → http://nmj.sumomo.ne.jp/arc/filedisk-qcow2-wk002.tgz
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 仮想DISKドライバとか ファイルシステムとか
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: プログラミング
DATE: 01/22/2009 16:02:16
-----
BODY:
TrueCrypt のソースをちょっと見てみたのだが、大きくてよく分からない。もっと基本的なものでソースコードがあるものがないか探してみたところ結構見つかった。
このあたりをビルドできるか見てみて、方針を決めようと思う。
ついでなので、ファイルシステム(Installable File System Driver :IFS)もいくつか発見。
基本的なことを知りたければ、EXT2IFS を見てみるのが良さそう。使うのなら、Ext2Fsd -- なのか? ちなみに、EXT2IFS 以外は、ext3 にも対応しているし、インストーラもある。
filedisk を MinGW でコンパイルしてみた。
crosscrypt を見ると、filedisk.h filedisk.c を使っていてベースにしているみたいなので、filedisk をコンパイルすることにした。
実際やってみると、vfd のときとほとんど同じところが引っかかる。具体的には、PSECURITY_CLIENT_CONTEXT と PsRevertToSelf 。あと、NtAdjustPrivilegesToken 関係。
同じような感じなら、ファイルを 仮想ディスクに見せるという基本機能の filedisk をベースにした方が良さそう。
というわけで、同じように ビルドだけはできるものを作ってみた。(ドライバのみ)
→ http://nmj.sumomo.ne.jp/arc/filedisk-wk001.tgz
あと、オリジナルをミラー
→ http://nmj.sumomo.ne.jp/arc/filedisk-14.zip
とりあえず、オリジナルの filedisk.sys と nm で比較 (__imp_ シンボルのみ )
mingw 版 (wk001) にだけあるもの
__imp__ExAllocatePool@8
__imp__ExInterlockedInsertTailList@12
__imp__ExInterlockedRemoveHeadList@8
__imp__MmMapLockedPagesSpecifyCache@24
__imp__memcpy
__imp__memset
オリジナルだけにあるもの
__imp_@ExfInterlockedInsertTailList@12
__imp_@ExfInterlockedRemoveHeadList@8
__imp__DbgPrint
__imp__ExAllocatePoolWithTag@12
__imp__KeGetCurrentIrql@0
__imp__MmMapLockedPages@8
__imp__PsRevertToSelf@0
__imp__RtlAssert@16
__imp__SeCreateClientSecurity@16
__imp__SeImpersonateClient@8
__imp__SeTokenType@4
両方にあるもの
__imp_@IofCompleteRequest@8
__imp_@ObfDereferenceObject@4
__imp__ExFreePool@4
__imp__IoCreateDevice@28
__imp__IoDeleteDevice@4
__imp__KeGetCurrentThread@0
__imp__KeInitializeEvent@12
__imp__KeInitializeSpinLock@4
__imp__KeSetEvent@12
__imp__KeSetPriorityThread@8
__imp__KeWaitForSingleObject@20
__imp__NtAdjustPrivilegesToken@24
__imp__ObReferenceObjectByHandle@24
__imp__PsCreateSystemThread@28
__imp__PsTerminateSystemThread@4
__imp__RtlAnsiStringToUnicodeString@12
__imp__RtlAppendUnicodeToString@8
__imp__RtlCopyUnicodeString@8
__imp__RtlFreeUnicodeString@4
__imp__RtlInitUnicodeString@8
__imp__RtlQueryRegistryValues@20
__imp__ZwClose@4
__imp__ZwCreateDirectoryObject@12
__imp__ZwCreateFile@44
__imp__ZwMakeTemporaryObject@4
__imp__ZwOpenProcessToken@12
__imp__ZwQueryInformationFile@20
__imp__ZwReadFile@36
__imp__ZwSetInformationFile@20
__imp__ZwWriteFile@36
__imp__swprintf
ついでに、ext2ifs-0.3-src.zip を MinGW でコンパイル。
ヘッダファイルの変更とか大分手馴れてきたのだが...
try except() finally
__try __execpt()
がない。自分で作るほどの知識もないし... 困った。
とりあえず、適当に define してコンパイルだけ通したところ
CcInitializeCacheMap@20
CcPinRead@24
CcUnpinData@4
FsRtlIsNtstatusExpected@4
IoCreateStreamFileObject@8
IoGetTopLevelIrp@0
IoIsOperationSynchronous@4
IoRegisterFileSystem@4
IoSetTopLevelIrp@4
の 9 個の undefined が出た。
とりあえず、ファイルシステム を 作ったり改造したりは考えていないので、メモだけして終わる。
とりあえずここまでのもの
→ http://nmj.sumomo.ne.jp/arc/ext2ifs-0.3-wk001.tgz
オリジナル バイナリとソースのミラー
→ http://nmj.sumomo.ne.jp/arc/ext2ifs-0.3.zip
→ http://nmj.sumomo.ne.jp/arc/ext2ifs-0.3-src.zip
追記:LibSEH - a Windows SEH compatibility library というのを発見。なにか参考になるかも。
追記: filedisk を使ってみた。
インストールは、割と簡単だった。
1. filedisk.sys を C:\WINDOWS\system32\drivers にコピー
2. filedisk.exe を C:\WINDOWS\system32 にコピー
3. filedisk.reg を実行してレジストリを設定
4. リブート
あとは、example.txt を参考に mount すれば、ローカルディスクとして、マイコンピュータで見えるので、フォーマットすればよい。
filedisk /mount 0 d:\test1.img 100M m:
- デフォルトでは、4 つの仮想 DISKをサポートしていて、0
は 1つ目を指定
- 新規仮想 DISK を作るときは、サイズを指定(今回は 100M)
2 回目からは、100M をはずす。
- 最後に ドライブレターを指定
filedisk /umount m:
- DISK をはずすときは、/umount + ドライブレターを指定
※) format は、ドライブのプロパティで普通にできる。
※)上記は、MSYS コンソールではダメで、コマンドプロプトを使用する必要がある
※)システム起動とかで自動的にマウントする機能はない。使用時に、filedisk /mount ... を実行する必要がある。
ちなみに、crosscrypt を見てみたら、filedisk.sys , filedisk.exe , filedisk.reg が同じようにある。インストールの方法も同じ。filedisk.reg の内容も同じで、filedisk.sys / filedisk.exe を置き換えるようだ。コマンドも上位互換。
- 実用として使うなら、crosscrypt を使えばよさそう。
さて、ここからが本題。最初のステップとして自分でビルドした filedisk.sys を試してみたいのだが、どうすればよいのだろう?
少なくとも、filedisk.reg を編集して、Start のところを 3 にして、マニュアル スタートにしないとやばいのは分かる。
それはやるとして .. マニュアル スタートはいったいどうやってやるのだろう?
どうも ServiWinを使えばよいらしい。
いよいよ ... 自分でビルドした filedisk.sys を実行する環境はできた。
だが、その前に 動くと期待できるものを試してみたい。
具体的には、MicroSoft の DDK から ntoskrnl.lib を取り出して、MinGW では、undefined になっていたシンボルを解決したバイナリを作りたい。
DDKの無料ダウンロードが開始されていた! の記事にある Windows Server 2003 SP1 DDK をダウンロードして、インストールして、lib/wxp/i386/ntoskrnl.lib を取り出して、-lntoskrnl の代わりに ファイル名を指定する。
これでできた filedisk.sys を WINDOWS/system32/drivers にコピーし、ServiWin でスタートすると ... 速攻青画面。
ちなみに、最初に作ったものも 青画面。
なにか足りないものがあるようだ。
ググっていくと、kqemu の Makefile が見つかった。動作しているものの Makefile だから信頼できるだろう。
これみると、コンパイルは普通で、リンクの仕方がこんな風になっている。
1) gcc -Wl,--base-file,base.tmp -Wl,--entry,_DriverEntry@8 \
-nostartfiles -nostdlib -o junk.tmp $(OBJECTS) \
-lntoskrnl -lhal
rm junk.tmp
2)dlltool --as=as --dllname $(TARGET) --base-file base.tmp \
--output-exp temp.exp
rm base.tmp
3)gcc -Wl,--subsystem,native -Wl,--image-base,0x10000 \
-Wl,--file-alignment,0x1000 \
-Wl,--section-alignment,0x1000 \
-Wl,--entry,_DriverEntry@8 -Wl,--stack,0x40000 \
-Wl,temp.exp \
-mdll -nostartfiles -nostdlib -o $(TARGET) \
$(OBJECTS) -lntoskrnl -lhal
rm temp.exp
2 つの 中間ファイルを作る全部で 3 ステップの手順。果たして必須なのだろうか? temp.exp がなんらかのチューニングのために必要だと想像。alignment も同じと考えると 足りないのは、
-Wl,--subsystem,native
-mdll
の 2つ。とりあえず -shared をはずして、これで試してみる。
ブルースクリーンは出なくなった! のだが、全然ダメ。ServiWin で開始すると、ServiWin が砂時計のままになる。
で、放置していた warning を見てみたら、外から呼び出される関数は全部 DDKAPI をつけなければならなかった。
あと、ヘッダーで _NTDDK_ が define されていることを期待しているところがあったので CFLAGS を修正。
で、これを 開始 しようとしたのだが、今度は 停止のまま状態が変わらなくなった。
進んでいる気がするが、まだまだみたい。なんとかしてデバックしていかないとこれ以上は進まない感じがする。
でググってたら、Windows Device Driver Programming Part 1、Part 2という解説ページを発見!
デバッグについても解説がある。ありがたや。
Windows Device Driver Programming Part 2にある。ex1.zip を試してみた。
- DebugView を立ち上げ、Capture → Capture Kernel をマークする。
- 付属の InstallDriver を立ち上げ kernel/ex1.sys をインストール → DebugView に以下が表示される。
00000007 129.96109009 DriverEntry Called
- user/ex1_user を実行 → DebugView に以下が表示される。
00000008 143.64530945 Example_Create Called
00000009 143.64535522 Example_IoControl Called
00000010 143.64537048 UserModeMessage = 'Hello from user mode!'
00000011 143.64537048 KernelModeMessage = 'Hello from kernel mode!'
00000012 143.64541626 Example_UnSupportedFunction Called
00000013 143.64541626 Example_Close Called
さて、どのように動くのか理解したところで、ビルドしてみる。
この修正で、コンパイルだけは Warning もなしにできるようになる。
つぎにリンク。
gcc -Wl,--subsystem,native -Wl,--image-base,0x10000 \
-Wl,--entry,_DriverEntry@8 \
-mdll -nostartfiles -nostdlib -o ex1.sys ex1.o \
-lntoskrnl
これで、Warning なしに ex1.sys ができてしまう。
さて、これを .. Install Driver でインストールしようとすると ..
00000000 0.00000000 SYSLDR: LdrRelocateImageWithBias() failed 0xc0000018
00000001 0.00000391 SYSLDR: OldBase : 00010000
00000002 0.00000670 SYSLDR: NewBase : A98D7000
00000003 0.00000922 SYSLDR: Diff : 0x0
00000004 0.00001201 SYSLDR: NextOffset : 00000000
00000005 0.00001425 SYSLDR: *NextOffset : 0x0
00000006 0.00001704 SYSLDR: SizeOfBlock : 0xa98d7000
なんていうメッセージが出て失敗する。
ちょっと、Linux の file で調べてみたら
ex1.sys.org: MS-DOS executable (EXE), OS/2 or MS Windows
ex1.sys: MS Windows PE 32-bit Intel 80386 native DLL not relocatable
ex1.o: 80386 COFF executable not stripped - version 30821
こんな違いが ...
リンクのオプションを
gcc -Wl,--subsystem,native -Wl,--image-base,0x10000 \
-Wl,--entry,_DriverEntry@8 \
-shared -nostartfiles -nostdlib -o ex1.sys ex1.o \
-lntoskrnl
と変更してみたところ ..
ex1.sys: MS Windows PE 32-bit Intel 80386 native DLL
となった。これを インストールしてみたら .. OK 。user/ex1_user でもメッセージが正しく出た!。
というわけで、filesys に戻る。
同じように、-mdll → -shared に変更したら、なんと動いた!
実は他にもいろいろ変更しているが、とりあえず動いた最初のもwのを filedisk-wk002.zipとして置いておく。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 701SD-X のバッテリー
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 01/26/2009 03:41:37
-----
BODY:
安いというだけで、701SD-X を買ってしまったのだが、結構気にいっている。
主な用途は、寝モバ。ふちが広いということは、持つところが多いということで 扱いやすい。タッチバッドも扱いやすく、操作ミスはほとんどしたことがない。(私の Aspire One は、左ボタンが変で 押し続けても ドラッグ途中で Off になって落としてしまうことがしばしば。個体差なのかも知れないが ぜんぜん使い物にならない)。
画面は 800 x 480 と狭いが、工夫すればなんとかなるものだ。そして、工夫すること自体が楽しかったりする。
900 g は Aspire One と 200 g しか違わないが比較すると軽さを感じる。あと、寝モバするときは、バッテリーをはずして使うこともある。この場合 700 g ぐらいになるはずで実際軽い。
電源を Off にしても USB に給電される。ちょっと大きい携帯バッテリーとしても使えるのだ。
あとは、SSD であること。SSD のマシンはこれしかもっていないので、SSD の メリット・デメリットを実感するための 唯一の環境。いろいろ実験したり楽しめている。
バッテリーも結構持つようだ。4 セルで 公称 3.7 時間だそうで、3 セルの Aspire One より持つ。
というわけで、妙に気に入ってしまったのだが、そうなるといつまで使えるのか気になってくる。特にバッテリー。バッテリーが高かったり、入手性が悪いなら、いっそのこと 予備機を買ってしまおうかと思ってしまう。
予備機について 次のような(とってもやばい)計算をしてしまうのだ。
本体価格 29500 円 - ( ポイント 20 %) = 23600 円
- バッテリーの価値 12000 円
- 30 G ハードディスクの価値 2000 円
- AC アダプタ の価値 2500 円
= 約 7000 円
これで、XP 付きバッテリなし マシンが手に入ると思えば、安いもの?
あるいは、さらに部品として考える。
保守用 キーボード 1000 円?
保守用 タッチパッド 1000 円?
保守用 液晶 5000 円?
実験用 SSD 8GB 1500 円?
無線LAN PCIe モジュール + アンテナ 1000 円?
512MB DDR2 メモリ 500 円?
部品代だけで元が取れるではないか? とか。
都合の良い考えばかり集めたもので、やばいのは分かっているのだが ... 実際のところ、分解とか改造とか好き勝手できるマシンは欲しいと思っていて、抗えなくなりつつ ...
というわけで、前置きがすごく長くなったが、バッテリーについて調べてみた。
本体のバッテリーには、AL22-703 という印刷がある。仕様は、7.4 V 4400 mAH 。あと、EEEPC701SD-BLK007X と書いたシールが貼ってある。
それを頼りにググったら、4400mah ASUS AL22-703 battery whiteというショップのページが見つかった。
それによると ...
ASUS AL22-703
Fit Models:
Asus EEE PC 701SD, 701SDX, 900a, 900HA, 900HD
Not fit : asus EEE PC 700 900 901 904 1000 1200 ALL series
だそうだ。
701SD-X はモデルとしては、701SD (-X は XP バージョン)。701SDX とは違う。すくなくとも発売されたばかりの 900HA と互換性があるようでちょっと安心。この900HAの記事を見ると、バッテリーの電圧も同じだし、写真でみる限り筐体もそっくり。たぶん大丈夫なのだろう。
あと、701 4G-X とは互換性がないらしい。形は同じなのに、コネクタの位置が違うらしい。
これぐらいわかったところで、互換バッテリーメーカのロワのページを見てみた。
じつは全然わからない。ひょっとしてこれ? A22-700B-C()
■対応機種:
ASUSTeK
Eee PC 4G-X
Eee PC 2G Surf (700)
Eee PC 4G Surf (701)
Eee PC 4G (701)
Eee PC 8G (701)
A22-701P
電圧は合っているし、写真をみるかぎり付属バッテリーと同じに見える。701SD-X は日本で発売されなかった 8G ではないかというのを見た覚えがあるが、互換性がないはずの 4G-X 対応になっている。バッテリーの型番もなんか違う。
あるいはこれ? A22-703-H-B
■対応機種:
ASUSTeK
EeePC 900-X (ブラック)
※純正型番A22-703に対応しています。
■電圧:7.2V
■容量:8800mAh
純正A22-703 とは何? AL22-703 の大容量(5400mAH)版? でも 電圧は 7.2 V だし .. 。8800mAH ってことは 8 セル。いくらバッテリーが持つといっても、相当不恰好な気がするし...。A22-703-L-Bってのもあるのだが、絶賛品切れ中。これは復活するのだろうか?
正直混乱している。900HA の情報が出るのを待つのが吉なのか? 900HA が売れてくれれば情報が沢山出てくるからうれしいのだが ... はたして人気が出るのだろうか?
一応宣伝しておこう。900HA は 2.5 inch DISK を簡単に交換できる タイプ。そのうえ701SD-X と同じ筐体。4セルにかかわらず、かなり小さく軽い。いじりたい人には結構良いのではないかと思う。
追記: ASUS の純正バッテリーは、EEEPCBATTERY4CELL2.6AH/1BLK というらしい。(これは 黒の型番)対応は、900-X/4G-X/4G-XU で、12000 円前後。
SD-X が入っていないのは何故? ひょっとして 900-X / 4G-X / 4G-XU 系列と 900HA / 900A / SD-X 系列があるということ?
ようやく分かったような気がしてきた。やはり 900HA に対応したバッテリを買えば良く、決して 900-X, 4G-X 用を買ってはいけない。
追記: 2009/03/18
701SD-X や 900A,900HA のバッテリー は、A22-703系 で良いらしい。
8セルの H タイプ は 8,379 円(税込、送料別)。純正と同じ 4 セルの L タイプは、4,599 円(税込、送料別)ただし 売り切れ。
予備マシンを買ってしまったので、いまはいらない。買うとすれば数年後か 。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: filedisk を MinGW でビルド (wk002)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: プログラミング
DATE: 01/29/2009 00:17:46
-----
BODY:
FileDiskという 仮想ディスクドライバーを MinGW でビルドしようと思い立ち ... 一応動作するところまでこぎつけた。
とりあえず 今の版を filedisk-wk002.zipとして置いておく。
これはあくまで、移植のサンプル。実用として使うなら、オリジナルもしくは、上位版の CrossCrypt を使うことをお勧めする。
ただ、FileDisk を使うなら、中にある fdsetup.exe を使うと、MSYS で使えるようになる。MSYS を常用しているなら fdsetup.exe は便利かも知れない。
移植のまとめ
Windows Device Driver Programming Part 1、Part 2 という解説ページが非常に参考になった。
デバッグに便利だったツールは、
- ServiWin --- ドライバーを開始したり停止したりできる。状態を見るためにも必須。
- DebugView --- DbgPrint だけが、MinGW でのデバッグ手段。メッセージをキャプチャーして表示するプログラムで必須。
- DIP.zip (↑ 解説ページより) --- ドライバーを Install したり Uninstall したりできるツール。reboot しなくて良いので便利。
(オリジナル DIP (Driver Install Program) は、Install するとサービスを自動でスタートするようになってきてテストには不向きなので、手動になるように手を入れたものを filedisk-wk002.zip に添付)
ソースコードの修正ポイント (コンパイルまで)
- MinGW では、/mingw/include/ddk に DDK 関連のインクルードファイルが集まっている。だいたいは揃っている。足りない define は、ググるなり、オリジナルの DDK のヘッダを見るなりして補う。
- カーネルから call される関数は DDKAPI の アトリビュートが必要。warning が出るので、対処する。
- define されていることが期待されているものがいくつかある模様。_NTDDK_ もたぶんその一つ。コンパイルオプションで明示的に define する。
リンク
- 成功したリンクオプションは以下のもの
-static
-Wl,--subsystem,native -Wl,--image-base,0x10000 \
-Wl,--entry,_DriverEntry@8
-nostartfiles -nostdlib -lntoskrnl
- ただし、足りないものがある。仕方がないので、オリジナルの DDK の ntoskrnl.lib から取り出す。
方法は、足りないものを call する stub0.o を作り、
ld -r -o stub.o stub0.o ntoskrnl.lib
ちなみに Windows Server 2003 DDK は、無償で ダウンロードできる。これをいったんインストールすれば、ntoskrnl.lib を取り出すことができる。
これをベースに何をしたいか
実をいうと、オリジナルの FILEDISK もかなり便利。ファイルを 仮想ディスクとして見せるだけでなく、-cd オプションをつけることにより、iso ファイルの マウントもできる。さらに、CrossCrypt になると暗号化もサポートしている。
それはそれで良いのだが、qemu 用の仮想ディスクフォーマットである qcow2 を 仮想ディスクに見せるものを(実験的にでも)作ってみたい。理由は copy-on-write の機能があるので、ランダムな Write を 再配置して性能を上げられるかも知れないから。暗号化もできるし、スナップショットも作れるので、便利で高速なものになるかも知れない。
というわけで、filedisk を qcow2 とくっつけてみようと思う。
メモ: filedisk の構造
DDKAPI をつけた関数は全部で 6個それらについて簡単に
DriveEntry() -- ドライバの初期化関数 (以下の関数を登録)
FileDiskCreateClose() -- Create/Close 共通関数
( 実はなにもしない )
FileDiskReadWrite() -- Read/Write 共通関数
(I/O スレッドに投げる)
FileDiskDeviceControl() -- ioctl (これも I/O スレッドに投げる)
FileDiskUnload() -- 終了関数
FileDiskThread() -- I/O スレッド
(キューイングされたリクエストを順番に処理)
IRP_MJ_READ:
buffer をアロケート( ExAllocatePool(PagedPool,))
ZwReadFile (同期 read )
buffer をコピー
buffer を 開放 (ExFreePool)
IRP_MJ_WRITE:
ZwWriteFile
IRP_MJ_DEVICE_CONTROL:
OCTL_FILE_DISK_OPEN_FILE:
ZwCreateFile()
IOCTL_FILE_DISK_CLOSE_FILE:
ZwClose()
FileDiskThread がほぼすべての処理をする。処理をする際は、キューから取り出して、同期 Read/Write を行う。
非同期の要素がなく、非常に簡単な構造。せめて、Write のバッファリングぐらいしたいもの。IRP_MJ_FLUSH_BUFFERS というのがあるから、それで バッファリングしたデータを書くようにすれば良いのだろう。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SuperTalentのSSDモジュール
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 01/29/2009 09:23:03
-----
BODY:
SATA タイプの SSD モジュールが出るそうです。コントローラは、JMF601 。
MLC Read 90MB/sec Write 55MB/sec (1年保証)
16GB FPM16GRSE
32GB FPM32GRSE
64GB FPM64GRSE
SLC Read 95MB/sec Write 90MB/sec (3年保証)
16GB FPD16GRSE
32GB FPD32GRSE
だそうです。値段も MLC 64GB で 15000 円ぐらいらしいので、バッファローの SHD-DI9M と同じレンジ?
ひょっとしたら BIOS をアップデートすることで、701SD-Xでも使えるかも。
ASUS のダウンロードから選択していくと、701SD-X の最新 BIOS ( バージョン 0602 ) が落とせますが、説明に、Support SATA SSD なんて書いてあります。
いままで、BIOS アップデートを躊躇していたのですが、現在のバージョン (0501) をバックアップして 0602 に アップデートして発売を待つことにしました。
補足:
JMF601 というのは、いわゆるプチフリする SSD のコントローラで有名です。が、eeePC の SSD モジュールとしては最速。
Runcore なども採用していますが、SATA - IDE 変換で IDE インターフェイスになっています。
SATA のモジュールは、eeePC 900-16Gなどの 付属 SSD でしか採用されておらず、 いままで 入手が困難だったのです。
追記: 2009/2/20
なかなか出てきませんね。ちょっと 他に SATA タイプがないか調査。
RunCore は、SATA タイプを出しているようです。
あるところでは、こんな感じ
MLC Read 125MB/sec Write 55MB/sec (2年保証)
16GB RCP-I-S7016-C $69.99
32GB RCP-I-S7032-C $119.99
64GB RCP-I-S7064-C $199.99 (Write 90MB/sec)
ちょっと高めだけど、USB が付いていたり、性能が高かったり、保証期間が 2年と長くなっていたりしますね。
追記: 2009/02/26
国内で買えるところが出てきました。
→ http://store.shopping.yahoo.co.jp/memorydeal/mlc.html
16GB FPM16GRSE 9100円
32GB FPM32GRSE 17200円
64GB FPM64GRSE 29300円
海外ならこんな値段
→ http://www.mydigitaldiscount.com/
SuperTalent:
MLC Read 90MB/sec Write 55MB/sec (1年保証)
16GB FPM16GRSE $44.99
32GB FPM32GRSE $85.99
64GB FPM64GRSE $139.99
SLC Read 95MB/sec Write 90MB/sec (3年保証)
16GB FPD16GRSE $169.99
32GB FPD32GRSE $339.99
RunCore:
MLC Read 125MB/sec Write 55MB/sec (2年保証)
16GB RCP-I-S7016-C $69.99
32GB RCP-I-S7032-C $119.99
64GB RCP-I-S7064-C $199.99 (Write 90MB/sec)
128GB RCP-I-S7028-C $389.99 (Write 95MB/sec)
RunCore の方が実際速いらしいし、USB が付いているのでなにかと便利。値段差の価値はあるみたい。
海外で買うと $20〜$30 の送料が必要だし、(値段によって)関税+消費税もかかる。初期不良時の面倒も考えると、一概に海外の方がいいとは言えないけれども ... ちょっと高いんじゃないかという感じ。
ちなみに、soltec工房の記事によると、900A では、BIOS Ver.0703 にしないといけないようです。
追記: 2009/03/04
Buffalo から SATA タイプの 内蔵 SSD が出るようです。
→ x-gadgetblog
USB2.0用外付け変換ケース付
SHD-ES9M32G-UC \12,700 (Amazon: 11800 円)
SHD-ES9M64G-UC \22,400 (Amazon: 20801 円)
ケースなし
Eee PC 901-16G専用 MLC搭載 交換用SSD
SHD-ES9M32G \11,600 (Amazon: 10800 円)
SHD-ES9M64G \21,300 (Amazon: 19800 円)
性能は、SuperTalent MLC と同じぐらい。
ついに出てくれた。4/11の 発売がたのしみ。
09/03/15 追記
アーキサイトで FPM16GRSE 発売中らしい。
http://www.rakuten.co.jp/archisite/1880973/1884233/
16GB FPM16GRSE 5580円
32GB FPM32GRSE 9980円
64GB FPM64GRSE 17980円
これなら、リーズナブル。4/11 まで待てない人はこっちでもいいかも。
おまけ:JSMonitor の結果 (09/03/22)
参考 → SSDのモニタリング・寿命予測が可能なフリーソフト「JSMonitor」 (ギガジンの記事)
要するに MAX Erase Count が 1万に近づけば、そろそろ寿命ということ。このソフトで傾向をつかんでおけばどれぐらいで寿命になるかが分かるので結構安心。
追記:09/03/29
どうせ買うんだからとヨドバシで予約ポチった SHD-ES9M-UC(32GB) が 3/28 に早くも到着。
4/11 より 2週間も早く来てしまって心の準備ができていない。
とりあえず、701SD-X に入れることにした。
まずは、オリジナルの 8GB と SHD-ES9M32G の消費電力の調査。
方法は、Mobile Meterを使って Dischage rate を見る。
Original 8GB SHD-ES9M32G
アイドル 11.29 W 11.89 W
Crystal DiskMark --- 13.03 W (MAX)
(Power Saving Mode)
0.6 W ぐらい SHD-ES9M32G の方が消費電力が大きかった。5% ぐらいバッテリーの持ちが悪くなる計算。
あと、Crystal DiskMark を実行したところ 最大で 13.03 W になった。1.1 W の増加。
ちなみに結果は、
SHD-ES9M32G (FAT32)
-------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 90.970 MB/s
Sequential Write : 50.195 MB/s
Random Read 512KB : 86.645 MB/s
Random Write 512KB : 35.591 MB/s
Random Read 4KB : 13.186 MB/s
Random Write 4KB : 1.973 MB/s
Test Size : 100 MB
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
PING:
TITLE: JSMonitor SSDのモニタリング・寿命の予測を行うフリーソフト
URL: http://indianwills.com/2009/04/jsmonitorssd.html
IP: 220.217.50.11
BLOG NAME: 無料ソフト・フリーソフト紹介 気になること
DATE: 05/04/2009 22:18:59
JSMonitor は、SSDのモニタリング・寿命の予測を行うフリーソフト 画...
-----
--------
AUTHOR: すz
TITLE: crosscrypt を MinGW でビルド
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: プログラミング
DATE: 01/31/2009 11:20:45
-----
BODY:
filedisk を拡張した crosscrypt を MinGW でビルドしてみた。
→ crosscript-0.4.3-mingw01.zip
ドライバ本体は、filedisk と同じようにすれば良かった。(説明略)
コマンドも 同様。MSYS で使えるように、仕様を変更。
これについて少し説明。
MSYS というか bash ? から起動するとき、/ で始まる引数はファイル名とみなして windows のファイル名に変換している。
/d/test.img → d:/test.img
/mount → C:/msys/1.0/mount
こんな感じ。これが /mount とか DOS 流のオプションが使えない理由。filedisk.exe の第一引数は、コマンドと決まっているので、/ を外している。他のオプションは / → - に変更。
あと、ファイル名の / も (filesys.exeでは)具合が悪い。
d:\test.img → \??\d:\test.img
という変換をやっていて、それをするために、ファイル名を解析している。bash では、\ を入力するには、\\ とかしなければならなくて面倒なので、/ → \ 変換を内部に入れることにした。
次に、ドライバーのインストールプログラムに手をいれてみた。
フリーのリソースエディタ ResEdit (ver 1.4.4.15) を使って、resource.rc を編集して、ボタンを付けた。--- この程度なら ResEdit で十分だった。
付けたボタンで何をするかというと.. ドライバ起動の設定。実用として使うなら自動で起動してくれないと困るが、改造時に致命的なバグが入ったときまで起動されては困る。それで、押すボタンでどちらにするか決めるようにしてみた。
あと使い勝手を良くするために、C:\WINDOWS\system32\drivers へのコピーと削除の機能も入れた。
で、MSYS で普通に使えていたので... Windows から開くと、コンソール画面が開いてしまうという問題に後になって気がついた。
これを直すには、リンク時に次のオプションを追加する。
-Wl,--subsystem,windows
あるいは
-mwindows
subsystem の指定には、native,windows,console,posix の 4つがある。普通のアプリは、windows か console 。native はドライバとか。posix はよくわからない。
さて、こうやってビルドした crosscrypt を使ってみた。
$ filedisk.exe mount /d/zzz.iso -cd
G: -> d:\zzz.iso mounted
$ filedisk mount /d/test.img 100M
H: -> d:\test.img mounted
$ filedisk umount g:
G:: unmounted
$ filedisk umount
H:: unmounted
デバイス番号、ドライブ名が必須ではなくなって、使い勝手があがっている。
暗号化するときは、こんな感じ。
$ filedisk mount /d/test2.img 200M -aes256
1.Passphrase:aaa
H: -> d:\test2.img mounted
WARNING: Key will be to short for linux (min 20 chars) 3
$ filedisk umount
H:: unmounted
$ filedisk mount /d/test2.img -aes256
1.Passphrase:zzz
H: -> d:\test2.img mounted
WARNING: Key will be to short for linux (min 20 chars) 3
簡単なのは良いのだが... パスワードが見えてしまっている。
実用で使うには問題だが、もっと大きな問題が...
どんなパスワードでも、mount できてしまうのだ。mount できるが内容が出鱈目になる。で、アクセスしたとき、フォーマットされていません。となるわけだ。
なんらかのチェック機能がほしいところ。
さて、性能はどうだろう。
eeePC 701SD-X 600MHz , SSD BUFFALO SHD-DI9M 16G で、CrystalDiskMark 2.2 をやってみた。
native plain aes256 TrueCrypt
Sequential Read : 76.583 MB/s 57.112 MB/s 12.866 MB/s 13.183 MB/s
Sequential Write : 31.693 MB/s 29.380 MB/s 4.860 MB/s 12.586 MB/s
Random Read 512KB : 74.786 MB/s 55.822 MB/s 12.737 MB/s 13.580 MB/s
Random Write 512KB : 6.601 MB/s 6.360 MB/s 3.283 MB/s 5.076 MB/s
Random Read 4KB : 12.071 MB/s 9.471 MB/s 5.300 MB/s 5.099 MB/s
Random Write 4KB : 0.063 MB/s 0.069 MB/s 0.060 MB/s 0.068 MB/s
native は、ファイルがあるディスク、plain は暗号化なし、aes256 は暗号化で、TrueCrypt は比較用。
plain の場合、read が大分落ちる。これは、read するとき、一旦 バッファに読み込んでそこから、コピーしているため。暗号化した場合、TrueCryptに比べて Write が 大分劣る。 なにか変なところがあるのかも。
追記:
当面使ってみようと思う。いろいろいじるドライバーと同じ名前では、都合が悪いので、
ドライバ名 :FileDisk → CrossCrypt
デバイス名 :FileDisk/FileDiskCd → CrossCrypt/CrossCryptCd
ドライバファイル名:filedisk.sys → crosscrypt.sys
コマンド名 :filedisk.exe → ccsetup.exe
と変更したのを作った。
→ crosscript-0.4.3-mingw02.zip
あ! crypt ではなく、cript になっている!。次からちゃんとする。
メモ:
パスワードが正しいかどうかチェックできない問題について
確実ではないが、ほとんどの場合チェックできる方法を考えてみる。
マウントしたものが、ファイルシステム か 初期化状態のいずれでもなかったら、エラーにする。
MBR の場合は、パーティション 1 が ファイルシステムかどうかをチェック。
MBR:
先頭 512B の最後 2 バイトが、0x55 0xaa
Windows 系 ファイルシステム :
先頭が 0xeb ANY 0x90 。
続く 8 バイトに文字列が入り 0 が続く。
文字列には、フォーマッタの文字列が入る。
Windows XP では、NTFS MSDOS5.0 EXFAT などだが、
linux などでは、msdosfs だし、sdformatter なら ALLスペース。
0xeb ANY 0x90 ANY x 8 0x00 をチェックすれば良さそうだ。
ext2/3/4 :
先頭 1024バイトは ANY 。1024バイト目から super_block 。
そして、supre_block の offset 56-57 バイトが 0x53 0xef 。
iso イメージ:
Linux などの /usr/share/magic によると 32769 バイト目から
CD001 が入る。(2352 セクタでは 37633バイト目)
初期状態: チェックしたところが all 0 なら初期状態とみなす。
これで検討中。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: puppy linux 覚えがき (1)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: VineLinux
DATE: 02/02/2009 22:07:48
-----
BODY:
実は、2 台目の eeePC 710SD-X を買ってしまった。このマシンで、いろいろ実験しようと思っている。
まずは、puppy linux 。いままで さんざん勧めながら、backup/resotore にしか使っていなかった。ちょっと具合の悪いところを直しながら使ってみたいと思う。
まず、使いにくいと感じるのは、シングルクリック。2 つ起動してしまったりして ...
これは、ファイラー(ROX-filer) を立ち上げ、ファイルアイコンの隙間を右クリックしてメニューを出し、オプション設定で、ダイアログを出す。そのダイアログの ファイラーウィンドウ、ピンボードのところに、シングルクリックで操作する/開く というチェックボックスがあるので、外すことで ダブルクリックに変更できる。
で次、端末 Window (urxvt)で、vi(e3vi) を使うことが多いのだが ... なんか全然だめ。vim でないと死にそう。
しょうがないので、vinelinux(4.2) から /etc/vim/vimrc と /usr/bin/vim.normal を持ってきて使う。( /etc/profile で e3vi を vi に alias しているので、外し vim.normal を vi に変更。)
端末ソフトは、urxvt を使うと... なんかゴミが残って見難い。設定ファイルなどで漢字を見る必要はないから 普通は console(rxvt) を使えば良いみたいだ。
追記: vine の 等幅フォント VLゴシック VL-Gothic-Regular.ttf を取ってきてインストールしてみた。( /usr/X11R7/lib/X11/fonts/TTF にコピーして、mkfontdir, mkfontscale を実行。)
.Xdefaults の設定を次のようにして使ってみることにした。
URxvt.font: xft:vl gothic:size=10:antialias=ture
URxvt.boldFont: xft:vl gothic:bold:size=10:antialias=ture
URxvt.italicFont: xft:vl gothic:italic:size=10:antialias=ture
次に キーボードの設定。いつも CAPS は使わない。CAPS も 左Ctrlにしたいのだがどうしたら良いのか?
Xではなく、コンソールなら /usr/share/kbd/keymaps/i386/qwerty/jp106.map があるので、これを jp106cc.map とか適当な名前でコピーして編集すればよい。そしてこのファイル名を、/etc/keymap で指定する。
X の場合は? 一応できたものの実にややこしい。
まずは、/etc/X11/xorg.conf の jp106 のところを jp106cc にする。こうすると xorg という Rule に jp106cc というモデルを追加しなければならない。
まず、/etc/X11/xkb/rules/xorg を編集。xfree(jp106) の次の行に xfree(jp106cc) を追加。
次に、/etc/X11/xkb/keymap/xfree86 を編集。jp106 という xkb_keymap が定義されているので、まねして jp106cc を作る。
で、include jp(jp106) というのがあるので、これを jpcc(jp106cc) に変更。
最後に /etc/X11/xkb/symbols/pc/jp というファイルを jpcc に コピーして、エントリを jp106 → jp106cc に書き換え <CAPS>定義を Conrol_L に変更(2ヶ所)。
面倒なら名前を定義しなおさないで、jp ファイルを直接変更しても良い。
書いた後で気が付いたのだが... _ が入力できない。vine からコピった xev で調べると、keycode = 211 で NoSymbol 。ついでに他のキーを調べてみると ... FN+F1(サスペンド) が 223 で NoSymbol。FN+F2 〜 FN+F9 はキーが上がってこない (期待どおり機能している?)
で、jp106 に戻すとちゃんと入力できる。
どうも上のやりかたではダメらしい。面倒なので、いったん全部戻して ...
/etc/X11/xkb/keycodes/xfree86 で、<CAPS>の行をコメントして、<RCTL>のところを 66 にした。これで Caps が Control_R になる。
これでまぁなんとか... といいたいのだが 800x480 の画面はとても狭い。なんとかならないものか?
eeePC 701SD-X は、デフォルトで EeePC Tray Utility というのが動いていて、1024x768 を 800x480 に表示できる圧縮モードというのが使える。それに加えて AsTray Plus というツールを入れると、1024x600 の 圧縮表示ができるようになる。
1024x600 の 圧縮表示は、アスペクト比も(ほとんど)変わらないし 字も小さくなるもののひどく読み難いという程でもなく、実にいい。
これをなんとかして、puppy でやりたいのだが ... いったいどうしたらよいのだろう?
ちょっとググった感じでは、xrandr ? 915resolution ? 両方とも入っているが ...
おまけ :
ガセガジェッター: PuppyでSpeedStepという記事を発見。ファンをあまり回したくないので、設定しようと思う。
メモ:
ちなみに、/proc/acpi/processor/CPU1/throttling を見ると、クロックを 12% 〜 100% まで 8 段階に変えることができるように見える。eeeXubuntu では、p4-clockmod を使って 337MHz 〜 900Mhz まで変えているみたい。
Windows のユーティリテイ SuperHybridEngine では、FSB とかメモリクロック(クロックソースそのもの?) を変えていて、全体の消費電力を抑えるようにしている。 ACPI で、そこまでするのは無理そう。
あと、サスペンドとHWアクセラレーションも有用。
urxvt の 再描画も明らかに早くなったし、acpitool-0.5.pet のインストールで サスペンドもできるようになった。
AsTray Plus のように 800x480 にしたい。いったいどうすれば良いのだろう?
1024x600 を縮小した表示をみると、文字がぼやけているように見える。-- まさに、800x480 のエリアに テクスチャーを張ったような感じ。
いろいろググっていくと "Render Scaling" というキーワードが見つかった。で、それをサポートしている ドライバは IEGD (Intel Embedded Graphics Drivers)というものらしい。
このドライバの最新版は、9.0.2 。インテルのサイトからダウンロードできるようなのだが、... その先がよくわからない。Linux を指定してダウンロードしても、93 MB もの exe ファイルをダウンロードしてしまう。
これを実行すると、展開して なにかインストールされる。そこを見ていくと、IEGD_9_0_2_Linux.tgz とかいうファイルが見つかる。これが目指すものらしい。それを展開すると、Xorg-X11R7.X に対応したバイナリ(.so) とか、カーネルのパッチが見つかる。
カーネルのパッチは、agpgart に対するものと 追加のドライバーである iegd.ko 。で、ここで困ってしまう。カーネルのビルド環境がないと無理。... まだ、puppy と eeeXubuntu をインストールしただけで、ビルド環境など用意できていない。なんとか 縮小表示ができるようにしたいのだが、長期戦になりそうだ。
追記:
701 4G-X の FSB 制御ができているらしい eeectl(0.2.4)があってソースコードも公開されている。見てみたのだが、dciio driver というものが バイナリなので、肝心なところは分からなかった。
Linux でこれに相当するのが、eeepc-linuxというカーネルモジュールらしい。701 4G-X用なので 701SD-X では動かしたらマズそうなのだが、参考にはなりそう。もともとは、FSB を 900MHz にオーバクロックするもの。だが、701SD-X では 900Mhz から クロックダウンして消費電力が抑えられると嬉しい。
あと、eeeXubuntu についてなにも知らなかったのだが、gcc と カーネルヘッダーが 最初からインストールされているようだ。
これなら、モジュールは作れる。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: ACアダプタ とか キーボードとか
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 02/03/2009 02:18:02
-----
BODY:
2台目を買ったので、いくつか調べたことを
AC アダプタについて
eeePC 701SD-X の純正ACアダプタ EEEPCADAPTER 24W/BLK は、すごく高い。例えばヨドバシでは、4800 円もする。
ダイヤテックから出ている対応アダプタ PLS12AS は、3000 円弱。例えばアマゾンでは、 2,682 円。
純正は 9.5V / 2.5A の仕様なのだが、ダイヤテックのは 12V/3A 。701SD-X だけではなく、同じ 9.5V の 4G とか 他の 90X などにも対応しているようだ。
... どうも 12V でも OK なようだ。そして、DC プラグの形状は、電圧区分3(EIAJ#3) 外径 4.75mm 内径 1.7mm らしい。
DC プラグを入手すれば、秋月の 12V 48Wとかの DCプラグを変換して自作できそう。
実は、2台目はもちあるかないので、2台目の ACアダプタを持ち歩き用にして、2台目用を別に自作するのも良いかなと思っている。
追記:あるいは、千石電商の アイコー電子 STD−12020U(12V 2A 1134円)でもいけるかも。(電力が足りない可能性はあるが、701 系なら大丈夫に違いない)
ちなみに、千石では DCプラグ 極性統一#3(ストレート)(74円) も扱っている。
あるいは、相当安くなっている ハードディスクケース GW3.5AG-SU2/BKの ACアダプタだけを使う ... とか。12V 2.0Aの
はず。(メーカの写真↓)
キーボードについて
2 台目のキーボードは、どうもハズレのようだ。なんか左側が浮いていて BS とか Enter を押すとガシャガシャ言う。
それだけでなく、なんかキーを押しても入力されないことが多い。強く打つと入るのだが、打ち直すことが多くてイライラする。
とりあえず、キーボードを外して矯正することで、ガシャガシャは直った。ちなみにキーボードを外すには、キーボードの上側に見える 3つの金属のツメを 奥に押し込んでツメを外しながら外す。
入力されない問題は様子見。使っていけば直ってくるような気がする。
ところで、このキーボードについて面白い情報を見つけた。→ tie2's labo.。なんでも エレコムの TK-UP84CPWHとそっくりらしい。ただし、接続ケーブルは形状が違う。--- おしい。
DCプラグを買って、12V/2A の AC アダプタを改造してみた。
12V 自体は問題ないようだ。使いながら充電しても、(ワットチェッカーで見て)22W ぐらいが上限になるようで 2A で問題ない。
ただし、DC プラグは問題あり。センターの電極がしっかり接触せず、ときどき切れる。バッテリーを付けていればなんとかなるが、ちょっとマズそう。
あとで気が付いたのだが、SSD がおかしくなってしまった。立ち上がらないので、バックアップで再インストールするはめになった。接触が悪いまま使うのは危険!
センターの部分が単なる穴のプラグは駄目そう。バネで接触するタイプ --- たとえば、変換ケーブルの WK-J3なら 大丈夫だと思う。
プラグ単体は見つけられなかった。ひょっとしたら、 Linkman JL-EIAJ3がいけるかも。
追記: Linkman JL-EIAJ3 を試す。
変換ケーブルの WK-J3 で問題ないらしい。それは分かっているのだが、プラグを付け替えてしまったので、いまさら変換ケーブルにするつもりはない。というわけで、Linkman JL-EIAJ3 に付け替えてみることにした。
写真ではよくわからなかったが、実物は ちゃんと +側に バネが入っていた。で、つけてみたのだが、電源が入らない ... あれ?
どうも、+側のハンダ付けのときに熱を加えすぎたらしい。別のを(熱に気をつけて) つけてみたら OK 。
しっかり接触するようだ。しばらく 2台目で 使ってみようと思う。
追記:
ラフに扱っていたら... また バッテリー/AC を繰り返すようになった。なんか接触が甘いのか?
で、問題は その後。いったんシャットダウンして、後で立ち上げたら SSD がまたおかしく。... 一応立ち上がって使えているが、ファイルがいくつか壊れたかも。
ひょっとして、12V だからより危険? たとえば バッテリー/AC を繰り返すと電圧の変動が激しくなって、SSD がおかしくなるとか。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: お気に入りのNAS
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: LS-XHL
DATE: 02/09/2009 04:23:43
-----
BODY:
Aspire One や eeePC 701SD-X を買うまで実に長い期間 PC というものは買っていなかった。
でも、かなりのお金をPC関係につぎ込んで来た。何を買っていたかというと NAS 。
玄箱/HG と LinkStation HD-HGLAN シリーズ 合計 6 台 ( 1台は故障。2 台は予備。3 台が稼動中) あと、TS-TGL/R5 シリーズとか もういろいろ。
稼動しているマシンには、RHEL4 のソースコードを取ってきて自分でビルドしたお手製の ディストリビューションをインストールしている。稼動中のマシンのうち 2 台は、rsync でミラーする運用で、あとの一台は、ビルドしたり実験したりする用。
予備もあるし、当分使っていく予定。ただ... 遅いことと、IDE の大容量 DISK は今後発売されなくなっていきそうなのが不満点。
次は ARM だとばかり、Marvell Orion ベースの 88F5182 を採用した LinkStation LS-GL シリーズやら玄箱/PRO やらを買っていたのだが、絶賛放置中 のうちに、次世代が出てきてしまった。
玄箱をハックしようのこのページによると、LS-XHL シリーズは、88F6281 採用で、メモリも 256MB に増えている。クロックは、400MHz から 1.2GHz ? このページでは、bogo Mips が 4.5 倍だそうだから、(コンパイラの改善とかで) クロック以上に速くなっているかも。
次世代は、TeraStation シリーズの方も出ている。TS-XL/R5シリーズ。シーケンシャルリードが 高速になっているから、CPU がグレードアップしているはず。それに加えて、同時アクセス時の性能がアップしているので、メモリも増えているはず。--- たぶん LS-XHL シリーズと同じになったのだと思う。さらに、Gigabit イーサネットが 2本 -- 2台接続してレプリケーションするときに使うようになっているらしい。
つぎのお気に入りはこれになりそう。最近は ARM も メジャーなディストリビューションが対応しつつあるので、自分ディストリを作るにしてもあまり困難はないかも知れない。
ほかの選択枝としては、Atom を採用したマシン。ベアボーンもだいぶ安くなっているらしいし、FreeNAS とか openfiler とか使って NAS に仕立てても良いかも知れない。
ただ、Atom はいじる楽しみがあまりないのだ。すんなり動いてしまうだけでなく。CPU に面白い機能がない。最新の Linux カーネルを見ると、DMA Engine という機能が搭載されていて、MPC8241 とか Marvell Orion とか対応している。こういうのを試してみたりするのも楽しみだったりするのだ。
MPC8241 が対応しているというのは間違い。対応しているのは、MPC85xx 。ただし、機構が似ているので 対応はできるはず。
あと、面白いのは、AVR32 がちゃっかり対応していること。
ちなみに LS-XHL シリーズの基板写真(玄箱をハックしようより)
下位モデルの LS-CL シリーズ(400Mhz 128MB)の基板写真
すごくコンパクト。LS-CL は 5000 円ぐらい安いみたいだし、シリアルコンソールにつなげられたりして、改造し易そう。ビルドとかするのには、LS-XHL を使いたいけど、使うだけならこっちの方が良いかも。
メモ: 09/02/09
たとえば、NTT-X Store だと、LS-XH1.0TLは、23350円。LS-XH500Lは、16710円。差額が 6640 円もある。たとえば 1TB のハードディスク WD10EADSは、7500円ぐらい? 将来的に 1T といわず 1.5T とか 2T にしたいから、500G を買っておくか。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: ハードディスクの消費電力
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 02/12/2009 16:03:26
-----
BODY:
WD10EADS(WD 1TB 5400rpm〜7200rpm) を買った記念に、USB DISK ケースに入れた消費電力を、サンワのワットチェッカーで調べてみた。
使った USB DISK ケースは、CSS35U2。ついでなので、死蔵していた、HDP725050GLA360 (HGST 500G 7200rpm)もついでに測定。
まず動作について簡単に説明する。USB ケーブルをどこにも接続しないで、電源を入れると、USB コントローラだけ電源が入る。次に USB ケーブルを PC に接続すると、ハードディスクに電源が入りスピンアップする。このとき消費電力は最大になるが、しばらくすると 落ち着く。そして、実際にアクセスすると、少々消費電力が増える。
POWERON SPINUP IDLE CrystalDiskMark
WD10EADS 2W 17W 5W 7W
HDP725050GLA360 2W 24W 8W 8W
注) ここの消費電力は、全体の消費電力。AC アダプタで 100V(AC) → 12V(DC) で 15% ぐらい ロスする。それに加えて、内部で 12V → 5V の DC/DC 変換が入るので、ここでも 15% ぐらいの ロスがあるはず。(ちなみに 15 %は適当。ちゃんと調べたわけではない)
もし、USB コントローラがハードディスクの電源を完全に切っているなら、コントローラ自身の消費電力 は 2W 。上の値から一律 2W を引けば、ハードディスクの PC電源への負荷とみなせると思う。
HDP725050GLA360 のデータシートには、idle 時 4.8W と書いてある。2W を引いたみなし消費電力は 6W ぐらい。20% ぐらいのロスがあれば、4.8W なので 値に大きな矛盾はない。
スピンアップ時の最大電流は、12V 2.0A / 5V 1.3A となっている。そのまま取ると 30W で さらにロス分を加えると、36W 相当になってしまう。実際は 22W だから、ずいぶん差がある。ワットチェッカーでは(平均化されて)分からないのかも知れないので注意。
それはともかく、WD10EADS は消費電力の点では優秀みたいだ。
製品ページには、アイドル 2.8W / 動作時 5.4W と書いてあるが、2W を引いたみなし消費電力で、3W / 5W だから実際はもっと少ないはず。
それに低電力スピンアップ と謳っているが、たしかに低い。
HDP725050GLA360 も低消費電力ということで選んだはずなのだが .. こっちの方が良さそうだ。特に 小さな NAS のように電源に余裕がないものに入れるには。
ところで、USB DISK ケースの、CSS35U2。これは安いというだけで選んだ。基本的に LinkStation の中身を見るとか 臨時で使うつもりなのだが、使いがっては悪くなさそう。
ちゃんと使うには、2 本のレールを 4つのねじでハードディスクに取り付け、フタと一体化している コントローラをつける。
次に、ケースに入れて、ふたのねじ 2 つを閉める。
ただ、ちょっと使うだけなら、コントローラをつけるだけでよい。
SATA だから差し込むだけ。
ただ、ちょっと不満なのは AC アダプタのコネクタが 特殊なこと。玄人志向で使っているのは、外径 5.5mm / 内径 2.1 mm のよくあるタイプだが、 これは 内径がもっと細い -- たぶん 1.7mm で、Aspire One と同じ。(注: 電圧が違うので、Aspire One に使えるわけではない) 。12V のアダプタが最近増えてきたので、互換性があるほうが嬉しかったりする。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: LS-XHL 購入
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: LS-XHL
DATE: 02/16/2009 01:16:53
-----
BODY:
LS-XH500Lを購入した。
購入目的は、ビルドマシン。-- 1.2GHz もの高クロックで動作し、メモリも 256MB も載っているという ARM マシンは、こいつの他には(たぶん?)ない。だから ビルドする環境はぜひコイツの上に構築したい。
どうやって、そういう環境を作るか。
fedora core 6 , 8 , 10 を ARM に移植したものが公開されている。
→ http://ftp.linux.org.uk/pub/linux/arm/fedora/
ここの rootfs-f8.tar.bz2 and/or rootfs-f10.tar.bz2を取ってきて ホストマシンで、bunzip2 しておく。
で、コイツに telnet して、tar -xvpf xxx.tar で展開し、chroot すれば、最初のビルド環境になる。
問題はどうやって telnet できるようにするか?
1. 確実な方法
LS-XHL を分解して、 ハードディスクを取り出し、USB ハード DISK ケースに入れる。
EFI GPT パーティションを扱え かつ xfs をサポートしている Linux マシン(ubuntu 8.10は OK) に接続して、/etc/shadow と /etc/init.d/rcS を編集する。
telnet 有効化/ root のパスワードを潰すが参考になる。
この方法は確実だ。ただし、LS-XHL を分解すると 保証はもちろんなくなる。その上 ツメをいくつか壊してしまう可能性がかなりある。(私は やってしまった。)
2. やってみる価値がある方法
ファームウェア 1.03 をダウンロードし、↑の改変を行ったものをインストールする。
( 改変する方法は、ファームウェア を実行して出てくる ファイル名で、ググれば 見つかる。)
改変したものを LSUpdater.exe で インストールしたいわけだが.. ファームウェアは 最初から 1.03 で通常の方法では、再インストールできない。
tftpboot を使ったクリアインストールなら、ファームウェア 1.03 の再インストールができる。
手順は、次のとおり
1) Web のシステム→初期化 メニューから ディスク完全フォーマットを実行して、ハードディスクを初期状態にする。
2) BUFFALO LinkStation HDD換装方法を参考にして、ファームウェアのインストールを行う。
(LS-XHL の場合、赤く点滅しているはず。ftpd の準備が出来たら、FUNCTION ボタンを押すこと。そうすると 青の点滅に変わり tftpbtoot が開始される。)
まず、この方法も危険である。HDD換装方法をみて簡単そうだと思えなければやるべきではない。あと分解する覚悟は必要。
ちなみに、ハードディスクの初期状態にするのは、/usr/local/bin/zerofill.sh を実行して ディスクを全部 0 で埋めている。DISK 全部に書くので時間がかかる。中途半端に停止させるのはまずいので、最後まで実行すべき。
おまけ: 試行錯誤することになるかも知れない。そのたびに 数時間かかるのではやってられないので、zerofill.sh も 編集しておくと良いかも知れない
dd if=/dev/zero ... bs=8M
↓
dd if=/dev/zero ... bs=1M count=100 conv=sync
ただし、zerofill.sh は、initrd のほうにある。mkimage とかが使える環境を持っていないと 無理。
結局のところ、分解するはめになった。2 の方法はうまくいくかどうかはよくわからない。
さて、とにもかくにも telnet できるようになり、chroot をやってみた。
rootfs-f8.tar, rootfs-f10.tar ともに OK 。
実をいうと、以前 LS-GL でこれをやってみたのだが、カーネルが古くて chroot できなかった。(fc6 は OK 。だが fc8 では ABI が変わったので NG。)。で、面倒になって放置したのだ。
おそらく 玄箱/PRO も同じ理由で NG のはず。LS-CL は 2.6.22 なので、おそらく OK。
なにを ビルドしたいのか?
ビルドしたいのは、RHEL5 相当のもの。サーバなので、全部をビルドするのでなく、必要なものだけにする方針。
RHEL5 の gcc は、4.1.2 なので、ベースにするのは、同じ 4.1.2 を使っている fedora core 8 にすることにする。
gcc や binutils あるいは rpm のバージョンがお互いに近いから、あまり困難はないと思える。まぁ、どうなるか分からないが まずは始めてみることにする。
といっても 最初からつまずく。
rpmbuild が rootfs に入っていないのだ、結局 rpmbuild を動かせるまで 試行錯誤しながら rpm の ダウンロードを繰り返す。
とりあえず rpm やら gcc を最新にしてインストールして rpmbuild できるようにしてみたところ .. ビルドされるアーキテクチャ は、armv5tejl になった。-- オリジナルの rpm は全部 armv5tel 。armv5tejl でいいのか? 少々疑問だが、これで作ってみることに。
おまけ LS-XHL はどれぐらい速い?
ちょっといにしえの dhrystone を引っ張り出して比較してみた。
ソースコード : http://nmj.sumomo.ne.jp/arc/dhrystone.c
結果: コンパイルはすべて gcc -O2 、3 回実行して最速を採用
LS-XHL (ARM ORION6 1.2GHZ) 1519756 (gcc-4.1.2)
LS-GL (ARM ORION5 400 MHz) 431778 (gcc-4.1.1)
kurobox/HG (PPC MPC8241 266MHz) 687757 (gcc-3.4.5)
Pentium III 1GHz 2118644 (gcc-3.3.2)
eeePC 701SD(Celeron-M 900MHz) 3318258 (gcc-4.3.2)
コンパイラの性能が入ってしまうし、そもそも dhrystone だし、CPU 自体を比較するものではない。... が、こんなものか。
LS-XHL は、LS-GL の 3.5 倍。クロックの差以上に速くなっている。gcc の最適化の差?
ちなみに、LS-GL (ARM ORION5 400MHz) は、PPC 266MHz に負ける。ORION5 は 同時に 2 命令実行できるはずなのだが、それ用に最適化できないと あまり速くない(らしい)。
それはともかく、LS-GL の 3.5 倍も速いので満足。
Pentium III 1GHz と比べると 70% ぐらいの性能。まぁ、比較できるレベルにまでなっているから、ARM も速くなったものだ。
それにしても、Celeron-M ってこんなに速いのか? ... なにか間違っているのかも。ひょっとして、gcc-4.3 でチート入ってる?
あと、ORION5 とか ORION6 とか 書いたのは、Linux カーネルの config を元にした。記憶によると ORION というのは SoC の名前(= CPUの名前) で、Feroceon とかは Xscle みたいなアーキテクチャの名前で ARM926EJ-S 互換?。で、arch として認識しているのは、armv5tejl とか .. arm + v5 + 追加命令セット の命名規則。
ビルドがすごく遅いことに気が付いた。
ビルドをちょっと止めて、top を実行してみたら ... びっくり。
twonkymediaserver と mt-daapd が仲良く 50 % づつ消費しているではないか。
これはいったい?
とりあえず メディアサーバを止めることで、twonkymediaserver は止まったが、mt-daapd が 100% になった。
しょうがないので、kill -TERM で停止させた。
追記: 2008/3/18
USB DISK (500G) をつないで使っていたのだが、USB DISK に ガツーンと 重量のあるものをぶつけてしまった。となりに あった LS-XHL も 将棋だおしのごとく 衝撃を与えてしまった。
で、USB DISK は、電源を入れると カッ、カッ、カッ .. と言うだけの存在になってしまった。ついでに LS-XHL もなんかおかしい。
LS-XHL のハードディスクを 初期化したくて、システム→初期化→ディスク完全フォーマットをやってみた。
やってみてわかったのだが、ディスク全体に 4 回書き込む。1 回目は 0 書き、2回目と 4回目は 1書き。3 回目は見逃したのでわからない。 ディスク全体といっても データパーティションをきれいにするだけで、システムは初期化しなかった。
システム側もおかしいらしく、まだなんかおかしい。
しょうがないので、telnetd を仕込んだ 1.04β をインストールしてみたのだが .... 失敗。
よくわからないのだが、/etc/shadow が元にもどっている。
またカラ割りするかどうか悩んだのだが、admin で login できることがわかった。ただし、admin は root ではないので出来ることに制限がある。
いろいろ探してみると、/dev/sda が書き込める状態なのを発見し、dd で壊すことによって、tftp boot できる状態になった。
前回と同じように、ちゃんと仕込んだ ファームウェア 1.03 をインストールすることで、ようやく元に戻せた。
いろいろビルドしていたものが吹っ飛んでしまった。... のだが なんか失敗していて変だったので、最初からやりなおす良い機会かも。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: GENO で 900Aが 安い
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 02/16/2009 02:01:50
-----
BODY:
GENOで、Eee PC 900A (白? 英語版 Linux) が 19990 円! と安いみたい。
リファビッシュ、Linux 版? あるいは SSD が MLC 4GB というのがネックなのか 以前 の 901 のように 爆発的には売れていないので 欲しい人は買うチャンス。
SSD を 交換して OS を自分で入れて使うような人にとっては、お買い得だと思う。英語版 キーボード というのも (ある種の人にとっては) ポイントが高い。
あと、バッテリーは 701 SD-X と互換性がある(はず)。SD-X 組にはアピールするポイントかも。
私は?どうする?
非常に欲しい。SSD は入れ替えればいいし、英語キーボードも良さそう。バッテリーも心配はない。
だが、こんな調子で買っていたらやばいのである。701 SD-X も 2 個になっているし ...
2 個目を買わなかったら、絶対買っていたのだが、今回は パスしたい。SD-X は 2 個とも黒なので 白は嬉しくないというのもある。でも、もし黒が出たら買ってしまいそう。
追記: 2009/2/24
24,25,26日 の 3 日 100 台づつ販売するそうだ。
3日間も物欲相手に戦えそうにないので、今回はあっさりポチった。2ch とかみていると バッテリーが怪しいものがあるらしいので、来たらチェックはきちんとすることにしよう。
実を言うと買う必要などない。持ち歩く用途では、701SD-X が気に入っているし画面が狭いのは工夫して使おうと思っている。Aspire One もあるし、サーバ的な使い方をするにしても必要ない。
でも、701SD-X と Aspire One をニコイチにするとこれになるのか と思ったら欲しくなってしまったのだ。
3/6 追記
今日も 100 台放出 。500台 - 300台 (100x3日) - 100台 ときているからそろそろ打ち止めか。
3/15 追記:
3/16,17,18 に 100 台 x 3 だそうだ。さすがに欲しい人には行き渡っているんじゃないかと。
3/25 追記:
あ、また 300 台らしい。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: なんとなく サーバマシン
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 02/23/2009 15:52:08
-----
BODY:
Aspire One で使っている Atom 230 は、64bit と VT(解説) に対応しているものだとばかり思い込んでいたのだが、... どうも対応していないらしい。(ちなみに、Z520〜 Z540 は、VT に対応しているが 64bit には対応していない)
ちょっと遊ぼうと思っていたのでショック!
では、コンパクトで 64bit も VT も使えるようなものは、どんな組み合わせなのか? ちょっと選んでみた。
結構 お金がかかる。それだけではなく、熱とか電源容量の問題、あるいは CPU クーラが入らないとかの問題があるかもしれない。
あと、CPUが対応していなければ最悪。
Intel だから 無理があるのかも知れない。AMD-V(Wikipedia) に対応するだけなら敷居は低いはず。
S110 に詰め込むのはどうかと思うが、一応サーバ向けということで、 Intel も AMD も SATA x 4 + eSATA 。
数千円なんだが、だいぶ安くなった感じがしてくる。
でも、TDP 45W って 相当無理な感じがする。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 900A 購入
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 03/02/2009 02:57:37
-----
BODY:
geno で 購入した Linux 版 900A が きた。
まずは ... SD カードにインストールした puppy でバックアップ。
Disk /dev/sda: 4034 MB, 4034838528 bytes
255 heads, 63 sectors/track, 490 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 425 3413781 83 Linux
/dev/sda2 426 488 506047+ 83 Linux
/dev/sda3 489 489 8032+ c W95 FAT32 (LBA)
/dev/sda4 490 490 8032+ ef EFI (FAT-12/16/32)
EFI パーティションは、dd で全体をバックアップして、sda1 , sda2 , sda3 は、tar で バックアップすることにした。
MBR も一応 sda (DISK 全体) を 2MB だけ dd でバックアップ。
これでいつでも元に戻せる。
キーボードの backslash / bar が入力できないので設定:
xkb/keycodes/xfree86 を編集して <BKSL> = 51 の設定を追加。
とりあえず、SATA が使えるという バージョン 0703 の BIOS にアップデートしたい。
というわけで、Linux を立ち上げて、BIOS アップデートを探したのだが... ないことがわかった。ググってみると こんなページを発見。
なんでも ダウンロードした 900A_0703.zip から取り出した ROM ファイルを 900A.ROM にリネームして USB ディスクに置き、ALT+F2 で立ち上げるそうだ。
SD カードスロット も USB なので、適当にいれてやってみると、エラーが出た。何度も何度もリトライしているので、microSD カードリーダに FAT でフォーマットした 2GB の microSD を入れて指したら OK 。
-- FAT32 がまずいのか、あるいは SD カードスロットではダメなのか どちらか わからなかったが、できたのでよしとする。
これで、後々 SATA SSD にするのだ。
つぎに 4GB の SSD を (あまっている) 701SD-X の 8GB と交換してみた。中には、701SD-X で使っていた Windows が入っている。
... やってみたら ぜんぜん立ち上がらない。... まぁ当然か。
じゃぁ。購入時の状態ならどうなのか? ... バックアップがあるので、それで試したところ ... やはりぜんぜんダメ。
... 最初の立ち上げで すでにチェックが入っているらしい。
衝動買いなので、何も考えていなかったのだが、なんか Windows をインストールしたくなってきた。
Windows XPをUSB Flash Memoryからインストールする!を参考に やってみることにした。
USB_Multi_Boot_8 というツールを使って、Windows XP のインストール CD から インストール USB メモリを作るらしい。
で、とりあえずやってみたのだが、なんかおかしい。find がエラーになるとか ...
MSYS に find が入っているし、WinAVR にも find が入っている。どうやら それらが動いてしまっているらしいので、USB_MultiBoot_8.cmd を編集して、PATH を設定するようにしたら USB メモリにインストールできた。
で、すなおにそれを使ってインストールしたら インストールできた。すこしでも早くしたいので、DISK のフォーマットは、FAT にした。
次に、eee 用 ドライバ
900HA 用を使えば良いらしいので、ダウンロードしたものを
Asus_ACPI
Chipset
VGA
Audio
LAN
LanUtility
SupHybridEngine
WLAN
Touchpad
の順でインストール。途中何回かリブートする必要があった。
インストールでは普通 ID やら user 名やら タイムゾーンやら聞かれるのだが、ID しか聞かれない。
で、立ち上げてみると適当に設定されてしまっているので、ユーザ名と タイムゾーンを 修正。
→ 実をいうと今の最新版は、USB_Multi_Boot_10 。これを使うと最初から自分で設定できる。USBメモリから WindowsXP をインストールする を参考に。
あと、c:\boot.ini がちょっと変。3 つもエントリーがある。
最初の 2 つは同じで、3 つめは USB メモリからの リカバリー。
必要ないと判断して、最初のエントリーだけにした。
あとは、いま使っているのと同じように ソフトをいれていった。
... というわけで Windows が問題なく使えるようになってしまった。
あといろいろメモ。
1)リファブリッシュということで、バッテリーに問題があるかも知れないので、まずは、チェックしてみた。
MobileMeter によると、
製造元 ASUS
デバイス名 900A
現在の容量 36641 mWH
設計容量 36851 mWH
現在の最大容量 36641 mWH
消耗度 0 %
ということで、まったく問題なし。
別に マシンも傷んでいないし、ラッキーだったのかも知れない。
2)CPU が1個しかない
後で気がついたのだが、puppy では 1 個しか認識されていない。Windows では、ちゃんと2個認識している。
BIOS の CPU 設定で CPUID をどうたらというところを Enable にしてみると ... /proc/cpuinfo で キャッシュが 512KB → 32KB に見えて、cpuid level が 10 → 2 に変化。
あと flag がちょっと変わる。-- それだけだった。
3)言語バーが出ない。
漢字キーをどうしようか考えていたら、言語バーも出ていないことに気がついた。ググってみると ctfmon(テキスト・サービス)を自動起動しないようにする。というページを発見。いまさらなのだが、知らなかった。
それはともかく、英語キーボードの件。
kbd101ax というのが良さそうだったので、これを入れることに決定。
右ALT が 漢字キーになる。CAPS → Ctrl は、KeySwap で設定したが、 omake に入っているレジストリでもできる。
4)SuperHybridEngine (SHE)
どんなものか見てみたら、701SD-X と同じで、System Clock を変更するタイプ。以下 siw の情報
CPU FSB System Clock
Super High Performace 1.680 GHz 558 MHz 139 Mhz
High Performance 1.600 GHz 532 MHz 133 Mhz
Power Saving 1.254 GHz 416 Mhz 104 Mhz
メモリクロックも下がるので、効果的ではないかという印象がある。(実際は知らない)。Linux でも使いたいところ。
インストールされていた Linux は同様の機能があるので、なんかしたらうまいこと設定できるかも知れない。
そういえば、eee-controlというものがあるのだった。ソースコード も ubuntu 用 deb パッケージも公開されている。
対応機種は、701/701SD, 702, 900, 900A, 901 and 1000/1000H。
5)Windows Update の数とか
まず、Windows Update をやる前に
- IE7 と NET Fremework 3.5 の ブロック
必要な人はともかく、必要ないのに 勝手にインストールされたくないので ... 以下のレジストリを設定。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0]
"DoNotAllowIE70"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5]
"BlockSP"=dword:00000001
なにもソフトを入れない状態で、SP3 から Windows Update をすると 29 個のアップデート 40MB ぐらい。
6)AC アダプタ
白いコンパクトな AC アダプタ 12V/3A (36W) (メガネコードタイプ) が付属していた。まぁこれを使えば良いのだが、これまで使っていた 12V 2A のもの(HDD用 ジャック改造) は使えないのか?
ちょっと ワットチェッカーで調べた限り 充電+実行中でも 18W とかだったのでいけるのかも。いずれ、ちゃんと調べてみよう。
7)バックアップ
今回は、FAT32 なので、tar でバックアップしようと思う。
その場合、mount オプションに気をつける必要がある。(漢字コードが何なのか とか 大文字小文字の扱いに注意)
- あまり考えたくないので、とりあえず puppy で アイコンをクリックして mount 。
- ファイル単位なので、-v オプションをつけると遅い。
- hiberfil.sys は大きいだけでなく必要ないので、それ以外をバックアップする。(戻したら 休止の OFF/ON をやって再作成)
例:
tar -zcf /xxx/xxx.tgz [A-Za-gi-z]*
とか。
ぐらいが注意点か。
感想
まず、おもっていたのより 大きく重かった。701SD-X と同じサイズだとばかり思っていたのだが、1cm ばかり奥行きがある。
たった100g ぐらいなのだが、寝モバするときに 701SD-X では、パームレストの右部分をもったりしている。こんな持ち方をすれば、100g でも重く感じてしまう。
あと、701SD-X と比べると高級感あふれる作り。ABS そのままの とってもチープな 701SD-X はぞんざいに扱っても良さそうな雰囲気があったが、気を使わないといけなくなった感じ。
どちらを主に使うかは決めていない... のだが、たぶん こっち (900A) だろうなぁ。701SD-X を 2 台も買ったのは失敗。1台でよかった。
いくつかマシンを並べてみて分かったのだが、900A は発色が悪い。なんとなく青みがかかっていて、画面も暗いみたいだ。
Aspire One と比べると鮮やかさが違うのは当然として ... 701SD-X と比べても大分違う。動画を見るような用途にはあまり向いていないかも。
追記: 2009/03/08
実を言うと バッファローの SHD-ES9M が出るなんて知らず、SuperTalentのSSDモジュール MLC 16G を買ってしまったのだった。(まぁ、SHD-ES9M も買うんですが)
今回は、USBメモリから WindowsXP をインストールする を参考に XP を NTFS で入れてみた。
(FAT にしたとき速くなったとは感じられなかったので すこしでも安全な方がよいと判断)
で、ちょっと使ってみたのだが、やっぱり速い! インストールも速いし、全体的に遅いものよりは プチフリがあっても通常は速い JMF601 の方がずっといいように思う。
一応 CrystalDiskMark 結果
--------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 85.893 MB/s
Sequential Write : 49.022 MB/s
Random Read 512KB : 82.878 MB/s
Random Write 512KB : 33.023 MB/s
Random Read 4KB : 12.549 MB/s
Random Write 4KB : 1.918 MB/s
Test Size : 100 MB
Date : 2009/03/09 3:18:29
::Comment::
FPM16GRSE FAT32
あと、JSMonitorで、状況をみるのも楽しみだったりする。
おまけ -- Windows XP Home SP3 に対して IE7 と NET Fremework 3.5 をブロックした上で Windows Update したときの 更新 一覧
(合計 30 個 , 約 44MB @ 2009/03/09)
日付やタイトルは、SP+メーカの default_wxp.lst から抽出。
KB892130 2008-04-16 Windows Genuine Advantage 確認ツール
KB952069 2009-01-13 Service Pack 3 用セキュリティ更新プログラム
KB952287 2008-05-12 更新プログラム
KB923789 2008-05-13 Flash Player 用セキュリティ更新プログラム
KB938464 2008-09-08 セキュリティ更新プログラム
KB950760 2008-06-10 ActiveX Killbits に対するセキュリティ更新プログラム
KB950762 2008-06-10 セキュリティ更新プログラム
KB950974 2008-08-11 セキュリティ更新プログラム
KB951066 2008-08-11 Outlook Express のセキュリティ更新プログラム
KB951376-v2 2008-06-19 セキュリティ更新プログラム
KB951698 2008-06-10 セキュリティ更新プログラム
KB951748 2008-07-07 セキュリティ更新プログラム
KB952954 2008-08-11 セキュリティ更新プログラム
KB954211 2008-10-13 セキュリティ更新プログラム
KB954459 2008-11-10 セキュリティ更新プログラム
KB954600 2008-12-05 セキュリティ更新プログラム
KB955069 2008-11-10 セキュリティ更新プログラム
KB956802 2008-12-05 セキュリティ更新プログラム
KB956803 2008-10-13 セキュリティ更新プログラム
KB956841 2008-10-13 セキュリティ更新プログラム
KB957097 2008-11-10 セキュリティ更新プログラム
KB958215 2008-12-09 Internet Explorer 6 の累積的なセキュリティ更新プログラム
KB958644 2008-10-22 セキュリティ更新プログラム
KB958687 2009-01-08 セキュリティ更新プログラム
KB960714 2008-12-17 Internet Explorer 6 のセキュリティ更新プログラム
KB960715 2009-02-10 ActiveX Killbits に対する更新プログラム ロールアップ
KB898461 2005-06-27 更新プログラム
KB951978 2008-07-08 更新プログラム
KB955839 2008-11-24 更新プログラム
KB967715 2009-02-24 更新プログラム
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 701SD-X に USBメモリから XP をインストール
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: eeePC701SDX
DATE: 03/11/2009 07:11:21
-----
BODY:
900A をしばらくメインに使うことにしたので、701SD-X でいろいろインストールの実験をしてみることにした。
まずは、USB_Multi_Boot_8 を使っての XP の インストールの実験。
次に、Windows Update をスクリプトで行う実験。
そして、SSD の違い や FAT/NTFS でどれぐらい時間が違うかの実験。 組み合わせは、純正 8GB - FAT , SHD-DI9M 16G - FAT と SHD-DI9M 16G - NTFS の 3種類
どうやってインストールしたかは後回しにして、どれぐらい時間の差があるのかについて書こうと思う。
- 測定1)フォーマット〜 1回目の リブートまで
最初に パーティションの削除やら 再作成やらいろいろあるので、ファイルシステムを選ぶところから 再起動のメッセージまでの時間を測定することにする。単位は分。時間の計測は時計を目視。
- 測定2)1回目のリブートから 2回目のリブートまで
リブート後もインストールが続くが、それが終わって2回目のリブートをするとだいたいインストールが完了する。
2回目のリブートの時刻 - 1回目のリブートの時刻を 測定2の時間とした。なお、途中入力が1回だけ -- プロダクトキーの入力 -- あるが、この時間は計測から引いていない。
- 測定3)スクリプトでのWindows Update
/Q /N /Z オプションをつけると オペレーションをしなくて良く、リブートもしないので スクリプトで連続して Fotfix を実行できることが分かったので、時間を計測してみた。
ちなみに、インストール直後 -- ドライバを入れる前に、これを実行している。
- 結果
種類 | 測定1 | 測定2 | 測定3 |
純正 8G - FAT | 12分 | 29分 | 7分 |
SHD-DI9M 16G - FAT | 12分 | 19分 | 7分 |
SHD-DI9M 16G - NTFS | 12分 | 28分 | 11分 |
測定1では、インストールメディアからのファイルコピーが主なので、使った USB Disk の 読み込み性能がネックになって 同じぐらいになるようだ。
測定2 は、いろいろな処理をやっているらしく、SSD の違いや FAT/NTFS の違いが出た。
測定3 では、NTFS の遅さが目立った。そのままでは、小さなファイルを大量に上書きするような操作が遅いということになるのだろう。
ある程度設定した後なら、SHD-DI9M - NTFS で満足できていたことを考えると、純正の MLC 8GB で XP を使う場合 FAT にすべきなのだろう。
ただし、満足していたのは過去形。JMF601 を使った SuperTalentのSSDモジュールにしてからは、SHD-DI9M でも遅いと思うようになった。ちなみに、まだプチフリは体験していない。経験したら考えが変わるかも知れない。
おまけ、インストール後の ディスクの容量
種類 | 使用容量 | 空き容量 | 総容量 |
FAT | 1.65GB | 5.92GB | 7.47GB |
NTFS | 1.62GB | 5.86GB | 7.49GB |
両方同じ条件。インストール後、Hotfix を適用し、ドライバーをインストール。その後、バックアップユーティリティ、exFAT の Hotfix 、User Profile Hive Cleanup Service の 3 つをインストールしている。あと、ページングファイルなし、休止なし。
FAT は、アロケーションの単位が 32KB なので、小さなファイルが多いと使用容量が増えてしまうはずだが .... これを見ると気にするほどではないようだ。
USB_Multi_Boot_8 を使った XP インストール
最初に インストールCD イメージを作る。
(以下 過去記事の Vine を入れてみようの追記の EeePC 版)
nLite を使えば、EeePC と リカバリーDVD に含まれているファイル・情報だけでクリアインストールできる CD が作れる。ただし、この CD は、EeePC 専用。最悪のときしか使える場面はないが、緊急用に持っておくと良いかも。
- 1) 作業用ディレクトリ (仮に C:\WinASUS とする) を作成
- 2) 新規ファイル WIN51 WIN51IC WIN51IC.SP3 を C:\WinASUS に作成。内容は Windows と書いた1行で良い。( 空白行でも良いらしい )
- 3) リカバリーDVD の \i386XP\I386 を 全部 C:\WinASUS にコピー
- 4) C:\WINDOWS\system32 にある、oembios.bin を lhaplus などを使って cab で圧縮 しできた oembios.cab を OEMBIOS.BI_ にリネームして C:\WinASUS\I386 にコピー
同様にして、oembios.dat,oembios.sig を cab で圧縮したものを OEMBIOS.DA_ , OEMBIOS.SI_ にリネームしてコピー
さらに、C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE にある OEMBIOS.CAT を cab で圧縮したものを OEMBIOS.CA_ にリネームしてコピー。
- 5) C:\WinASUS の内容を nLite で 指定して、最後の ISOイメージ作成のみを行う。
- 6) プロダクトキーは、シールのものではなく、実際に設定されているものを使う。( siw とか keyfinder とかで見ることができる。たぶん R8P77-.... になっているはず )
-- ここまで
これで作った インストールCD でちゃんとインストールできるが、それを元にして USBディスク インストーラを作る
方法は、Windows XPをUSB Flash Memoryからインストールする! を参照のこと。ここでは全部省略。
ひとつだけ注意点。MSYS とか使っていると find.exe が期待通りに動かないようでエラーになる。USB_MultiBoot_8.cmd を編集して パスを再設定しておくこと。
ちなみに、nLite で Hotfix を統合した インストール CD も試してみたのだが、うまくいかなかった。スクリプトで実行することで、あまり手間にならないようなので、nLite では、なにも変更せずに ISO イメージを作成するだけにしている。
インストールしたら、(後述の Hotfix の後) ドライバー のインストール。
Asus のダウンロードサイトから落としたきた ドライバーを全部 unzip して一つのディレクトリにして、次のスクリプトを実行してみた。
@ECHO OFF
echo Installing ACPI
ACPI\AsusSetup.exe
echo Installing Chipset
Chipset\AsusSetup.exe
echo Installing VGA
VGA\AsusSetup.exe
echo Installing Audio
Audio\AsusSetup.exe
echo Installing Touchpad
Touchpad\AsusSetup.exe
echo Installing LAN
LAN\Atheros\AsusSetup.exe
echo Installing LanUtility
LanUtility\AsusSetup.exe
echo Installing Wireless
:Wireless\GE703\AsusSetup.exe
mkdir GE703WK
xcopy /S /E /C /H /R /K /Q Wireless\GE703 GE703WK
GE703WK\AsusSetup.exe
echo Installing SupHybridEngine
SupHybridEngine\AsusSetup.exe
echo Installing AsusUpdate
AsusUpdate\AsusSetup.exe
:rmdir /Q /S GE703WK
リブートは全部 いいえ にしたが、全部 インストールできたようだ。
よくわからないのだが、AsusSetup は、並列で動作するようだ。前のコマンドが終了する前に次のコマンドを実行し始める。
あと、Wireless\GE703\AsusSetup.exe を直接実行すると、ファイルがいくつか削除されるようなので、コピーして実行するようにしている。終了後、コピーを削除したいのだが、並列で動作してるので、実行中の可能性があるため コメントにしている。
次にいろいろ設定。USB_Multi_Boot_8 はいくつかチューニングなどのためにレジストリを変更しているみたいなので、注意。
気が付いたのは、次の点
- 言語バーを出さないようにしている。
→ 地域と言語のオプション → 言語 → 詳細 → 言語バー
- システムの復元が無効になっている。
→ ひととおりのインストールが終わったら 有効にした方が良さそう。
- ショートカット "〜へのショートカット" が付かなくなっている。困るひと(?)は、ググってデフォルトにするべし。
- タイムゾーンが GMT+1.00 になっている。修正すること。
- コンピュータ名が適当に付いている。付け直したほうが良い。
- ユーザ名が Owner と UserXP になっている。
→ あれこれ設定する前に ユーザを作りなおしたほうが良さそう。
Windows Update をスクリプトで行う
ダウンロードした Hotfix を次のスクリプトで実行してみた。IE7 を使わないのが前提。
/N は、修正プログラムの削除に使用するバックアップ ファイルを作成しないオプションなので、後で削除できない。IE7 と 非互換なものが含まれるので、IE7 を入れたい場合、後で困るかも知れない。
ファイルの選択は、前記事で書いたように、一度 Windows Update をかけたときの インストールパッケージリスト。
ちなみに、KB923789 だけは、/Q /N /Z だとエラーになったので、/Q のみにしている。
あと、:09/03 以降は、3 月分。テスト後で付け加えたもの。
@echo off
echo set registry to block Updating IE 7.0
regedit DoNotAllowIE70.reg
echo Windows Genuine Advantage 確認ツール (KB892130)
windowsxp-kb892130-enu-x86_72e487d115be77f49f64053893a23ecb58bc59cb.exe /Q /N /Z
echo Windows XP Service Pack 3 用セキュリティ更新プログラム (KB952069)
WindowsXP-WindowsMedia-KB952069-v2-x86-JPN.exe /Q /N /Z
echo Windows XP 用の更新プログラム (KB952287)
WindowsXP-KB952287-x86-JPN.exe /Q /N /Z
echo Flash Player 用セキュリティ更新プログラム (KB923789)
WindowsXP-KB923789-x86-JPN.exe /Q
echo Windows XP 用セキュリティ更新プログラム (KB938464)
WindowsXP-KB938464-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB950760)
WindowsXP-KB950760-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB950762)
WindowsXP-KB950762-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB950974)
WindowsXP-KB950974-x86-JPN.exe /Q /N /Z
echo Windows XP 用 Outlook Express のセキュリティ更新プログラム (KB951066)
WindowsXP-KB951066-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB951376)
WindowsXP-KB951376-v2-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB951698)
WindowsXP-KB951698-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB951748)
WindowsXP-KB951748-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB952954)
WindowsXP-KB952954-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB954211)
WindowsXP-KB954211-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB954459)
WindowsXP-KB954459-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB954600)
WindowsXP-KB954600-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB955069)
WindowsXP-KB955069-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB956802)
WindowsXP-KB956802-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB956803)
WindowsXP-KB956803-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB956841)
WindowsXP-KB956841-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB957097)
WindowsXP-KB957097-x86-JPN.exe /Q /N /Z
echo Windows XP 用 Internet Explorer 6 の累積的なセキュリティ更新プログラム (KB958215)
WindowsXP-KB958215-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB958644)
WindowsXP-KB958644-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB958687)
WindowsXP-KB958687-x86-JPN.exe /Q /N /Z
echo Windows XP 用 Internet Explorer 6 のセキュリティ更新プログラム (KB960714)
WindowsXP-KB960714-x86-JPN.exe /Q /N /Z
echo Windows XP の ActiveX Killbits に対する更新プログラム ロールアップ (KB960715)
WindowsXP-KB960715-x86-JPN.exe /Q /N /Z
echo Windows XP 用の更新プログラム (KB898461)
WindowsXP-KB898461-x86-JPN.exe /Q /N /Z
echo Windows XP 用の更新プログラム (KB951978)
WindowsXP-KB951978-x86-JPN.exe /Q /N /Z
echo Windows XP 用の更新プログラム (KB955839)
WindowsXP-KB955839-x86-JPN.exe /Q /N /Z
echo Windows XP 用更新プログラム (KB967715)
WindowsXP-KB967715-x86-JPN.exe /Q /N /Z
:09/03
echo 悪意のあるソフトウェアの削除ツール (KB890830)
windows-kb890830-v2.8.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB958690)
WindowsXP-KB958690-x86-JPN.exe /Q /N /Z
echo Windows XP 用セキュリティ更新プログラム (KB960225)
WindowsXP-KB960225-x86-JPN.exe /Q /N /Z
追記: SHD-ES9M 32G も測定してみた。
種類 | 測定1 | 測定2 | 測定3 |
純正 8G - FAT | 12分 | 29分 | 7分 |
SHD-DI9M 16G - FAT | 12分 | 19分 | 7分 |
SHD-DI9M 16G - NTFS | 12分 | 28分 | 11分 |
SHD-ES9M 32G - NTFS | 12分 | 14分 | 4分 |
やはり随分違う。SHD-DI9M を FAT で使うよりも速い。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SheevaPlug Dev Kit
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: LS-XHL
DATE: 03/16/2009 07:39:25
-----
BODY:
スラドで、電源アダプタ型Linuxサーバ、$99で発売という記事が出ていたのは知っていたのだが .. LS-XHL の方が Disk も付いていて良いじゃないか なんて勝手に思っていた。
だが、Marvellのページの Buy Now を押して飛んでいく先の Featuresを見てびっくり。
メモリが 512MB もあるではないか! LS-XHL で 256 MB だから、倍もある。開発環境では メモリは重要で 足りないと極端に遅くなることもあるので、 多いほうが嬉しい。
それに加えて、FT2232D が付いていて、シリアルコンソールと JTAG になるらしい。
ブロック図
この 写真ではよくわからないが、どうも サイドの 穴が USB Mini-B らしい。
JTAG が付いているなら、Flash への書き込みが失敗することを恐れることもない。
開発キットとしては、すごく良いような気がしてきた。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: AspireOne の 3セルバッテリーが安い
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: AspireOne
DATE: 03/23/2009 04:21:07
-----
BODY:
AspireOne のオプションバッテリー がなぜか安くなっている。
価格.comでみると 最安で \1,242。
6セルバッテリーはなんどもポチろうとしたのだが、不恰好になるので躊躇して結局、買っていない。最近 EeePC ばかり使っていて、あまり使いそうにないのだが、予備に 2 つばかり購入。
3/26 追記:
来たのは、UM08A31(SANYO) 。残量 6% の状態だったのでとりあえず充電。いままで使っていたのは UM08A73 (SIMPLO) ちょっと比較してみると。
設計容量 最大容量 消耗度
UM08A73 24429 mWH 22611 mWH 7%
UM08A31 23760 mWH 23760 mWH 0%
UM08A73 の消耗度は、買ったときから 7% だったと思う。93 % までしか使わないようになっていると解釈した。それに対して UM08A31 は、100 % まで充電できるかわりに、設計容量が小さめ。
メーカによって設計容量の意味が違うのではないかと思う。
バッテリーの保管方法について
予備なんだから、基本的に長期保存。
過放電は絶対してはいけないが、残量は少なければ少ないほど良いというジレンマがある。
保存方法は、電子情報技術産業協会 ノートPCリチウムイオン電池安全利用特別委員会のバッテリ関連Q&A集が公式見解。50 % で保存して、半年に 1 回はチェックしろ となっている。
ちなみに、東芝のページに
満充電に近い状態で保管を繰り返すとセル内部のガス圧力が上昇しバッテリの寿命を縮める場合があります。
という説明がある。じゃあ 最初の 1回ぐらいは 100% でも良いのか? とか、思わないでもない ...
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SmartQ 5 MID
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 03/23/2009 09:19:59
-----
BODY:
engadget に WVGAタッチスクリーンにUbuntu入りのSmartQ 5 MID、約1万2000円という記事が出ている。
とっても興味があるので、smartdevices.com.cnの記事も見てみた。
「ARMコアプロセッサ」の正体は未詳とのことだが ... スクリーンショットを見る限り CPU が 2 つある。
wikipediaの ARM_architectureを見る限り、MPCore なのは、NVIDIA Tegra (APX 2500)か TI OMAP4しかないようだ。どちらかは分からないが 仮に OMAP4430 だとすると、720 MHz x 2Core SMP -- ATOMの Z系と比べられるぐらいかも。
追記:09/03/29
おもいきり外してしまった。CPU は、S3C6410/667MHzだそうだ。もちろん CPU は 1 Core。内蔵 FLASH は 1GB で、RAM は DDR 128 MB。
おおきさは、120x74x14 (mm) 。あとバッテリは 2000mAH
iPhone (S3C6410/560Mhz) のバッテリーは、1400mAH だから、バッテリーの持ちは同等(6 hours (internet) 7 hours (video))以上が期待できるかも。
あとストレージは SDHC スロットが 1つ。USB は Host の場合 12Mbps らしいので ストレージ向きではなさそう。
メモリが 128 MB というのは今となっては結構厳しい。Pandoraは、ubuntu をサポートするにあたり 128 MB → 256 MB に変更した。あと ARM の 667MHz ではサクサク動くとはあまり思えない。それでも ワクワクする。
参考 → http://mp4nation.net/blog/2009/03/smartq-mid-more-confirmed-specs-meizus-jwong-crys-a-little/
889元ですでに発売しているらしい。あと AC アダプタは 5V 1A 。
→ CreativeStation::Blogが詳しい。
それはともかく、どこで入手できるようになるのだろう? 中国製 高級 PMP の扱いみたいだから、ゲーム関係のショップとかで買えるようになったりするのだろうか?
とりあえず、カッパドキア、マジカル上海、ゲームツールあたりに期待か?
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: タッチパネルメモ
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 03/25/2009 13:03:52
-----
BODY:
ゲームツールというところでタッチパネルを扱っている。
7インチタイプ 4980円(内税)
8.9インチタイプ 5980円(内税)
このタッチパネルは、かつてあちこちで売っていた ET-1000 などとは違い、汎用品を組み合わせたものらしい。ポン付けできるようなものではなく、電子工作の知識が必要。
コントローラは、AITENDO で扱っている
タッチパネルコントローラ(USB)CY-4W-USB-03 4800円とほぼ同じ。(ケーブルは同じに見えるし、基板の大きさも同じ。ただ写真と部品の配置が若干違う)
タッチパネルも、タッチスクリーン(7.0ワイド) 6500円 と同じっぽい。写真は違うように見えるが、データシート(bmp)を見ると同じのように見える。
なぜこんなに詳しいかというと、実は買ったのだ。だがしかし、装着しようとする以前の段階で、不注意でパネルを割ってしまった。タッチパネルは使ってみたいのでまた買いたいとは思っているのだが、またやってしまいそうで、ちと怖い。それに、Eee PC 701 Origami化キットなどという謎なものが出るかも知れない。本当に出るのならこれも面白いかなと思っていたり。
あと、注意点としては、
tie2's labo: EeePCの改造・タッチパネルの盛り上がり対策といったことが必要。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SmartQ 5 MID 購入中
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 05/06/2009 15:33:58
-----
BODY:
前々から、Linux が乗っていて(PCではない)情報端末が欲しいと思っていた。いままで候補は Pandora しかなかったのだが、ひょっこり SmartQ 5 MID というのが発表された。こいつがとても欲しい。
いったいこいつは、どこで買えるのか?
国内のショップで買えるのが一番嬉しいのだが、いつになったら買えるようになるのか?
結局しびれを切らし、いま買えるところを探すことにした。
まずは、ここで買えることはわかった。
http://www.gbax.com/smartq5.html
ただし、商品代金だけで、£ 129.99 (2万円弱)とかなり高価。(中国での価格は、1万3千円ぐらい)
それ以外だと、(現在は)中国から直接買うほかなさそう。でも、とても直接の取引はできそうにない。個人輸入代行業者というものがあるらしいので、今回は ジャスティンに頼むことにした。
ここを通す場合は、中国のネットショップを自分で探して URL を教えればよいらしい。淘宝網の定額オークションも OK そうなので、smartq で検索して出てきたところのうち、安心そうなところを見繕ってみることにした。
値段は、898 元。ジャスティンを通すときのレートが、14.7 円。手数料はこれの 16%。計算すると、15320 円。他にも送料とか、いろいろかかるが、実費に近いかんじ。
ところで、なぜ PCではない 情報端末なのか?
PC は便利すぎて、持込み不可のケースがある。こいつは PC ではないからそういう制限には引っかからないというのが理由の一つ。
あと、PC はどうしても 消費電力が増える。軽くて、長時間動作するものはまだ無理そう。たとえば mbook M1は 4時間前後とかなり健闘しているが 2 セル使っても そのあたりが限界。それに比べて Pandora なんかは 10時間前後と 倍近く持ちが違う。SmartQ 5 MID はどれぐらいなのか分からないものの Pandora 並が期待できるような気がする。
もっとも重要なことを書き忘れていた。瞬間のサスペンド&レジューム。PC は、とろい。701SD-X (XP) など 画面が点灯するまで 20秒ぐらいかかる。これでは、いつでも どこでも使うのは無理。
つぎに なぜ Linux 情報端末が欲しいのか?
ubuntu が載っていれば、したいことはなんでも出来そういうのが理由。無線LAN で接続して、キーボードもつなげれば もっさりはするが、701SD 程度には使えそうだし。うまくカスタマイズできれば、どこでも使えそうな感じがする。Windows Mobile と比べればはるかに自由度が高い。
最後に、なぜこの SmartQ 5 MID なのか?
いま買えるのがこれだから。
将来 Pandora なんかも買えるようになるかも知れない (予約組以外は 2009 年末〜?)し、最近発表された SmartQ 7 Internet Tablet MIDなんてのも良さそう。
そして本命は、 NVIDIA Tegra とか TI OMAP4 が載ったものだと思うのだが、自由に使えるようになるのは Pandora 以上に先の話になりそうだ。(ものが出ても iPhone みたいなものだと自由には使えない。そういう意味でも時間がかかる可能性がある。)
というわけで、これを買って当面遊んでみるのだ。あ、でも SmartQ 7 は、なんか良さそうな気がする。安いだろうし、これも買ってしまうかも。
SmartQ 7 追記:
engadget(中国版)記事を見ると、解像度は 800x480 と Q5 と同じみたい。新たに違うCPUで開発するのは大変そうだし、Q5 と同じ CPU, OS に違いない。ちなみに バッテリーは 2000mAH → 4500mAH と増えていて、48 時間 音楽を鳴らせるらしい。
そうして、その程度のものなら、Q5 の 3〜4 割増しの価格に違いない。... というわけで Q5 が使い物になったなら たぶん Q7 も買ってしまうに違いない。
(追記の追記)淘宝網 で 1199元なのを発見。... ということは、3.3 割増し
(追記の追記2)engadget日本語版では 1000元との情報が ...
(追記の追記3)200 x 120 x 24mm、480g だそうだ。
5/8 追記
5/6 に ジャスティンに頼んだのだが、5/7 に 入金依頼が来て 5/8 に確認メール。で、5/8 中に発注してくれるそうだ。
ぼんやりしていると なにも分からない状態でモノが来てしまいそうだ。
というわけで、ググって情報を集めてみた。
まず、ファームウェアとはいかなるものなのだろう?
ダウンロードセンターにいくと、164MB の V1.0 のファームウェア(ファイル名:SmartQ5)と なんだかよくわからないツール(SDUpdateToolV1.0.rar)が落とせるようになっている。
実際落としてみると、ファームウェアはなんだかよくわからない形式。ツールの方は Windows のツールで SD になにかするものらしい。ドキュメントらしきファイルもあるのだが、中国語プレインテキストらしく読むことすらできなかった。
結局さっぱりわからず、はたして使いこなせるのか不安になってくる。
で、ググっていって http://bbs.imp3.net/archiver/tid-583519-page-1.html というページを発見。
このなかのドキュメントに SD カードにシステムをインストールして dualboot にする方法が書いてある。
これをベースに勝手に(想像で)改変。
SmartQ5システムをSDカード上にインストール
zhongzf 2009.5.4 08:23
1. SDカードに対して次のように 4つのパーティションを作る。
ID
1. fat32 0x0b FWを格納 200MB 以上
2. ext3 0x83 rootfs 512MB 以上
3. ext3 0x83 home 任意の量
4. swap 0x82 128MB 以上
注意) 最後の 1MB 程度 を 割り当てずにおくこと。ここに
ブートストラップのコードを後で書くため
2. 最新のファームウェア(SmartQ5)をダウンロード
第一のパーティション vfat 領域に置く。
※ 置かないほうがいいかも。
3. SmartQ5Extractor を使って SmartQ5 から
rootfs.tar.gz , home.tar.gz を取り出す。
※ http://zhongzf.cnblogs.com/
※ .net 2.0 が必要
4. rootfs.tar.gz を SDの第二パーティションに展開する。
tar -xvpf rootfs.tar.gz
※ カーネル(zimage) と initrd(initramfs.igz) は、
第一パーティションに置いた SmartQ から取り出して
ロードするように思える。
5. rootfsパーティション(つまりSDの第二パーティション)の
/etc/fstabを次のように変更する
# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/mmcblk1p2 / ext3 relatime 0 1
/dev/mmcblk1p3 /home ext3 relatime 0 2
/dev/mmcblk1p4 none swap sw 0 0
/dev/mmcblk0p1 /mnt/rootfs ext3 relatime 0 1
/dev/mmcblk0p2 /mnt/home ext3 relatime 0 2
6. home.tar.gz を SDの第三パーティションに展開。
7. ダウンロードセンターのツール(SDUpdateToolV1.0.rar)を
インストール(実行はまだ)
8. u-boot.bin.zipをダウンロードし、解凍。u-boot.bin を
SDUpdateTool のインストール先のファイルと入れ替え
ツール実行
http://www.imobile365.com/forum/download/file.php?id=29
※ ファームウェア(SmartQ5) にも u-boot.bin がある。
V1,Tool : U-Boot 1.1.6-gdae20df8-dirty (Apr 2 2009 - 17:20:56) for SMDK6410
download: U-Boot 1.1.6-gb3eb2e07-dirty (Apr 30 2009 - 16:41:29) for SMDK6410
V2 : U-Boot 1.1.6-ge752a817-dirty (May 8 2009 - 13:54:19) for SMDK6410
単に新しいのを使えということらしい。
→ V2 の u-boot.bin が良さそう。
9. 作ったSDカードを挿入して、ALT ボタンを押しながら、マシンを起動する。
こんな感じらしい。
とにかく、ボタンを押しながらのreboot で、SDからシステムを立ち上げられることだけはわかった。
そして、そのためには、u-boot を SDカードの最後に書き込まないといけない。
あと、内蔵 FLASH が /dev/mmcblk0 で SDカードが /dev/mmcblk1 らしい。.... ひょっとして 内蔵 FLASH も SD/microSD なのか?
実は、内蔵 FLASHの寿命というのが気になっている。swap もあるようだし、使い方が悪いと壊れてしまいそうだ。
取り出せないだけの SD/microSD なら 壊れても自分で治せそうだし嬉しいのだが ... 実際はどうなのだろう?
最後に ... SmartQ5Extractor で、rootfs.tar.gz を取り出せるので、別 の ARM マシン(つまり LS-XHL)でいろいろ 試せそう。ちょっとやってみる予定。
ちょっとやってみた。結論からいうとダメ。
rootfs.tar.gz を展開して、chroot してみると Illegal Instruction 。
LS-XHL のカーネルは、2.6.22 。gnueabi をサポートしている。
なんかまったく動かないのではなく、サポートしていない命令を本当に使っているような感じ。
S3C6410は、
cpuinfo:
Processor : ARMv6-compatible processor rev 6 (v6l)
BogoMIPS : 665.54
Features : swp half thumb fastmult vfp edsp java
だそうだが、
LS-XHL は、
cpuinfo:
Processor : ARM926EJ-S rev 1 (v5l)
BogoMIPS : 1199.30
Features : swp half thumb fastmult edsp
たぶん vfp を使っているのだろう。残念。
追記:
CONFIG_VFP=y なカーネルだと エミュレーションしてくれるらしい。でも カーネルをビルドするのは 面倒だったり。
おまけ:
スペック
(追記) q5 startup prcessという記事を発見。嬉しいことに英語で書いてくれている。
Q5 upgrade tool flash the u-boot.bin, zImage and initramfs into NAND, their location are 0x0002, 0x0202 and 0x1000;
And unzip the rootfs.tar.gz and home.tar.gz into inner SD, the partions of the inner SD are structed 1. rootfs(ext3), 2. home(ext3), 3. swap.
※ Q5 upgrade tool は、initrd の /bin/upgrade のことらしい。
Normally while Q5 starts, the cmdline is "console=ttySAC0,115200n8 root=/dev/mmcblk0p1 rootwait splash", the zImage loaded, then boot the system on the inner SD.
While "Alt" down, the cmdline is "console=ttySAC0,115200n8 rdinit=/sbin/init", after load zImage, the initramfs is loaded, and there is a "upgrade" tool on the ramfs under /bin is executed, the "upgrade" tool will check the /dev/mmcblk1p1 for the rom file SmartQ, then load the rom file, extract it and check crc, then flash them on their location.
※ ここの the "upgrade" tool も /bin/upgrade
ps. and I guess, u-boot.bin can also read SmartQ on mmcblk1p1, and load the zImage and initramfs from the rom file, so that while the files on the NAND are destoried, it can also bootstrap, and flash them again.
※ NAND と inner SD は別もの
要するに u-boot.bin, zImage and initramfs は、NAND FLASH に置かれ、内部に システム用 SD があるということらしい。
なら、分解すれば、もっと高容量のものと交換できるかも。
まぁ、いろいろはっきりしないことがあるが、その辺りは実機が来てからボチボチやれば良さそうだ。
5/11 追記 ファームウェア V2.0
5/8 に ファームウェア V2.0 が リリースされた。
SmartQ5Extractor (v2.4) を使って展開すると ..
header
qi.nb0 不明 (SDUpdateToolV1.0にも添付) 3208バイト
u-boot.bin u-boot ブートローダ 99032 バイト
zimage Linux カーネル (u-boot 形式)
initramfs.igz initrd (u-boot 形式)
rootfs.tar.gz rootfs イメージ
home.tar.gz /home イメージ
のファイルを取り出せる。
まず、qi.nb0 はなんだろう。strings でチェックすると
Qi Bootloader s3c6410 debian master_316aa06163e44f90
Read SDMMC
sdhc
sd
uboot success
uboot fail
SMDK6410
なんて文字列が見える。すなおに考えると uboot を起動するブートストラップに思える。そして、SD から読み込むのだから uboot は SD に置いてあれば良さそうに思える。
つぎに u-boot.bin に strings をかけて、興味を引いた文字列をピックアップ
U-Boot 1.1.6-ge752a817-dirty (May 8 2009 - 13:54:19) for SMDK6410
Error iNAND START 1
Error iNAND START 2
Load upgrade image from SD(%s)
/SmartQ5
Load upgrade image from SD(%s)
/u-boot.bin
Board: SMDK6410
## Loading Ramdisk Image at %08lx ...
Bad Magic Number
No Linux ARM Ramdisk Image
Starting kernel ...
FAT32
FAT12
FAT16
この u-boot は、1.1.6。 SMDK6410 というのは、SAMSUNG が出している評価ボードで 2個の SD スロットと 800x480 の LCD が付いている。これ用にカスタマイズされたものを ベースにしているらしい。(参考:SMDK6410 User's Manual (pdf))
で、この u-boot は、SD (FAT) の /SmartQ5 というファイルを使って upgrade することができるようだ。
SmartQ5 のファイルフォーマットは、u-boot の ROM File というものかも。strings で調べてみると、上記の 文字列が見えるので、圧縮とか暗号化はされていないようだ。tar みたいな 割と単純なフォーマットではないかと思う。
もちろん主機能は、zimage と initramfs.igz をメモリにロードして、Linux を ブートすること。
その u-boot すら、qi.nb0 で SD カードから ロードされるみたいだから、zimage と initramfs.igz も SD カードに置くのが普通に思えるのだが ...
ところで、qi.nb0 をブートするのは誰なのだろう?
よくわからないのだが、S3C6410 データシート をみると、S3C6410 に Secure Boot ROM というのが載っているようだから、ここから ブートするのではないかと思う。
カーネルがブートすると、initramfs.igz が動作して、必要なら、rootfs.tar.gz home.tar.gz を展開して、upgrade を完了させるのだろう。
で、initramfs.igz は 普通の initrd フォーマット(cpio+gzip)ではないようだ。file コマンドで見ると PPCBoot image と出る。ダンプしてみると、header に Compresssed initial ramdisk と出る。
initramfs.igz は u-boot の形式で 64 バイトのヘッダが付いている。(忘れてた) 。たとえば
dd if=xxx of=yyy bs=64 skip=1
とすることで中身が取り出せる。中身の形式は普通の cpio + gzip
中身を見ると ほとんどの初期化処理が /etc/inittab に直接書き込まれている。
console::sysinit:/bin/upgrade /mnt/mmcblk1p1/SmartQ5 /dev/mmcblk0 1
#console::sysinit:/bin/upgrade /mnt/mmcblk1p1/SmartQ7 /dev/mmcblk0 1
なんて記述もあり、自動的に upgrade できるようになっているようだ。
あと rootfs.tar.gz を展開して、ファイルをチェックしてみた。
ディストリビューションのベースは、ubuntu Hasty ARMv6EL-VFPで、これのベースは、ubuntu hardy(8.04LTS) らしい。
S3C6410 は、ARM11 で ソフト見えのアーキテクチャは、ARMv6 。 ARMv6 というのは、ARMv5 の拡張だった VFP と java(jazelle)が標準になったもの。
5/11 追記 SDUpdateToolV1.0 で ブートストラップのコードをSD の後に書くのは本当か?
ほんとうにブートストラップが SD の後ろに書き込まれるのかどうか確認してみた。
手順:
まず、1GB の microSD を用意して、あらかじめ すべての領域を 0 クリア。
つぎに パーティションを 4 つ作り 最初の vfat に SmartQ5 ファイルを置く。
SDUpdateTool を実行。
Linux で、パーティション外の領域をチェック
しらべてみたところ .. オフセット 7168 から u-boot.bin のイメージが書き込まれていた。ただし、まったく同じではなく後ろの 数百バイトの内容が違う。
また、その後ろ ほとんど最後のあたりに、qi.nb0 のイメージが書き込まれていた。これも 最後の方の内容が違う。
違うのは、設定データなのだろう
これらが書き込まれたということは、S3C6410 内のブートローダが、まず SD から qi.nb0 をブートし、qi.nb0 が u-boot.bin をさらにブートする ということを意味している。
u-boot.bin さえ ブートしてしまえば、SmartQ5 ファイルを読み込んで アップグレードとかできるようになるはず。
ところで、なぜ ブートの仕組みを延々調べているかについて説明しておく。
ブートの仕組みが分かると、たとえば、自分でビルドした Linux カーネルを動かすとか ... 他の ディストリ、他の OS を動かすとか といったことができる範囲に入ってくる。ただし、入れ替えに失敗したら JTAG とか特別な装置が必要になるのでは、非常に困る。
安全に OS を入れ替えられるかどうか ... というのは 重要なのだ。
その点で、SmartQ 5 は、非常に良さそうだ。あとシリアルコンソールがあれば ...
それについても ブートパラメータに console=ttySAC0,115200n8 とかが入っているなど、期待できる要素はある。基板に シリアルのパターンがあったりするかも知れない。
あとは、inner SD が交換できると さらに嬉しいのだが ...
なんだかんだで、期待が膨らんできた。到着が待ち遠しい。
5/12 追記 ボード写真を発見!
- http://bbs.imp3.net/thread-568807-1-2.html
- http://bbs.imp3.net/thread-568692-1-1.html (X線写真)
これ見ると SanDisk の iNANDというデバイスを使っている。X線のほうを見るとよくわかるが、BGA で交換できるようなものではなさそう。ちなみに iNAND は MLC で Read 10MB/sec, Write 9MB/sec だそうだ (追加の製品情報(pdf)より)。
こっちの商社のページの方が分かりやすい。ウェアレベリング機能があるみたいだから、壊れることはそれほど心配することはないのかも知れない。データシートのリンクがあるので見てみたが、ピン数の割りに信号線が少なく SD + αという感じ。世の中には こんなひとたちもいるらしいから、交換とか改造は不可能というレベルではないかもしれない。
ちなみに、私の実験では SanDisk の MLC 2GB に対して Write し続けて 37 日で壊れた。この 1GB iNAND が 同等のものだと仮定すると 1/2 の 19 日ほどで 壊れる計算。普通 Write ばかりしているということはないので その 数十倍(3年以上?)は使えると思っていいと思う。
ちなみに、無線LAN は USI WM-G-MR-09 (SDIO) 。Bluetooth は、USB 接続っぽいモジュールが 金属のSD スロットの上に載っていて見るからに適当。(ひょっとして試作品?)
あと、バッテリーとは 2本の線で接続されているのみ。( バッテリー自体には制御基板が付いている )
シリアルコンソール? 全然判りません。
おまけ: 左上のブロックは、イヤホンジャックで その下に内蔵マイクが見える。あと ボタン状の物体は、電池じゃなくて 小型スピーカ。
追記: 5/13
書留番号のお知らせ なんてのが来た。航空書留で発送したそうだ。今週末に入手できるかも。
追記:
http://www.eletroworld.cn/nb/SmartQ_service.htm
ここに、有用な情報が!
5/15 追記 発送のお知らせ というのが来た。
発送:2009/5/12日
航空書留:153.8元(重量:1664g)
検品手数料:25元
ご請求合計:178.8元=2,610円(レート14.6)
この金額を ジャパンネット銀行 に振り込めばよいらしい。
ところで、実をいうと、2 個買った。
前回、払った金額はこれ。
商品代金合計:1796元
国内基本送料:30元(超過の場合は国際送料で精算)
手数料:287元(16%)+追加1品目×20元=307元
合計:2133元=31,570円(レート14.8)
2個合計で 34180 円 + 振込み手数料 x 2 の金額がかかったことになる。
振込み手数料は条件によって変わるし気にしないことにすれば、1個あたり 17000 円ほど。1 個の購入なら 18000円ぐらいか。もっとも 問題はこれから。良品かそうでないかで 面倒やコストが全然違う。
5/12日発送で、1週間〜10日ほどかかるそうだが、全然 追跡サービスで見えない。こっちも リンク先の中国のサイトもだめ。
いったい何時になるのだろう?
5/16 追記 追跡サービスに情報が出た!
5月12日 17:55 引受 CHINA
5月16日 0:22 国際交換支店/局に到着 XX国際支店
5月16日 0:23 通関検査待ち XX国際支店
5月16日 17:27 国際交換支店/局から発送 XX国際支店
5月16日 23:03 通過 YY支店
5月17日 6:42 到着 ZZ支店
5月17日 10:54 お届け先にお届け済み
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
COMMENT:
AUTHOR: 小職
EMAIL:
IP: 219.112.13.32
URL: http://blog.livedoor.jp/as72_com/
DATE: 05/11/2009 12:43:47
SmartQの情報収集がてら立ち寄らせて頂きました。
購入中なんですね!
いいですねぇ〜!
レポなどもすごく楽しみにしております〜
怪しげで超楽しそうなデバイスですよね。。
-----
COMMENT:
AUTHOR: odawara
EMAIL:
IP: 220.110.185.192
URL: http://d.hatena.ne.jp/odawara/
DATE: 05/11/2009 13:32:36
はじめまして、odawaraと申します。
SmartQよいですよね。私も購入を考えていましたが、個人輸入代行業者は考えてませんでした。なるほど。
詳細レポート期待してます!
-----
COMMENT:
AUTHOR: Verus
EMAIL:
IP: 114.159.91.160
URL: http://d.hatena.ne.jp/verus/
DATE: 05/13/2009 02:16:38
はじめまして.Verusです.
自分もTaobaoナビで見積もってもらいました.
http://d.hatena.ne.jp/verus/20090513/1242147788
送料手数料込で18505円だそうです,
ただ,若干品薄のような旨を伝えられました.
もし手に入ったら,ぜひぜひ情報交換しましょう!
-----
COMMENT:
AUTHOR: kazu
EMAIL:
IP: 210.165.224.235
URL:
DATE: 05/14/2009 19:27:37
smartqの情報ブログが少ない中、ありがたい内容ですね!
本体は今日到着しましたが、WINDOWSしか触った経験が無いので現在奮闘中・・・。
日本語化に対しての簡単なやり方の情報があると嬉しいです。
すzさんのsmartq到着後のブログ展開、期待してます!
-----
COMMENT:
AUTHOR: infinite
EMAIL:
IP: 59.135.222.130
URL:
DATE: 05/14/2009 23:57:20
通りすがりのinfiniteと申します。
SmartQ 5 MID、ガジェット大好き&Ubuntu大好きな私も興味津々です。
>>kazu様
PCにてUbuntuのライブCD(HDDにインストールせずにCDから起動する機能)を使ってUbuntuに慣れてみるのも手かと思われます。PC側で日本語を読みながら、SmartQ 5 MIDを操作…といった具合に。
ちなみにx86向けのUbuntu 9.04 Desktopの場合、[システム]→[システム管理]→[言語サポート]にて言語の設定を行います。
言語メニューの内容を上から箇条書きにすると以下のようになっています。
> このユーザのメニューとウィンドウで使用:
> 起動時とログイン時に全てのユーザで使用:
> 同じ言語にする(←チェックON)
> 複雑な文字を入力するためにIMEを使う(←チェックON)
> 全ての変更は次回ログイン時に適用されます。
> 言語のインストールと削除...
-----
COMMENT:
AUTHOR: infinite
EMAIL:
IP: 59.135.222.130
URL:
DATE: 05/15/2009 00:20:34
改めて手元のUbuntuを中文化してみました。
[システム]→[システム管理]→[言語サポート] に該当するところは
[系統]→[系統管理]→[語言支持] といった感じになってます。
(※一部の漢字が実際とは異なります。笑)
-----
COMMENT:
AUTHOR: kazu
EMAIL:
IP: 210.165.224.235
URL:
DATE: 05/16/2009 15:06:07
infinite様、アドバイスありがとうございます!一度メインPCでライブCD作って試してみます。
今日、ブログにあったver2.0にUPしました。
ver2.0のUPをしたところリカバリみたいに初期出荷に戻りました。
smartq5のUbuntuを触っておかしくなっても、戻せることが判り、気兼ねなく色々触れそうです^^
-----
COMMENT:
AUTHOR:
EMAIL:
IP: 210.165.224.235
URL:
DATE: 05/16/2009 15:08:22
あと2.0にUPして気がついた点、ブラウザでタッチスクロールが出来るようになってました。
これは嬉しいですw
-----
--------
AUTHOR: すz
TITLE: SmartQ 5 MID 用にいろいろ購入
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 05/13/2009 05:45:27
-----
BODY:
SmartQ 5 MID で遊ぶためにいろいろ買ってみた。
miniA ⇔ Aメス (20cm): Arvel AUMA02WH
miniA ⇔ miniB (1M): Arvel AUM20MA04
まずは、USB ケーブル。miniA しかないから なにかを接続するには必須。
普通は、Aメスタイプを買っとけば事足りるはずだが、すっきりとはいかない。miniB タイプの機器もいくつか持っているし、すっきりさせるためにケーブルを付け替えるようなことも考慮して、miniB のケーブルも複数買ってみた。
ちなみに、amazon ではなく、ValueMore!というショップにした。ここだと ケーブルは 500円台。
注意: 05/18
なんと、本体のコネクタは、一般的な miniAB ではなく miniB だった。miniB は装置側の規格。Host にもなる場合は miniAB のコネクタを使う。ところが、SmartQ5 は miniB ... miniA のケーブルがほぼ無駄になってしまった。無駄になった以上にやっかいなのは、miniB ⇔ A メス なんてケーブルは存在しないこと。自作するしかない。
実をいうと、miniAB のコネクタは、Digikey などで売っていて 持ってたりする。付け替えたりするのも一つの方法かも。
とりあえず、一番楽なのは、Aメス⇔Aメス のいわゆるジェンダーチェンジャーを作ること。2本の延長ケーブルを使えば(見栄えは別として)安く作れるはず。
Aメス⇔Aメス変換器ならいくつかあることが分かったのでメモ:
AD-USB2 (サンワサプライ)
AUSB-AFAF (ケーブルダイレクト)
USB LANアダプタ BUFFALO LUA2-TX
V2.0 の ファームウェアから USB LAN アダプタのドライバが入っている。やっぱりあると便利なんだろう... ということで、定番らしき、BUFFALO のやつ(ドライバは pegasus)を購入。
USB接続 テンキーボード BSTK01BK
PC に接続するときは、ネットワークでつなぐし、キーボードは特別には必要ないはず。でも持ち歩くときにキーボードがあると便利なこともあるかも知れない。
で.. 検討してみた。
超小型キーボード(幅17cm) の AOK-EN56BKが一見良さそうだったのだが、レビューみて パスすることに決定。なんでも 初代 LOOX-U とほぼ同じ配列らしい。
次に BlueTooth 系 。なんか良さそうなのが結構ある。
サンワサプライのSKB-BT11BKとか結構安くなっているし、I/O DATA の CPKB/BTもすごく良さそう。あと、リュウドの 2100BTJも定番っぽい。
でも、結構高いし ... 使う場面も結局はあまりなさそう。とりあえず保留 ... 。
で、結論がコレ。持ち歩きながら使うとすれば、テンキーで携帯入力でしょう。サイズも 120x80x16 mm と 120x74x14 mm の SmartQ 5 とサイズが近い。うまく加工できれば なんか微妙なガジェットぽくなって面白いかも。
もちろん、ソフトのアテはない。... それだけでなく、携帯入力は苦手。
なんというか... ものづくりのネタとして 採用というところ。
5/14 追記 テンキーについて調査
まず、Xのプログラムを作れば キーに割り当てられた キーコードが取得できる。これについて /usr/share/X11/xkb/keycodes/xfree86 を見て調査してみた。ちなみに、USB キーボード自体にも 決められたキーコード体系があって X のものとは違う (参考→ USBキーボードのキーコード)
NumLock / *
77 (NMLK) 112 (KPDV) 63 (KPMU)
7 8 9 -
79 (KP7) 80 (KP8) 81 (KP9) 82 (KPSU)
4 5 6 +
83 (KP4) 84 (KP5) 85 (KP6) 86 (KPAD)
1 2 3
87 (KP1) 88 (KP2) 89 (KP3) ENTER
108 (KPEN) or 36(RTRN)
0 .
90 (KP0) 91 (KPDL)
この表は 109キーボード(英語キーボードも共通) のもので、USB テンキーとは違う。
BSTK01BKはまだ入手できていないのではっきりとは分からないのだが ...
右上 が BS キー、下の真ん中に 000 キーが付いている。(たぶん 000 は 0 x 3連打) そして、NumLock は、本体キーボードとは連携しない。--- ローカルに切り替えるのだろう。さらに、最近のものは、大概 NumLock の位置が TAB キーになっている。(NumLock はその上の小さなキー)。
携帯風入力 ソフトを作るなら上の表のキー( NumLock以外) だけで使えるようにすべきだろう。
どのように作るかは、あまりイメージできていないが、上の表のキーを Hotkey みたく横取りするアプリケーションで、確定文字列を 入力バッファー(?:良くは知らない)に送り込むとか そういうものが良いような気がする。あと、NumLock で切り替えた場合、矢印キー と INS,DEL,HOME,END,PgUp,PgDn のコードが出ると思うが、これらは 関知しないことにする。(フォーカスしたアプリケーションに渡る)
携帯キーボードの配列はこんな感じか?
112 (KPDV) 63 (KPMU)
HOTKEY1 HOTKEY2
79 (KP7) 80 (KP8) 81 (KP9) 82 (KPSU)
1 2 3
あ か さ 文字種
. / @ ABC DEF
83 (KP4) 84 (KP5) 85 (KP6) 86 (KPAD)
4 5 6
た な は CLR
GHI JKL MNO
87 (KP1) 88 (KP2) 89 (KP3)
7 8 9 108 (KPEN) or 36(RTRN)
ま や ら
PQRS TUV WXYZ ENTER
90 (KP0) 91 (KPDL)
0 #
わをんー 、。?!
- +
HOTKEY1、HOTKEY2 は未定のキー。必要なければ HOTKEY にするという程度の意味。
... とまぁ設計を始めてしまっているが、ただのメモ。気が向かないと作らないかも知れない。
メモ: X(Xorg)での Hotkey
- http://lists.freedesktop.org/archives/xorg/2006-February/013131.html
> I am looking for some informations how xorg handle hotkeys, how i can
> register/unregister hotkeys and how i can get notifyed for a hotkey.
Search docs about XKB. Config files are:
AT keycode to X keycode
/etc/X11/xkb/keycodes/xfree86
"hotkey" to keysym
/etc/X11/xkb/symbols/inet
Probably hotkey on press produces keycode 130 , which is .
# setxkbmap 'us+inet(azonaRF2300)'
command set up layout 'us' plus "internet keys" for keyboard
model "azonaRF2300". That means hotkey (keycode 130) now have
keysym XF86WWW .
X applications can recognise keysyms ;o)
Aivils
実を言うとよくわからないが、これが答えらしい。
追記:USB HOST ケーブルを作ってみた
細いケーブル同士をつないで絶縁するのは面倒なので秋月の 16ホールユニバーサル基板を使って 2つの USBケーブルをつなげてminiB⇔Aメスにしてみた。
とりあえずテストするぐらいには使えるが、見栄えも耐久性も難がある。
ケーブル同士をつなぐぐらいなら、基板取付用USBコネクタ(Aタイプ、メス)に直接つないだほうが良さそう。
もっと良いのは、すなおに Aメス⇔Aメス 変換器を使うことだろう。普通の miniB ケーブルが、手間なしに miniB⇔Aメスになる。ただ、入手が難しいかも。
千石で、こんなものを発見 カモン AF-5M mini-B ⇔ Aメス変換!
追記:
SHINO BLOGでこんなの作っている。
千石で USB miniB 端子を入手できたので ... なんて書いてある。入手できるものなのか ... メモメモ。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
COMMENT:
AUTHOR: かぢ
EMAIL:
IP: 114.181.231.40
URL:
DATE: 05/21/2009 08:24:10
コメント先を間違えました。
http://www.amazon.co.jp/USB2-C4/dp/B001992ZT0
こちらの商品はどうでしょうか。
-----
COMMENT:
AUTHOR: すz
EMAIL:
IP: unknown
URL:
DATE: 05/21/2009 08:51:21
これ Amazon の記述が間違っています。
http://www.iodata.jp/product/mobile/nfc/usb2-c4/spec.htm
には、A(オス)って書いてあります。
-----
COMMENT:
AUTHOR: ipip
EMAIL:
IP: 119.150.14.74
URL:
DATE: 09/28/2009 07:50:53
このページを参考に秋葉原に買い物に出かけました。
miniB←→Aメス、今は普通にあるみたいですね…
http://www.henj.in/CABLE.html
USB A→mini USB(5pin タイプ)(20cm)
-----
--------
AUTHOR: すz
TITLE: SmartQ 5 到着
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 05/17/2009 17:06:24
-----
BODY:
5/17 10:54 ついに届いた!
開封
ダンボールの箱を開けると、20 cm 角ぐらいの立派な紙箱とおまけの巾着ぶくろが入っていた。
巾着ぶくろは、2枚重ねのフリース製。結構立派なものだった。
箱を開けると、トレイがあって本体が乗っている。トレイの下には付属品。
付属品は、AC アダプタと USB miniB ケーブル、イヤホン。その下には、保証書やら説明書らしきものが敷いてあった。
ACアダプタは、5V 1A 。DC ジャックは 外径 2.5 mm ほどの細いタイプ。
→ ちなみに、GH-UHK204SSのACアダプタ(5V 2A)と同じ形状 同じプラグ。
→ 普通に 電圧区分1(外径 2.35 mm, 内径 0.7 mm)みたい。
miniB は何につかうのだろう?
→ どうも Device Mode を持っていて Removable Disk として見えるらしい 。
→ SDカードのFAT領域が パーティションなしの状態で 見えた。Vendor: Linux Model: File-Stor Gadget だそうだ。
さて、本体について。ただの黒いプラスチックの直方体というかんじ。そこに液晶がはめ込まれている。精度は高く安っぽい感じはあまりしない。
とりあえず、2台買ったうちの1つ(以下1号機)に、shop99 で買った FREE CUT 液晶保護フィルムを貼ってみた。シートは 70x140 mm 。これを 64 x 100 mm にカット。適当にやったので気泡だらけ。
買いなおして、1号機,2号機とも貼ってみた。もっとぎりぎりに 61mm x 97mm に変更。あと、気泡は ゴミがあるところが浮いているだけということが分かった。
ファームウェアのアップグレード
まずは、AC アダプタをつなげて充電しながら、起動するかどうかの確認。-- OK。
立ち上がったら最初に Power ボタンと Move ボタン同時押しをして、キャリブレーション(触膜屏校准)。-- OK 。
中国語は全然わからないので、とりあえず V2.0 にして、つぎに英語化することにした。
まずは、電源を Off 。電源ボタンを押すと、系統管理没置(System Manager Setup)パネルが出るので、下から 2 番目の電源マーク(Power off)を押す。
FAT32 でフォーマットした SD カードに、SmartQ5 をいれ、SD スロットに挿入し + ボタンを押しながらPower ボタンを押す。
正在格式化根分区なんてメッセージが出て、正在弁級プログレス。最後に 弁級成功 メッセージ。
更新中は黄色になるはずなのだが... 1号機はなぜか緑ランプのまま。2号機は黄色なので、なんか変??
英語化
メニューの下から2番目 (Run) を実行し
sudo leafpad /etc/default/locale
LANG を zh_CN.UTF-8 から en_US.UTF-8 に変更してリブート。
これで、メニューが読める!
1. Accessories
1-1. Galculator
1-2. Leafpad
1-3. Search for Files...,
1-4. StarDict
1-5. Xarchiver
2. Games
2-1. Gweled
2-2. Shishensho
3. Grafhics
3-1. Evince Document Viewer
3-2. Image Viewer
3-3. rgbPaint
4. Internet
4-1. Claws Mail
4-2. GNOME PPP
4-3. GNOME PPP
4-4. Midori Web Browser
4-5. pidgin Internet Messenger
4-6. Transmission BitTorrent Client
5. Office
5-1. AbiWord Word Processor
5-2. E-book reader
5-3. Gnumeric Spreadsheet
5-4. Osmo
6. Sound & Video
6-1. Audacious
6-2. SMPlayer
6-3. Sonata
7. System Tools
7-1. GDebi Package Installer
7-2. PCMan File Manager
8. Prefereces
8-1. Appearance
8-2. Blutooth Manager
8-3. Openbox Configration Manager
8-4. SysSettings
8-5. Wicd Network Manager
9. Run
10. Logout
SysSettings
8-4-1. Lock touchscreen and key
8-4-2. Enable BlueTooth and USB Host (Close mode of Removable Disk
8-4-3. Task Manager
8-4-4. Calibrate touch screen
8-4-5. Power off
8-4-6. Quit
Logout
Logout LXDE session?
10-1. Shutdown
10-2. Suspend
SMPlayer
SMPlayer は、別に英語化する必要がある。
ドライバーのアイコン(Preferences) で出てくるパネルの、左側上から5番目が、Interface これに切り替えると、右下に、zh_CN が出ているので、en_US に切り替える。
これで手持ちのビデオをいくつか見てみた。
- youtube flv
ほぼ問題なし FLV1 なら 問題がないようだが、中身が H.264 の flv だと 全然ダメ。
- youtube mp4
全然だめ。ブロックノイズだらけになったりする。動きが少ないシーンでは普通に。
H.264 だとダメだが、XVID だといけるとかあるかも知れない。
- XVID
手持ちの XVID 480x360 でアスペクト 4:3 , 16:9 共にダメ。デコードはできているみたいだが、色がずれる! 。
320x240 は問題なし。16:9 も OK 。
フルスクリーンにすると、横 640 になるようだ。4:3 だと 上下いっぱいになる。16:9 も 横は 640 で 縦が 360 になってしまう。
ちなみに、CPU クロックは アプリの起動時など 最大 666 MHz になるが、通常時は 100MHz になっている。320x240 の動画は 100MHz のままで、45 % 程度のシステム負荷。
- 全画面
800x480 をまるまる使った全画面モードもあるのだが、操作ができない。ホットキーがないと厳しそう。
追記:"-" ボタンで 中止が出来た。それだけだけど、できないよりマシ。
その他の問題点
SmartQ 固有のアプリが中国語のみなのはかわいい方、時計が いきなり 1970年になるとか、いろいろ問題がある。
実用で安心して使えるようになるまで時間がかかるかも。
追記:
時間が 1970 年に戻るのは、1号機のみだった。2 号機は リセットでも 問題ないのに、1号機はシャットダウンしても 時間がリセットされるし、サスペンドの後 時間が進まない。(サスペンドした時間のまま)
明らかに RTC(リアル・タイム・クロック) の問題なのだが、RTC は、CPU の内部の機能。壊れることはあまり想像できない。カーネルを書き換えられなくて古いままとか、そういった問題かも知れない。
カーネルは同じ mojo カーネル(2.6.24.7 #3530) だった。問題は何?
dmesg 見たら s3c2410-rtc: hctosys: invalid date/time となっていた。正常なら s3c2410-rtc s3c2410-rtc: setting system clock to 2009-XX- .... となる。
で、hctosys というのは hwclock の値を システム設定するということで、invalid と拒絶しているのは hwclock の値がおかしいため。
で、ググってみると、 mini2440 Source & Snapshots for mini2440 linux support というページに
Initializing the hardware clock
The RTC chip might come with garbage in, if you see this:
s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
...
Setting the system clock.
The Hardware Clock does not contain a valid time, so we cannot set the System Time from it.
Use "hwclock" to force it's initialization
# hwclock --set --utc --date="13 march 2009 09:54:00"
# reboot
なんて書いてある。これか! と思ってやってみたが...
Timed out waiting for time change.
となって reboot しても 1970 年になってしまう。
hwclock を使わずに、RTCのmanpageを見ながら自分で設定するプログラムを作ってみた。
それで、2009 年にはなった。リブートしても 1970年までは戻らない。... しかし、cat /proc/drivers/rtc としても 同じ時刻。
S3C6410 と (RTCは)互換らしい S3C2410Aデータシートを見てみたのだが、専用の端子は 専用の電源と 32KHz 水晶のみ。バックアップは出来ているみたいだから、水晶のところがおかしくて発振していないに違いない。どうしよう。
rxvtのインストール
無線LAN環境で、ちゃんとつながるかの確認 -- 両方OK。で、midori (ブラウザ)は、英語環境でもちゃんと日本語のページ (このページとか)を見ることができた。
2ch の情報より
http://repository.handhelds.org/hasty-armv6el-vfp/pool/universe/r/rxvt-unicode/
にあるrxvt-unicode_8.4-1_arm.debを内蔵ブラウザでダウンロードしてダブルクリックしてインストール。
よくわからないのだが、SD カードを挿して loopback ファイルを作れるようにしておかないと エラーが出る。???
あとは、Run メニューで
sudo rxvt
ついでに
sudo leafpad /etc/apt/sources.list
で、次のように修正
deb http://repository.handhelds.org/hasty-armv6el-vfp hasty main multiverse universe restrict
あと rxvt の文字がすごく小さい。初めて 800x480 を実感。
それはともかく、これで dmesg とか を見れるようになった。後で整理してまとめる予定。
カーネルメッセージ
おまけ:よくわからないものの、興味深げな リスト。
/sys/devices/platform/:
bluetooth/ s3c-hsmmc.0/ s3c-uart.1/ s3c2410-wdt/
dm9000/ s3c-hsmmc.1/ s3c-uart.2/ s3c24xx_led.0/
gpio-keys.0/ s3c-hsmmc.2/ s3c-uart.3/ s3c24xx_led.1/
gpio-keys.1/ s3c-ide.0/ s3c-vpp/ s3c24xx_led.2/
hhtech_gpio/ s3c-jpeg/ s3c2410-iis/ s3c24xx_led.3/
onenand/ s3c-keypad/ s3c2410-lcd/ s3c6410_OTGHCD/
power/ s3c-mfc/ s3c2410-nand/ s3c64xx-i2c.0/
s3c-ac97/ s3c-rotator/ s3c2410-ohci/ s3c64xx-i2c.1/
s3c-adc/ s3c-ts/ s3c2410-rtc/ smc911x/
s3c-camif/ s3c-tvenc/ s3c2410-spi.0/ soc-audio/
s3c-g2d/ s3c-tvscaler/ s3c2410-spi.1/ uevent
s3c-g3d/ s3c-uart.0/ s3c2410-usbgadget/
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
COMMENT:
AUTHOR: infinite
EMAIL:
IP: 59.135.222.130
URL:
DATE: 05/17/2009 18:24:53
すz様
ご到着おめでとうございます。そして早速のレビューありがとうございます。
もしよろしければDevice Managerによる詳しいスペックについて教えて頂けると幸いです。具体的にはチップセット、メモリ、記憶デバイス、無線LANモジュールの型番など。
お手数おかけしますがよろしくお願い致します。
-----
COMMENT:
AUTHOR: すz
EMAIL:
IP: unknown
URL:
DATE: 05/18/2009 10:01:52
まず、チップセットについて。S3C6410 は SoC -- システム・オン・チップという種類のもので、PC 的な考え方だと、CPU + North Bridge + South Bridge と思ってもらってよいと思います。前の記事にブロック図を貼ってあるのでじっくりとみると、なにか見えてくるかも。
メモリは、チップが直付けになっているので、PC のように 情報が分かるわけではありません。たぶん Linux が立ち上がるにはメモリが使える状態になっているはずで、その設定については Linux は知らないかも。
あとはデバイスについてですが、実は前の記事に書いているつもり。(ボード写真を発見!のところ)
無線LAN は、USI WM-G-MR-09 で SDIO接続。ストレージは システム用が iNAND それに SDスロット。この3つは S3C6410内の 3-Channel HS-MMC/MMC/SDHC/SDIO インターフェイスを使うようです。
Linux からどう見えているのかについては 別途書こうと思いますが、Linux のカーネルについて 詳しくない人にとって分かり易いものにはならないかも。
-----
COMMENT:
AUTHOR: infinite
EMAIL:
IP: 59.135.222.130
URL:
DATE: 05/18/2009 12:26:04
すz様
詳細な情報ありがとうございました。そしてご指摘頂いた通り、前の記事に書いて頂いておりました。
最近インターネットの普及でユーザーが「斜め読み」に慣れてしまい、結果として重要な情報を見落としてしまうという話を聞いたことがありますが…。私も例外なくその典型例だったようです。失礼致しました。
-----
--------
AUTHOR: すz
TITLE: SmartQ 5 に ログイン
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 05/21/2009 12:34:49
-----
BODY:
SmartQ 5 に USB NIC をつなげて ログインできるようにしてみた。
1. USB HOSTを使う
SmartQ 5 には miniB のコネクタが付いていて、PC と接続して 内蔵 SD カードを Removable Disk として使うことができる。
で、このコネクタを 使って USB HOST としても使えるのだが ソフトで切り替えなければならない。
デスクトップを一旦タップして、電源ボタンを 押すと、SysSettings メニューが出るので、
Enable BlueTooth and USB Host (Close mode of Removable Disk)
を押して、BlueTooth のマークのメニュー
Enable Removable Disk (Close mode of BlueTooth and USB Host)
に切り替える。
これをした後 USB の装置を接続。USB LANアダプタ BUFFALO LUA2-TX を接続すると、eth1 として認識されるので、
ifconfig eth1 192.168.XXX.XXX netmask 255.255.255.255 up
とかすれば、ping は通るようになる。(以下 XXX.XXX の XXX は 数字)
それは良いのだが、しばらくすると 勝手にサスペンドしてしまう。サンスペンドしたら復帰後 再度 ifconfig しなおさないといけない。すばやく再接続ことで、コネクションは切れないけど.. どきっとする。あと、一号機は RTC が動いていないので、サスペンドしたら時間が遅れるという問題もある。
勝手にサスペンドしないように設定すれば、この 2 つの問題は解決する。それをするには...
右上の電球みたいなマークが、電源管理。これをタップして、出てくるパネル最下の 没置 をタップし、休眠閑置時間のバーを 右端までもっていき 不休眠 にする。
2. telnet で login
SmartQ には、/usr/sbin/in.telnetd と /usr/sbin/inetd が入っている。まずはこれを使えるようにしてみよう。
最初に Run メニューで
sudo rxvt
あとの作業はすべて rxvt ですることにする。
- 2-1. /etc/init.d/openbsd-inetd の編集
15 行目に
if [ x"($cat /proc/cmdline | grep factory)" = x"" ]; then exit 0; fi
という行が入っているのでこれをコメントアウト
- 2-2. /etc/hosts.allow /etc/hosts.deny の 編集
次のように編集
hosts.allow :
ALL : 127.0.0.1
ALL : 192.168.XXX.0/255.255.255.0
hosts.deny :
ALL : ALL
- 2-3. inted の起動
# /etc/init.d/openbsd-inetd start
で、inetd を起動する。次からは自動で 起動するので、手動はこの 1 回のみ。
- 2-4. localhost での確認
# telnet localhost
で、login: が出るか確認
Handhelds 8.04
mojo login:
が出力されれば OK 。ただし、ユーザを設定していないので login できない。
- 2-5. login するための ユーザを作成。
# adduser abc
まずはパスワードを入力、あといろいろ聞かれるが 、最後のあっているかどうか聞かれるところまで ENTER で良い。(あと abc は 任意のユーザ名)
で、再度 telnet localhost で 確認。OK なら 一旦 exit して、sudo できるように設定。
- 2-6. /etc/sudoers の編集
user の行をコピーして つぎのように追加
abc ALL=NOPASSWD: ALL
再度 telnet localhost で login して、
sudo su -
ができれば OK 。
- 2-7. 外部から login できるか確認。
ホストの PC から ping できれば、次に telnet 出来るか確認してみる。出来ないとすれば、/etc/hosts.allow が間違っている可能性大。
3. メモ
とりあえずこれで telnet できるようにはなった。これで作業そのものや 作業のログを取るのがすごく便利になる。
ファイルのコピーとか 出来ないので まだまだ不便なのだが、それは別途ということにして、いくつか作業したことを書いてみる。
- localtime
login すると、時刻が CST になっていることに気が付く。
# cat /usr/share/zoneinfo/Asia/Tokyo > /etc/localtime
とすることで、JST になる。
- LANG の設定
telnet すると端末にもよるが、en_US.UTF-8 では困ることも出てくる。
# export LANG=C
とした方が良い場合もある。
- CPU クロックの確認と変更
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
で今のクロックが確認できる。scaling_max_freq , scaling_max_freq は 使用状況にあわせて動的に変更する上限と下限。
これを同じ値に設定することで、固定にできるわけだ。
echo 667000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 667000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
とすることで、最高速 の 667 MHz 固定にできるし、667000 のかわりに 1000000 とすることで、通常時のクロック 100Mhz にできる。
ちなみに、本当にそのクロックなのか確かめるには、/proc/cpuinfo の BogoMips を確認するのが良い。
- CPU の実力を測定
以前 使った dhrystone で比較してみる。
SmartQ5 (ARM S3C6410 100 MHz) 218340 (gcc-4.3.2)
SmartQ5 (ARM S3C6410 667 MHz) 877192 (gcc-4.3.2)
LS-XHL (ARM Sheeva 1.2GHZ) 1519756 (gcc-4.1.2)
LS-GL (ARM ORION5 400 MHz) 431778 (gcc-4.1.1)
kurobox/HG (PPC MPC8241 266MHz) 687757 (gcc-3.4.5)
Pentium III 1GHz 2118644 (gcc-3.3.2)
eeePC 701SD(Celeron-M 900MHz) 3318258 (gcc-4.3.2)
実際のアプリではどう変わってくるのか? とりあえず bzip2 で手持ちのファイルの解凍を比較してみた。
測定方法:
# time bzip2 -d < ファイル > /dev/null
で user time を比較
結果
SmartQ5 (ARM S3C6410 100 MHz) 807 秒
SmartQ5 (ARM S3C6410 667 MHz) 323 秒
kurobox/HG (PPC MPC8241 266MHz) 243 秒
Pentium III 1GHz 108 秒
ちょっとおどろいたことに、100MHz と 667 MHz の差が、4.01 倍から、2.49 倍まで縮まっている。それだけでなく、PPC 266 MHz に負けてしまっている。Pen III との比較でも、1/ 2.42 が 1/2.99 と差が開いている。この結果から言えることは、S3C6410 は、クロックを上げてもあまり速くならないということ。メモリのクロックは変わらないようだから、メモリアクセスが多いアプリほどそういう傾向があるはず。bzip2 が典型的なアプリとどれだけ違うのか分からないのだが、6.67 倍にクロックを上げても 2.5 倍しか速くならない というのは結構残念な結果だ。
LS-XHL との比較もしてみたかったのだが、残念ながらいま使えない状況。いずれ測定してみる予定。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
PING:
TITLE: SmartQ
URL: http://nofx2.txt-nifty.com/it/2009/08/smartq.html
IP: 210.131.5.9
BLOG NAME: IT備忘録
DATE: 08/13/2009 21:18:17
中国で発売されている5インチ液晶を搭載した手のひらサイズのLinux搭載MID”
-----
--------
AUTHOR: すz
TITLE: 日本語化キット
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 05/28/2009 18:51:11
-----
BODY:
いままで書いて来たことを元に キットとしてまとめました。ここに書いてあるとおりにやれば、日本語入力が出来るようになるはず。説明は後回し。
あと、基本的に自分用です。再インストールが面倒になってきたので ..
これは何?
SD カードから、scim-anthy で日本語入力できるようにセットアップするものです。(ネットワーク接続は使いません。)
普通にインストールすると root パーティションが溢れます。このキットでは、
- 中国語変換、中国語辞書の削除
- /var の /home/var への移動
をすることで、root パーティションの空きをできるだけ増やすようにしています。
インストール前:
/dev/mmcblk0p1 501732 457014 18814 97% /
/dev/mmcblk0p2 243039 4307 226183 2% /home
インストール後:
/dev/mmcblk0p1 501732 403754 72074 85% /
/dev/mmcblk0p2 243039 102556 127934 45% /home
このように、標準より大幅に root パーティションを空けているので、さまざまな作業を安全にできるようになります。
また、LOOPファイルは使用しません。必要な場合は、日本語化した後で、作成してください。
準備(SDカードのセットアップ)
最初に SDカードを準備する。できれば新品が良い。お勧めは SanDisk 。新品でない場合、できれば SDformatter でちゃんとフォーマットしなおすべき。( 特に soft.img を置いたままだと 問題が出るので、要注意 )
最新のファームウェアを ダウンロードセンターからダウンロードして、(rar ファイルに含まれる SmartQ5 というファイルを) SD カードの トップディレクトリに置く。
SmartQ Serviceというページには、Tips が載っていたり、ダウンロードセンターより早く ファームウェアが載ったりするので要チェック。
つぎに このページで説明する 日本語化キットをダウンロード。SD カードに解凍する。(場所はどこでも良い)
ファームウェアのアップデート
カードを入れた後、“+”ボタンを押しながら リブート (下の四角いボタンがリセット)。
(説明 後記)
インストールが終わり、キャリブレーション後 オペレーションが出来るようになったら、まず最初にCPU Usage Monitor を動かすこと。( フリーズしたかどうか判らないと不安になると思うので )
タスクバーを長タップすると メニューが出る。その一番上、新増なんとかを押して出たパネルの 添加を押して、CPU監視器を追加。すぐに表示されるので、後は×で閉じればよい。
フェーズ1:準備
disk アイコンを長タップして、ファイルマネージャを起動して、日本語化キットのディレクトリに移動すると rxvt が入っているのでこれを 長タップする。
rxvt(コンソール)の画面が出るが、そのままでは使いにくいので、キーボードを出して 画面を最大化すると良い。
rxvtの画面で次を入力
$ sudo -s
# ./ph1_prepare.sh
(done. reboot! と出たら)
# reboot
ちなみに 2 行目は、./ph1 <TAB> で入力できる。
注意)フェーズ1では、/var を 移動しており、終了後は不安定な状態。すみやかに reboot する必要がある。
(なにをやっているかの説明 後で)
フェーズ2:シュリンク
立ち上がって来たら、同じように rxvt で
$ sudo -s
# ./ph2_shrink.sh
(done と出たら完了)
フェーズ3:日本語キットのインストール
そのまま続けて
# ./ph3_inst_j.sh
(done と出たら完了)
# reboot
完了したら reboot する。立ち上がって来たら、漢字変換の Anthy が使えるようになる。
ちなみに ソフトキーボードの 中 は、漢字キー。
(なにをやっているかの説明 後で)
おまけ: telnet で ログイン
これは日本語化とは関係なく、いつでもできる。フェーズ1の前でも OK 。(ただし、フェーズ1後 リブートまではダメ)
おまけ2: ssh で ログイン
これは日本語化とは関係ないが、ph4_net の後でやるべき。(reboot 前にまとめてやるのは OK)
- env の編集 (ph4_net と同じ)
- 実行
rxvt を出して
$ sudo -s
# ./ph5_ssh.sh
おまけ3:gcc/g++ パッケージ集 (sq20_devkit)
とりあえず ... 依存関係の少ないプログラムをビルドするための最低限のものを集めました。カーネルのコンパイルは OK 。
スクリプトは入れていません。dpkg -i *.deb とか適当に入れてください。
全部インストールすると、60885 ブロック消費します。本体FLASH に 日本語化キット + SSH + gcc/g++ を入れることは 一応できます。
メモ: 09/06/05 evince で 日本語が見れない。
本来は、poppler-data を入れれば見れるようになるらしいのだが ... 実はもともと入っていて 中国語 以外が削除されている。入れなおしてもうまくいかない。
なぜ? 他にも 削除されているものがあるのか?
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
COMMENT:
AUTHOR: ikas
EMAIL:
IP: 125.199.57.150
URL:
DATE: 07/29/2009 22:02:07
こちらのサイトの研究のおかげで、購入に踏み切る事が出来ました。ありがとうございました。
日本語入力の件ですが、この作業をph3まで行った時点でCtrl+SpaceでSCIMとAnthyが動く物なのでしょうか?
これらが動作せず、少し不便を感じております。
お時間があればご教授ください。
-----
COMMENT:
AUTHOR:
EMAIL:
IP: 114.145.54.250
URL:
DATE: 08/18/2009 20:41:52
すいません。当方SmartQ5 FW4.0で
日本語化をしたいのですが、この日本語化キットは2.0用ですが、FW4.0にも適応できますか?
以前、すzさんのところでFW3.0の日本語化ツールがあったと思いますが、そのデータをもし宜しければどこかにアップしていただけたら幸いです。
FW4.0にはすzさんの3.0用日本語化が良いみたいな記事を他で拝見したもので・・・・
よろしくお願いします。
-----
--------
AUTHOR: すz
TITLE: ファームウェア V3.0
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: SmartQ
DATE: 06/13/2009 01:49:49
-----
BODY:
6/12 にファームウェア V3.0が出たので早速インストールした。
ダウンロードサイトの説明では、さらりと書いてあるだけなのだが、使ってみたところ、かなり良くなっている。
いくつか紹介してみよう。
- 英語対応
まず、インストール直後、キャリブレーションの前に中国語か英語か選ぶようになった。英語を選べば、メッセージが全部英語になる。V2.0 で対応できていなかった所がすべて対応済みになったようだ。V3.0 でさらにアップデートしてみたところ、そこのメッセージまで、英語が併記されるようになっていた。
英語なら説明が簡単にできるので非常に嬉しい。
- マウスカーソル
デフォルトではマウスカーソルが出なくなった。はっきりいって、操作の邪魔でしかなかったので嬉しい対応。
- サスペンドのオペレーション改善
電源ボタンで出てくる System Manager setup のメニューにサスペンドか追加になった。2ステップだが、V2.0 と比べれば随分操作が楽になった。
- 起動時間
60秒ほどが40秒ほどになった。嬉しいことは嬉しいのだが、それよりサスペンド時の消費がどうなったかのほうが気になる。
ところで、起動スクリプトの変更で、GTK なんとかかんとかというエラーが出ることがあるみたい。タイミングの問題っぽく、reboot すれば OK になる模様。... V3.1 が早々に出る予感。
- ルートファイルシステムの拡大。
もちろん、どこから容量を持ってくるかと言えば、/home 。/homeを 1/2 の 125MB にして、/ に割り当てている。これで、普通にインストールしても溢れにくくなった。
日本語化キットでは、/home へ /var を移動しているので、そのままでは、今度は /home = /var が溢れそうになる。
- 電源管理
電源管理についても、結構改良しているようだ。まず、サスペンド時間が、バッテリー、AC で別々の設定ができるようになった。それ以外はまだはっきりとは分かっていないのだが、画面がしましまになる問題は直った模様。
あと、g_ether 。PC 側がサスペンドしたら、再接続にモジュールの再ロードが必要だったのが直ったみたい。ただし SmartQ 側がサスペンドした場合、切断は自動だが、再接続にモジュールの再ロードが必要みたい。未サポートの機能だが、このあたりを見れば取り組み具合がわかる。
とまぁこんな具合。こんな調子で改善していって欲しいものだ。
。。。というわけで 早速日本語化キットを作ってみた。
- http://nmj.sumomo.ne.jp/suz-aa1/sq30_jakit01.zip (10.4 MB)
ちなみに、前のバージョンも一応インストールできる。問題は /home が厳しくなるのと、scim が自動で立ち上がらない点。
今回は、env の設定で /var を移動するかどうか決められるようにした(デフォルトは移動する)のと、DISK を空ける工夫をいれたことが主な変更点。
(移動しない場合は、env の MINHOME を 125000 に変更のこと)
- /usr/share/startict の削除
辞書が残っていたので消してみたら結構空くのに気がついた。
- /etc/xdg/lxsession/LXDE/autostart で作っているデッドスペースを 20MB から 10MB に変更。
V 3.0 から入った? 安全性を確保する仕組みだと思うが、/var ははなから厳しいので。
ちなみに、容量が増えているのは、おまけ(ph6_omake.sh)をいれたため。ちょっとしたツール と 古き良き時代の日本発祥ソフト。... arm のパッケージがあるのを見つけて嬉しくなったため。
いずれ日本語キットのページを更新するけど、早く使いたい人はどうぞ。
補足:
ph3_inst_j で 90 行目シンタックスエラーが出ますが、消し忘れ。終了してるので、機にしないでください。
ph5 まで入れた後のディスク容量
Filesystem 1K-blocks Used Available Use% Mounted on
/var 移動:
/dev/mmcblk0p1 632948 435472 165324 73% /
/dev/mmcblk0p2 122003 108166 7537 94% /home
/var移動なし:
/dev/mmcblk0p1 632948 542724 58072 91% /
/dev/mmcblk0p2 122003 9293 106410 9% /home
普通は /var 移動なしで良さそうですが ... gccと g++ すら入らないのが気に入らない。loopfile は、SD を自由に使えないので自分的には論外。
そういうわけで /var について、少々分析。
/var で 100MB ほど使っていますが、内訳は
30 MB anthy
20 MB apt (lib)
20 MB apt (cache)
10 MB dpkg
10 MB リザーブ
5 MB scrollkeeper
こんなかんじ。anthy + apt で 70%。
anthy の辞書を /var/lib ⇔ /usr/share で移動させることで 30MB 分はバランスさせられそう。
あと、apt ... パッケージを入れるときだけ必要なのだから、SD に追い出すのも手かも。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 業務連絡
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 07/23/2009 19:11:14
-----
BODY:
私の不注意で レンタルサーバーの契約が切れてしまい、サーバ移行することになりました。
バックアップも適当にしかとってなかったので、5/22 以降の記事・コメントも消えてしまいました。コメントを頂いた方には申し訳なく思います。
移行にあたって、
- もの置き場のサイトが nmj.sakura.ne.jp → nmj.sumomo.ne.jp になります。
- 復活した記事の URL が変わっているかも知れません。(よくわかりません)
リンクしていただいている方には申し訳ありませんが、リンクの変更をお願いします。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
COMMENT:
AUTHOR:
EMAIL:
IP: 114.145.54.250
URL:
DATE: 08/18/2009 18:12:19
日本語化キットv3.0用のデータを何とかUPできないでしょうか。SmartQ5 のFWが4.0なのですが、v2.0日本語化キット使用しても大丈夫でしょうか・・・・
-----
COMMENT:
AUTHOR: 通りすがり
EMAIL:
IP: 211.10.38.161
URL:
DATE: 08/19/2009 21:36:37
すでに解決しているかもしれませんが、
(1) envを自分の環境に合わせる
(2) ph1の/varを移動する部分をコメントアウトする
(3) /etc/localを日本語に設定する
(4) ph1からph3を順番に実行し、rebootする
うちの環境ではこの手順で日本語化できました。
ついでにsazanamiフォントをインストールしておくと少しだけ幸せに成れるかも知れません。
-----
COMMENT:
AUTHOR: 通りすがり
EMAIL:
IP: 211.10.38.161
URL:
DATE: 08/19/2009 21:42:48
/etc/localではなく/etc/default/localeです。
失礼しました。
-----
COMMENT:
AUTHOR:
EMAIL:
IP: 114.145.54.250
URL:
DATE: 08/21/2009 12:59:39
(2) ph1の/varを移動する部分をコメントアウトする
これは、Ph1_prepare.shファイルの
if [ ! -L /var ]; then
sh dflog.sh 1
tar -C / -cf - var | tar -C /home -xpf -
mv /var /var.old
ln -sf /home/var /var
sh dflog.sh 2
fi
を消すってことですか?
初歩的かもしれませんがすいません。
Ph2_shrink.shの命令で
辞書を消すような項目あるのかなと思いますが、実行中に/dicが空ではないので削除出来ません的なこと言われます。
この日本語Kitではルート容量に空きをつくる的な事書いてありますが、実行しても
dfコマンドで見てもそんなに開いてないようなのですが。
すいません。端末見ながら話してないので
うろ覚えなんですが。
-----
COMMENT:
AUTHOR: 通りすがり
EMAIL:
IP: 211.10.38.161
URL:
DATE: 08/22/2009 09:58:20
>これは、Ph1_prepare.shファイルの
>if [ ! -L /var ]; then
・・・・
>初歩的かもしれませんがすいません。
ハイ。ただ、行頭に#をつけるとその行はコメントと解釈されますので、こちらの方が良いかと思います。
Ver.4でここを実行すると/varが(たぶん)溢れますので。
>Ph2_shrink.shの命令で
・・・・
>削除出来ません的なこと言われます。
うちもそうでした。消しても良いか確証が持てなかったので放置してあります。
>この日本語Kitではルート容量に空きを
・・・・
>ようなのですが。
/varの移動を行わないので20M強位しか空かなかった様に記憶しています。
-----
COMMENT:
AUTHOR:
EMAIL:
IP: 59.166.113.52
URL:
DATE: 08/24/2009 01:04:12
Ph2_shrink.shの命令で
辞書を消すような項目あるのかなと思いますが、実行中に/dicが空ではないので削除出来ません的なこと言われます。
結局手動で/dic消しました。
ついでに、$ sudo apt-get remove --purge language_pack_zh fcitxだっけなこれらもやりました。
問題なく動いてます。
-----
COMMENT:
AUTHOR: すz
EMAIL:
IP: 202.232.243.144
URL:
DATE: 08/27/2009 06:45:28
v3.0 用は、http://nmj.sumomo.ne.jp/suz-aa1/sq30_jakit01.zip です。
これは、v4.0 でも使えたように思います。ただ、説明した記事がなくなってしまったので...やるきが ...
どなたか、試してみてレポートして頂けませんでしょうか?
-----
COMMENT:
AUTHOR: 組長
EMAIL:
IP: 59.140.64.39
URL:
DATE: 08/27/2009 23:09:49
smartQを弄っているうちに、設定が変わってしまいました。(ソフトウェアキーボードが出なくなる等)
出荷状態に戻すことって可能なんですかねぇ?
-----
COMMENT:
AUTHOR:
EMAIL:
IP: 114.168.122.174
URL:
DATE: 08/30/2009 02:27:40
最近入手した者です。
日本語化手順参考にさせていただきますね。
ファイルの再アップありがとうございます。
助かります。
説明はこれを参考にさせてもらえばいいのでしょうか。
http://74.125.153.132/search?q=cache:zES_Y_Jidm8J:suz-aa1.sblo.jp/archives/20090613.html
-----
COMMENT:
AUTHOR: すz
EMAIL:
IP: 202.232.243.19
URL:
DATE: 08/30/2009 09:50:44
ありがとうございます。早速セーブしました。記事を復元しておきます。
-----
--------
AUTHOR: すz
TITLE: 中華PMPのハードウェア
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/04/2010 18:54:56
-----
BODY:
中華PMPの A-320 に Linux が載ることをいまさらながらに知った。
興味がわいたので、ちょっと調べてみた。
- CPU: Ingenic JZ4740 (or JZ4732 ?).
- Flash: Samsung K9GAG08U0M-PCB00 (2G x 8 bit NAND).
- RAM: 128Mbit SDRAM(16bit) x 2. (Total 32MBytes).
- FM receiver: RDA microelectronics RDA5800C.
ググって入手した JZ4740 のデータシートでは、Xburst core 360MHz と書いてあるが、要は MIPS らしい。MMU も付いているし、なかなか。
メモリは 32MB と Linux を動かすには少ないが、PMP としては多い方なのかも。
開発環境などは結構充実しているようだ。VirtualMIPSなんてもものまである。
まぁ興味はあるのだが、買ったとしてなにか作りたくなるかというと微妙。Smart-Q5 ですら今は放置状態。
もうちょっと安いやつならお試しに買ってみてもいいかなという感じ。
探してみると、Neo Slim 3000 というのが 3999円と 安いようだ。CPU は、JZ4725 だそうで、MP4 のサポートはないものの 同じ CPU core。RAM は少ないのではないかと思えるが 16MB は載っているだろう。ひょっとしたら、RAM チップ載せ換えなんてこともできるかも知れないし。すべてがダメになっても液晶モジュール取りぐらいには使えるかも知れない。
ちょっと突撃してみるか。
その前にもうすこし調査。
公式のフォーラムは、NeoTeam Official Forumのようだ。
V1.7 が 2010/3/12 に公開されている。あと機械翻訳のような微妙な日本語の html 版マニュアルとかも。
それを見ると、メニューも微妙なかんじ。それはともかくテキストファイルも表示できるようだ。文字エンコーディングの設定ができて、日本語も表示できるようだ。
時計機能やFMラジオもある。時計機能があるということは、RTC が CPU に組み込まれているのだろう。すくなくとも TZ47XX には RTC があるので、TZ4725 という情報は正しそうな気がする。
フォーラムの some info about neo slim 3000 を見てみたら、Linux だと書いてあった。.. ということは、少なくとも RockChip ではないのだろう。Linux ならファームウェアの中を覗けるかも知れない。
安いものだし、過度の期待はできないが、ちょっとワクワクしてきた。
JZ4740 と JZ4725 のブロック図
(JZ4740)
(JZ4725)
上は、データシートの抜粋。同じ基準で書かれたものではないが、JZ4740 には、USB HOST と カメラインターフェイス、SPI 、SRAM インターフェイスと I2S 出力が増えているように見える。
あと、マルチメディアアクセラレータが付いている。カメラインターフェイスがあるところから見て、MP4 のエンコーダ/デコーダーが付いているのだろう。
CPU 自体は同じ。XBurst core 360 MHz 。MIPSII で little endian のみらしい。命令キャッシュ、データキャッシュともに 16KB 。消費電力は 200mW@360MHz 。
SDRAM インターフェイスは、DDR/DDR2 はサポートしていないようだ。A-320 は、16bit の SDRAM が 2 個ついていて 32MB だが、Neo Slim 3000 は不明。8/16/32 MB のどれかでたぶん 16MB なのだろう。
A-320 はカメラも USB Host も使っていないようだから、差はメモリの量とMP4 のデコーダーということになる。
ただ、A-320 のスペックには、500Mhz と書いてあるから グレードが高い CPU を使っているか、そうでなければオーバクロックしているのかも知れない。Neo Slim 3000 の方は不明。クロックは内部のPLLを使っていて設定できると思うので、多少のオーバクロックはできるのかも知れない。
これ見ると A-320 は、336MHz と書いてある。変更できるが、範囲は 200MHz 〜 400MHz 。500Mhz というのは間違いじゃないだろうか。
メモリーは、JZ4740(or JZ4732)では、16bit 幅 の SDRAM (例: HY57V281620FTP) が 1個または 2個 付くようだ。JZ4740(or JZ4732)の A-320 には 実際 2 個付いている。( 参考 )。
JZ4725 は 16bit 幅が 1 個。VX989LE は、JZ4725 らしいのだが、1 個しか付いていない。( 参考2 )。メモリ帯域が半分しかないから性能的に不利なようだ。
メモリサイズは、16MB とは限らない。256Mbit のものを使えば 32MB になる。
あと、SD/MMC インターフェイス。JZ4740 は 4bit の I/O ができて 80Mbps までの帯域があるが、JZ4725 は 1bit 幅で 20Mbps まで。これだとだいぶ遅く感じられるかも知れない。
JZ4725B というのもあるらしく。SD/MMC 周りがだいぶ違う。B は、4bit の MSC0 と 1bit の MSC1 があり、MSC0 は 最大 320Mbps と書いてある。要するに SDXC 対応ということだ。しかも MSC0 からブートできるそうだ。まぁ B は入っていないだろうが...
あと、JZ4725 Programming Manual と データシートの記述が一致しない。 Programming Manual には、あたかも 4bit 幅でアクセスできるようなことが書いてある。??
追記:
MSC0 は、NAND Flash と排他的にしか使えないようだ。要するに SanDisk の iNAND のように SD/MMC と同じインターフェイスの Flash チップに対応したものらしい。当然ブートできないと困るわけだ。MSC1 は、やはり 1bit で Bなしの MSC に相当するようだ。やはり遅いのは間違いなさそうだ。
ちなみに、チップ自体は、USB デバイスからのブートができる。どこからブートするかは、ピンで設定する。具体的なことはまだ知らないが、Qi-Hardware のサイトのどこかにあるに違いない。
これだけの違いがあれば、実用として使うなら A-320 の方が良いのだろう。ソフトの安定度の面もあるし。
だがしかし、分解したりして、怪しいことをするなら安いにこしたことはないのだ。
ちなみに液晶だけは、Neo Slim 3000 の方が大きいというメリットがある。
A-320 では、FPC-FTP280P04N-01 という液晶モジュールを使っているそうだ。コントローラは ILI9325 で、2.8 inch でフレキは 37pin 。さらに、1 pin は DB0 という情報がある。 aitendo で扱っている EGO028Q02と非常に良く似ている。画像検索してみるとフレキの幅も広く 同じ 1.0mm ピッチのようだ。
Neo Slim 3000 の方は、どんな液晶をどんな風に接続しているのだろう?興味の対象はそこだったりする。
Jz4725 の Programming Manual というのがopenpdf.comで見つかった。
データシートは概要が書いてあるだけなので、それだけではどういう制御をするのか分からない。Programming Manual がないと なにもできないのだ。ちなみに JZ4740 は、User Manual で各章が別々の pdf になっているようだ。
ついでなので書いておくと、本(ben)-NanoNote は、JZ4720 だそうだ。メモリは 32MB 。SDRAM 周りは jZ4725 と同じで 16bit 幅 x1 のみだから 256Mbit の SDRAM を使う。
512Mbit の SDRAM が入手できれば 、64MB にすることも可能かもしれない。
デジキーで探してみると、SDRAM はやたら高い。例外的に Qimonda の SDRAM(128Mb/256Mb)だけが安い。が、16bit 品は特殊な部類らしく 256Mbit 品すら入手できない。
リスクは大きいが、中古の DIMM から取り外した方が安く付くかも知れない。重要なのは 16bit 品を選ぶこと。4 つしかチップが載っていないものがあったはず。たとえば、ノートPC用の PC133 SO-DIMM は 64bit 幅で 片面 4 つか 両面 8 つのどちらか。
(スロット&ソケット図鑑:メモリ・ソケットより)
4 つ(片面実装)で 256MB なら 16bit 幅 512Mbit x4 の計算。これで 1500円前後なら、まぁ当たりか。... あまり凝っても本末転倒だし。たまたま見つけたら検討してみよう。
追記:使われていたのは、256Mbit (32MB) だった。交換して意味があるのは、512Mbit のもののみ。片面実装で 256MB なんていう SO-DIMM は見つけるのは難しい。512MB 8チップなら確実に 512Mbit なのだが 3000円とかする。これで 8bit 品だったら役に立たない。32MB でなんとかしようという気になってきた。
追記:aliexpress で 512Mbit (16bit 幅) の SDRAM を扱っている所を見つけた。→ barney yang's store。例えば K4S511632Dが $ 9.47 (FreeShiping) 。デジキーとかだと 3000円以上だから格安ではある。
ADCの謎
JZ4725 の ブロック図をみると、タッチパネル用の ADC があるように見える。だが、ピン配置をみても ADC は、2pin しかない。1pin は、バッテリーの電圧測定用を想定していて、残りの 1pin が 汎用。Audio CODEC にも ADC はあるが、これは MICIN と LINE IN用で DC を測定するには向いていない(はず)。
Neo Slim 3000 は、タッチバネルはついていないものの、アナログスティックというものが付いている。2次元だから 2 入力必要。いったい どうやっているのだろう? ちなみに、使えるデバイスは I2C と UART(TXD/RXD) それぞれ 1ch 。あと GPIO 。I2C の ADC を外付けしてたり、アナログスイッチ(セレクタ)を使って切り替えている?
JZ4720 や JZ4740 は、XP/XN/YP/YN という タッチパネル用のピンが出ている。
Linux 関係
こいつで (自分でビルドした)Linux を動かす場合どうしたら良いのか? ... というと 結局のところ Qi-Hardware が出している Ben-NanoNote や SAKCボードの環境に載っかることになりそう。
特に、SAKC ボード は、ベースが JZ4725 で同じ。メモリが 64MB もあるとか FPGA (Spartan3E VQ100pin) が載っているとか オプションの LCD が NanoBook と同じとか ... いろいろ違いはあるものの、ブート周りとか、基本的なデバイスドライバは 同じで随分便乗できる。ユーザランドもほぼ使えるはずだ。
ちなみに、NanoNote の LCD は、ILI9325 などのコントローラが載っている Smart LCD タイプではない。 ここは A-320 用のドライバを使うことになるのだろう。
ところで、DINGUX。まだ良くわかっていないのだが、A-320 のみをターゲットとしているわけではないようだ。カーネルのパッチは、JZ47xx を出している Ingeric社 から出ているが、それぞれのプロジェクトでマージしているらしい。一応別々みたいだから、両方を見てどちらをベースにするか考えることにしよう。
- http://www.ingenic.cn/eng/productServ/AppPro/pfCustomPage.aspx
Ingenic 社の ページ。普通にデータシートを公開している。Programmers Manual は別。
- http://www.ingenic.cn/eng/productServ/kfyd/Linux/pfCustomPage.aspx
これも、Ingenic 社の ページ。2.6.24 用と少しだけ古いが普通に Linux のソースや toolchain とかも公開している。他のページには、usbboot のツールも。
- http://code.google.com/p/dingoo-linux/downloads/list
とりあえずここに、toolchain がある。USB-BOOT 関係のツールもあるようだ。
- http://projects.qi-hardware.com/index.php/p/xburst-tools/source/tree/master/
ここには、linux 版のソースもあるようだ。どうも jz4725 には JTAG はなさそうなので、USB-BOOT が最後の頼り。(まぁ JTAG あっても面倒だから使わなそうだけど)
- http://projects.qi-hardware.com/
というか ここにいろいろあるのか。
- http://en.qi-hardware.com/wiki/Building_Software_Image
ここが NanoBook ソース。git が必要。Window 版 git なら ここにある。
- http://dl.openhandhelds.org/cgi-bin/dingoo.cgi
あとここにいろいろあるみたい。
- http://www.rockbox.org/wiki/IngenicJz47xx
ここに濃い情報が。
ところで、シリアルは端子があるのだろうか? あるなら、シリアルコンソールに使ったり、外部デバイスをつなげるのに嬉しいのだが。幸い jz4725 は LQFP だから 配線を追ったり、無接続なら無理やりつなげるようなことが可能かも知れない。
あと I2C もある。低速でかまわないなら、AVR を I2Cスレーブとしてつなげる手もあるかも知れない。 いくつかI2C デバイスを使っているなら、デバイスの足から分岐できることも期待できる。
まぁ、購入前の調査はこれぐらいにしておこう。あとは、購入して分解するのみ。
ところで ちょっと Ben-NanoNote にも興味が出てきた。USB HOST の端子さえ出ていれば、BlueTooth とかつなげそうだけどどうなんだろうか?
追記;怪しげなマシンたち
ちょっとメモ。
- PMP-3000
筐体は同じみたいに見える。Neo Slim 3000 の製造元?
ただ Neo Slim 3000 にない TV-out 機能がある。ボードはちょっと違うのかも。
- PMP-3100
これは実に怪しげ。A320 とそっくり。..なのだが PMP-3000 の兄弟機なら jz4725B とかかも。
追記:PMP-3100 は、Jz4725(無印)でメモリ 16MB だった。TV-OUT も間違い。
後継機らしき P5-5 というのが出ている。firmware が変わったのは明らか。CPU も B になったかも知れない。
- 音狐 YH-873
これも怪しげ。もうA320 の偽物なのか 製造元なのかわからなく..
- 音狐 YH-876FM
これはいたって普通なのだが、CPUが Jz4755 らしくちょっと興味がある。
- 音狐 YH-882
これも Jz4755 。
- venus JXD300
Neo Slim 3000 と比べるとこっちの方がボタン周りの質感が高い。... が、Jx47xx ではなく sunplus (ARM + DSP?)らしい。
- focalprice EM508W
これはさらに怪しい。venus JXD のさらにパチモノ? お得そうに見えるにもかかわらず、レビューがない。ますます怪しい感じ。
- 7-Support-WIFI-netbook
別に怪しげではないのだが、Jz4750 を使った Netbook もあるようだ。しかも買える。-- MIPS を使った 珍しい Netbook -- まぁなにか怪しげではある。
2010/06/07 現在 $79.38 + 送料 $39.26 = $118.64 と安くなっている。でも同じ製品を多数登録している変なところなので要注意。安くなっているのを知らなかったというのもあり、こっち (送料込み $130.93)をぽちってみた。
- こんなことを書いた数日後に Lyumo Bookというのが日本で発売されてた。会員なら 12800円とか。
一般の人には勧められないような気がするが... mips が好きな人にはいいかも。たぶん CPU が jz4730 であること以外は上のとほぼ同じ。
ちなみに既に分解した人もいるようだ。→ 「日々是おやっとさぁ」
- Dingoo A-330
そうこうしている間に、Dingoo A320 の次世代機まで出た。
なんか green-tool というところで、6,980円と安いのでついつい買ってしまった。ついでに PMP-3100 まで。
両方とも TV-OUT がある。最新機なら チップ自体に TV-OUT の機能がある Jz4750/Jz4755 ではないかという期待から購入してみることに。とりあえず中を見てみたい。
あと A330 は、無線コントローラをサポートしている。うまくすれば無線キーボードとか使えるのではないかという期待もある。
A330 の情報が出ていた。
dingoonity.org のレビュー
違うメーカーが出した A320 クローンだそうだ。CPU は Jz4740 で DINGUX が動くらしい。メモリが 64MBになっているの がメリットか。
どうも DINGOO DIGITAL という所は、既に A320 という A320 クローンを既に出していて A330 は、その後継機らしい。なんとも カオスな状況。
追記: 2010/07/21
www.aliexpress.com で xburst を検索したら $72.16 + (送料)$19.63 = $91.79 のものが見つかった。
- XBURST 100MHZ 32CPU RAM Capacity: 128M 2GHard Disk Windows CE Elaine
- SPEC UMPC CPU Samsung 532MHz 32-bit
- Processor Type: XBurst 400 MHz CPU 32
CPU の 説明は、一貫していない。G400 と同じタイプなら CE ならWM8505 / Linux なら Jz4730 のはずで、すべて誤りの可能性まである。
ちなみに、WM8505 の Laptop (android) は、$65.97 + (送料)$13.29 = $79.26 の これが安い。さらに -- このサプライヤーは、CPU が WM8505 のままの 10 inch Laptop ($100.96 + $15.70, 解像度 1024x600) というものも扱っている。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Neo Slim 3000入手
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(機種解析)
DATE: 04/07/2010 02:15:41
-----
BODY:
Neo Slim 3000が入手できた。
すぐに分解したいところだが、不良品だったりすると困るし取り敢えず動作確認など。
- 備品
USB A-miniB ケーブル (1m ぐらい)
8cm CD
USB Aメス ACアダプタ
インナータイプ イヤホン
AC アダプタは、プラグ折りたたみ式のコンパクトタイプ。イヤホンも端子が金色で、少々グレードが高い。
CDの中はあまり見ていない。PDF マニュアルもあったが、Web 版と同じみたいだし。
- 本体インターフェイス
オーディオミニジャック
USB miniB コネクタ
DCジャック (たぶん 例の EIAJ#1 もどき)
SDスロット (push-push)
電源スイッチ スライドSW(ON/OFF)
ボタン 4方向 A,B,X,Y, L(電源マーク),R(OK)
アナログスティック
スピーカー(モノラル)
筐体は3枚におろせる構造。裏面に 4ヶ所 小さな +ネジ。
ボタンは、透明なカバーに印刷された紙が入っていて質感が低い。充電ランプ(赤,左), 電源ランプ(青,右)の光がもれる。均一にもれるわけではないので残念な感じ。
他の部分の質感はよい。
メニューシステム
まぁ二度と使えない可能性もあるので、どういうものかチェックだけはしておこうと思う。
基本的に、サンコー AV BANK (マニュアル)と同じシステムのようだ。
のレビューを見て気がついた。「を探している」、「は、工場出荷時の設定を復元する」が同じ。
日本語が変だし英語を想像しないと理解できない。しょうがないので、言語をEnglish にすることにした。
- Toolbox
System Stetti(文字切れ)
Desktop Set
- タイムゾーンの設定はここ(重要)
Animate Set
Resume Background
Boot Option
- 電源 On で Top レベルにするか、前の状態にするかの設定
Timing Shutdown
- デフォルトは Off
Backlight Luminace
- 明るさ 5 段階
Backlight Time
- デフォルト Off 。バックライトが 切れたら Lボタンで復帰。
Languages
System Function
Device Infomation
- Device Model の確認や 容量の確認とか
- ここに JZ4725 と出る。
- SDカードの容量も出るが文字が重なって読めない。
Recover System
Format U Disk
- U Disk とは内蔵FLASH のこと
Updating ...
- U Disk の / に (解凍した)NEO_UPDATE.BIN を置く。
Test Screen
World Clock
Calendar
- 日本語の設定だと意味不明
- E-Book
- エンコーディングを設定できる。UTF-8 が無難?
- CP932 が SJIS の意味。
- File Manager
- Radio
- Background の設定あり
- Music
- SJIS で入れた ID3タグは文字化けしていない。
- ...いつのまにか文字化けするようになった。
- 日本語で「更新プログラムのメディ」の実行が必要。
- E-Book のエンコーディングも関係あるかも。
- Background の設定あり
- Video
- 手持ちの Xvid なら普通に見れた
- ファイル単位のスキップ ↑(前)↓(後)
- Recoder
- Picture
- Game
- メインメニュー基本操作
→ なし
← 選択(○ と同じ?)
↑ 項目移動(UP)
↓ 項目移動(DOWN)
○ 選択
× もどる
■ なし
▲ なし
- プレー中の基本操作
Video/Music
→ 音量UP
← 音量DOWN
↑ ファイルスキップ(前)
↓ ファイルスキップ(次)
○ PAUSE
× メニュー
■ なし
▲ なし
Radio
→ 音量UP
← 音量DOWN
↑ チューニング(周波数DOWN :逆になっている)
↓ チューニング(周波数UP)
○ チャンネル切り替え
× メニュー
■ なし
▲ なし
- その他
電源 は、入れて 5 秒ぐらいで立ち上がる。オフはすぐ切れ シャットダウンしているような感じがしない。
そういえば、操作のロックがない。なにかのキーの組み合わせなのだろうか?
まぁこんな感じ。
文字が重なって読めないとか、バックグラウンドと重なって読めないとか日本語の訳語以前の問題もあるし、メニューシステム自体も全体的に未完成な印象でアップデートに期待。
各機能は、細かいところに不満が出たりするがどうにもならない。
分解
そろそろ分解したいが、チェックしたいのは
これぐらいか。さぁ分解。
まず、4つのネジを外して裏蓋をはずすと 基板の裏がみえるようになる。このj点で外れる部品は、(裏蓋と)ネジ4 つと電源スイッチのツマミのみ。ちなみに基板の色は青、
基板の裏には、SDカードコネクタなどのコネクタ類すべてがある。あと、バッテリーが両面テープで貼られている。
あと目に付くのは、いくつかの空きパターン。ひとつは FLASH2 と書いてあり 4GB モデル用なのだろう。あと (よくわからない)18 pin と 10pin の TSSOP のパターンが重なるように配置されている。外付け DAC かアンプなのだろう。
あとマイクと アナログスティックが見える。アナログスティックは基板をくり抜いてマウントされている。裏蓋もここの部分に台が付いていて強度上の配慮がされている。ちなみに、B10K と印字がある。
あとは、水晶も見える。水晶は、表なのだが基板がくり抜かれている。表側はほとんどスペースがないのだろう。
裏側は、バッテリーが一番背が高い。それ以外はガラガラなので、薄い基板を仕込むことはできそうだ。
次に進む。基板は、真ん中の枠に 4つのネジで固定されている。
ネジを外すとまず枠が外れる。枠をはずすと基板を取り出せた。
まず、ボタンのパーツが自由になって外れるので、回収しておく。次にフレキ。フレキはコネクタで止まっているのでロックを外して抜いておく。あとスピーカーが邪魔。なくても困らないので、基板から外してしまった。元にもどすためにはハンダ付けが必要になった。
さてようやく基板の表が見えるようになった。基板にはシルクで、
Neo Slim 3000(1022) - 2009.12.17
とマークされている。ここで書くことはこのロットのみの話ということ。
CPU には、JZ4725B と書いてある。あまり意味がないが、一応 SDXC 対応の新しいタイプだ。
この書き方は相当に語弊がある。正確には、SDカード規格2.0 にしたがって 最大クロックを80MHzを上げたということ。Jz4725(無印) は、SDカード規格1.01 で最大クロックは 20MHz だった。
前のSD規格は、50MHzまでだったはずなので、80MHz で動くとすれば SDXC カード。ただし 1bit で I/O するので、普通のSDHCカードの最高速より遅い。(80Mbps / 200Mbps) 。また Jz4725(無印) は、最大 20MHz で 規格より大分下だったので、それと比べれば 普通のSDHCカードも高速になる。... といっても カードの性能の 1/4 にしかならない。
肝心の SDRAM には、EM63A165TS-6G と書いてある。ググると 16M x 16 -- 32MB だ。予想より容量が大きく嬉しい。
FLASH は、H27UAG8T2ATR-BC 。FMラジオは、RDA5807P と水晶が載った 10pin のモジュール。あとは アンプの XPT4890。電源用とかいくつか IC があるが 8pin 未満。
データシートはみつからなかったが、スペックは(一応)見つけた。(Hynix_Product_Catalogue.pdf より)
- H27UAG8T2A 41nm
- 電圧 3.3V
- 容量 2G x 8bit
- Page Program 4KB + (128B or 224B ??)
- Block Erase 512KB
- Stack Mono (?)
- 41nm で 32Gbit のは、4KB + 224B と書いてあったが、16Gbit もそうなのかが不明。
- Stack の意味も分かっていないが、一応メモ。
LCD は 0.5mm ピッチで 54pin。型番がフレキに印刷でてあるのだが LED のフレキで隠れて全部読めない。 B3xxW1MV1 。
これではググることさえ出来ない。
追記:
B334W1MV1 だった。が、全然ヒットしない。
CFAF320240F-T-TS というのが、似ているといえば似ている。0.5mm ピッチ 50pin だし、フレキにチップがいくつか載っているのも似ている。ただ、4線のフレキが メインのフレキに付いていないところが違うし、ストレートでないのも違う。
まぁ取り外して電子工作につかうことは 今はほとんど考えていないのでピンアサインはあまり重要ではない。コントローラICが分かれば良い。
ところで、Jz4725B の LCD 用のピンは、
LCD_D0 〜 LCD_D17 / SLCD_DAT0 〜 SLCD_DAT17
LCD_PCLK / SLCD_CLK
LCD_VSYNC / SLCD_CS
LCD_HSYNC / SLCD_RS
LCD_CLS
LCD_SPL
LCD_DE
LCD_PS
LCD_REV
VIDEO 出力のように PCLK(dot clock)/HSYNC/VSYNC/ を送るタイプの LCD と コントローラにコマンドとデータを送る タイプの smart LCD を制御できるのだが、54pin も信号線がある LCD は、たぶん両方サポートしている。どっちを使うかは接続できまりモジュールだけ分かっても決まらない。
それぞれメリット/デメリットがあるので、どちらを選ぶかは、設計するひとの考え方で決まる。
チップメーカの Ingenic が Linux のパッチを出していて、ドライバのソース自体は入手済みかもしれない。ちょっと調べてみよう。
ここまでのまとめ
ちゃんと基板を調べられているわけではないのだが、コネクタの類が見つからない。外に引き出したいのは、I2C,シリアル,USB-BOOT 設定(BOOT_SEL1/PC31)
BOOT_SEL1 がボタンと共用されていれば、あるボタンを押すことで USB-BOOT になるかも知れない。もしそうであれば、無改造で Fファームウェアの改造にトライできそうだ。そうでなければ面倒。失敗したら終わりなので、なんとかして改造することを考えなければならない。
Jz4725B データシート (2009/07/07)は、PC31 が GPIO として使えるような記述だが、Programming Manual では GPIO として使えないような記述になっている。別の pinアサインの PDF (v3) にも GPIO の記述がない。ボタンと共用を期待するのは厳しいかも。ただボタンの接続によっては、パラレルでつなげられるかも。
I2Cやシリアルは、ファームウェアの改造を始めるのに必要というものではない。基本的に電子工作観点。ただ、シリアルがあれば立ち上げメッセージを見たりログできるので効率が違う。
基板+バッテリーの状態で、USB につなげてみた。赤と青の LED が、L,R ボタンの近くにあるが、ちゃんと光るし接続もできる。
LED は、赤がまぶしい。指向性がないからケース内部まで照らしてしまうようだ。なにか黒いもので覆って ボタンだけを照らすようにしたいところ。黒いもので思いつくのはプチルゴムの両面テープとか。
赤のそばの電流制限抵抗は、201 の刻印で 200Ω。青のそばの電流制限抵抗は、102 の刻印で 1KΩ。両方間違いでは?と思える値。-- 抵抗が逆になっているのではないだろうか?
いじって遊んでみることにしたので、予備器も 複数購入したのだが、LED の不良率が高い。両方点くのは分解したこいつだけ。他のは片方しか点かない。まぁ下品というか安っぽいかんじで、LED を 交換したくなるから良いのだけれども ... ちなみに他のところの不良はなかった。
不良のLED を自分で直すとすれば ...
1) 抵抗を入れ替える。
2) LED を 横にマウント。
3) ブチルゴムの両面テープでマスク
かなぁ。もし LED を壊してしまったり、なくしてしまったら 秋月の 1608の LED と交換かな。赤は 端子が表面に出ているので 付けやすいが 黄/オレンジは難しい。青はないので 2012を無理やり付けるしかないか。抵抗をなくしたら ... ちょっと困る 1608 の抵抗は揃えていない。2012 ならあるのだが .. 。1608 は 秋月で リールなら買える。2500 個! 500 円。マルツだと 10個52円
それはともかく、Ingenic JzSOC USB-DISK というふうに見えていて DISK のサイズは 1736MB 。FLASH 全部を見せているわけではないようだ。
とりあえずは、こんなところ。
追記: I2C は分かった、DACかもと書いた空きパターンに接続されていた。空きパターンは、1.27mm ピッチ(?)。ここから引き出して AVR とか I2C スレーブになれる マイコンやデバイスに接続できる。
となりの シリアルは、外側にパターンが伸びていないので不明。無接続かも知れない。... 無接続なら 引き出すことは可能だが、0.4mm ピッチだし相当に厳しい。私には無理。
BOOT_SEL0 は、Jz4725B のそばでプルアップしている様に見える。BOOT_SEL1 は、配線が伸びていて何か使っているようだ。USB-BOOT できる可能性がある。
そういえば TVOUT だがメニューにあるものの、それ用の IC がない。TVOUT はできないはず。メニューで選んでしまうと操作できなくなるかも知れないし危険。
追記:54pin の LCD のデータシートを探してみた。
54pin だということが分かったので、探してみた。
ヒットしたのが
- LTV350QV-F04
- AM480272H3TMQW
- WXCAT35-TG3
- T2432C13VR01
- MB-TFT-35-S4-S
とりあえず、LED と GND に着目してみてみると 全部
- 1,2 -- LED カソード
- 3,4 -- LED アノード
- 53,54 -- GND
だった。なにかデファクトスタンダードみたいなのがあるようだ。
HSYNC VSYNC DOTCLK RESET CS
LTV350QV-F04 36 37 38 8 9
AM480272H3TMQW 36 37 38 - -
WXCAT35-TG3 42 43 44 14 15
T2432C13VR01 36 37 38 8 9
MB-TFT-35-S4-S 36 37 38 8 9
AM480272H3TMQW は名前から想像できるように 480x272 で、他のと違う。
とりあえず、違う 2つを外して もうすこし別の信号もチェック。
CS SDL SDI DATA DataEn
LTV350QV-F04 9 10 11 12-35 52
T2432C13VR01 9 10 11 12-35 52
MB-TFT-35-S4-S 9 10 11 12-35 52
どうも一緒のようだ。これだと仮定して、たとえば HSYNC に信号が接続されているか.. 接続されているならどの信号か? という観点で見ればだいたい判るはず。
よく見てみよう。左の ところ 4pin 分つながっている。これは丁度 39-40 の VDD(analog),VCC(diginal) にあたる。左端の 2pin も GND に接続しているように見えるし、右が 1 番ピンということになる。
その右 38 から DOTCLK,VSYNC,HSYNC,R7... R0 という並び順。8pin が接続されていて 3 pin が同じ信号。... ということは smart LCD でなく Video タイプの LCD。3pin が同じ信号ということは Red は 6bpp か 5bpp 。次に 6pin 分接続されていて、その先はよくわからない。まぁ Green は少なくとも 6bpp ということだけはわかる。こんな風に 接続をおっていって、R5G6B5 の 16bpp ということが判った。
これで少なくとも「どういうドライバを使うのか?」ということは分かったわけだ。ただし、バックライトを点灯する方法は分からない。これについても 明るさ調整できるようだから、おそらく PWM のどれかという仮定はできる。
さてボタンの追跡。
これは、R ボタン周り。5 つのボタンがあって、それに対して 6つの 103(10KΩ) の抵抗が付いている。たぶんプルアップかブルダウン。ちがうとおもうが あるいは直列かも知れない。それはともかく、6 つの信号が 右端で VIA (スルーホール) に消えている。ここで裏をみて 追って行くわけだ。
裏はちょうどバッテリーで隠されている。バッテリーをずらした写真は、これ。
それに対応する表側も撮り直した。
バッテリーは邪魔なので、外してしまった。ちなみに、バッテリーも LCD もない状態でも USB に接続したらアクセスできた。当面はこの裸の状態で 使おうと思う。
よーく見る。上の写真の 上部 の 7 本の横のラインのうち 上の 6本が、Rボタンの ところの 6 つの 103につながっている。で,一番上の 1 つを除く 5 つが LCD 用のデータ線とつながっている。
上の 1本は、VIA で消えているわけだが、表の部分は LCD のコネクタの下で分からない。見えないところで、おなじように LCD のデータ線とつながっているのかも知れない。
ところで、裏面で 1本単独の縦のラインがある。これは、BOOT_SEL1 。これも同じように LCD 用のデータ線につながり、どこかのボタンの線ともつながっているのかも。
さて、こういうデザインだとすると、Linux の LCD ドライバで対応しなければボタンの情報は取れない。ひょっとして、リファレンスデザインで既にそうなっているのかも。ここらでドライバのソースを見てみた方が良いかもしれない。
USB-BOOT
電源OFF の状態で → ボタンを押しながら USB を接続すると USB-BOOT になることが判った。
「JZ4750 USB BOOT Device」というデバイスとして認識される。
まだ詳しくはわからないが、ここでプログラムをアップロードすればそれが動作するのだろう。
まず最初にやりたいのは、FLASH の吸出しと書き戻し。それさえ出来るようになれば、大分不安が解消される。
まずは、xburst-toolsで何が出来るか調べて、これのビルド環境をつくることから始めてみよう。
とりあえず nandprog の README を読んでみた。linux 環境で動作すると書いてあり、ビルドするには mipsel-linux-gcc が必要とも書いてある。
詳しくは、NandProgrammer_Manual.pdfを読めとも。
でも ftp.ingenic.cn には全然アクセスできない。qi-hardware.com は ingenic オリジナルのものも含めて ちゃんと最新のものがあるみたいだから、こっちを頼ろう。
とりあえずは、ダウンロードして README を見ていった。どうも usbboot で FLASH に書き込むことができるようだ。
- /etc/xburst-tools/usbboot.cfg を用意する。
- usbboot -c "boot"
- usbboot -c "nprog 0 u-boot-nand.bin 0 0 -n"
- usbboot -c "nprog 2048 uImage 0 0 -n"
こんな感じで使うものらしい。コードを見ると、usb_get_ingenic_cpu() という 関数があってそれで処理を切り分けている。それは USB のプロトコルで 教えてもらうもののようで、かならずしも 実際のCPUと同じである必要はないようだ。
"boot" コマンドを実行すると、プログラムを送り込んでそれが動作するように思える。stage1 と stage2 があって、動作するにも段階があるようだ。動作すると、何がおきるのか?
stage2 のコードには usb のディスクリプタの記述がある。... ということは自分で usb を扱っている。ここまでくればプログラム次第でなんでも出来るのだろう。
stage2 で、定義されているコマンドは、
VR_GET_CUP_INFO
VR_SET_DATA_ADDRESS
VR_SET_DATA_LENGTH
VR_FLUSH_CASHES
VR_PROGRAM_STAT1
VR_PROGRAM_STAT2
VR_NOR_OPS
VR_NAND_OPS
VR_CONFIGRATION
VR_SDRAM_OPS
どうも SDRAM に書き込んで 実行することもできるようだ。ただし、コマンドを発行する側も合わせて対応しているかどうか見る必要がある。
残念ながら、READ するコマンドはないように思える。... 作ればなんでも出来そうだが
どうも読むべきは、USB_Boot_Tool_Manual_1.4_EN.pdf らしい。直接リンクはしないが、これならググれば見つかる。
... そんなことより どうやってプログラムが動いたことを確認しよう。LED のアクセス方法を知るのが先か?
- LCDを動かせれば、LED も必要ないのかも知れないが、LCD そのものも デバッグしないといけないだろう。あと LCD では情報を人が目で見るしかなく、記録できない。これはデバッグ時には面倒になる。
- USB も良いのだが、ドライバーが切り替わると 接続しなおさないといけなさそうで 厳しい。usbboot などプログラムと組みにすれば、問題ないような気もする。が、作るのが面倒そう。
- 電子工作を前提にすれば、I2C 経由で情報を書き込むとかはできる。メモリに書き込んで後で読み込むこともできるだろうし、シリアルに変換してホストに送ることもできるだろう。
- どれも一長一短のような気がする。シリアルが便利なのだが、それも電子工作前提になるし他の人には勧められない。
- 使えるものなら USB が一番良いような気がしてきた。専用プログラムならあたかも シリアルに接続されているように見せることも可能そうだし。できるかどうか分からないが検討してみよう。
こういう話題の続きは別途記事にしようと思う。さて、提供されている NEO_UPDATE.BIN の構造はどういうものなのだろう? それが分かれば dual-boot といったことも可能だろうし、FLASH に書き込む方法も分かるかも知れない。書き込む方法さえ分かれば吸い出す必要などなくなる。
まず、NEO_UPDATE.BIN 自体は 67MB ほど。U-DISK として見えている部分は 1736MB で見えていない部分が、200MB はある。
まず、NEO_UPDATE.BIN が圧縮されているのかどうか? 圧縮済みなら このファイルを圧縮しても 小さくならないので判断できる。
gzip をかけてみると 23 MB ほどに圧縮できることから 基本的に圧縮されていないようだ。だからといって FLASH の RAW イメージともあまり思えない。FLASH の容量との差が大きすぎる。
ちょっと調べてみたが、RAW イメージかも。先頭 150KB 程は Ingenic 社が提供しているブートローダのようだ。uC/OS-II というメッセージが見える。続く部分は、ファイルシステムのようにも見える。だが、どういうファイルシステムか分からない。ひょっとして yaffs2 とか?
dump してみたが、特徴がある形式で、yaffs2 とも思えない。カーネルソースをチェックしてみると UBI という ウェアレベリングのレイヤーがあり それに最適化された UBIFS というものがあるようだ。どうも UBIFS っぽい。
それはともかく、RAW イメージならば FLASH の先頭かどこかに書くことで 元に戻せるのかも知れない。
そんなことより開発環境。どうしよう。dingoo-linuxのダウンロードページにある dingux_toolchain_20091022.tar.bz2 でいいかという気になっている。
ちょっとメモ:「遊星より愛をこめて」より
usbboot に関する解析記事を発見。だいぶ分かってきているのだが、rockbox の usbboot とか A-320 についてとか知らないので関連情報が役にたった。
バッテリーの制御IC
例外はあるかも知れないが、中華PMPというものは、充電中は必ず電源が入る。たとえ電源スイッチを OFF にしていても電源が入ってしまう。そして無意味にバッテリーのイメージを表示して充電中を示すアニメーションまでしてくれる。そして、これも例外ではなかった。
そんなことをする理由は、コストを下げるために自分で電源管理をするからだと思っていた。
しかし、充電を制御するIC は意外と安いものだった。それでも使わないのだろうと勝手に思っていたのだが Onda VX747 は、TQ7051 という IC (LTC4054 互換,pdf) を使っていることを RockBoxのページで知った。
となれば、こいつも使っていておかしくない。真面目に調べてみることにした。
電源用の IC は、SOT23-5 とか SOT23-6 という 5,6 ピンの ものが多い。そして、必要なのは 主電源用の 1.8V,3.3V とバックライト用、バッテリー充電用の 4つ。
探すとちょうど 4 つある。そのなかでそれらしいのがこれ。
ちまみに、1つだけ 6ピンで LCDのコネクタのそば。残りの 2つは並んでいてそのうちの 1 つにはインダクタが付いている(おそらく 1.8V)。
ついでなので書いておくと写真下の8ピンがスピーカ用アンプ。 XPT4890 という IC で 1W BTL。LM4890, TPA2005D1 と互換。
LT4054 互換なら、2 番ピンが GND 。3,4 番ピンが 電源とバッテリー。-- 一応それらしく見える。1番ピンは STAT で 無接続で問題ない。特徴は、5番ピンで 2KΩぐらいの抵抗が接続される。写真ではよくわからないが、2.7KΩが接続されている。
場所も バッテリーのリード線のちょうど裏でそれらしい。
たぶん LTC4054 互換で間違いないのだろう。だとすれば電源を接続すれば勝手に充電してくれる。プログラムを作って制御する必要はない。
追記: チップの表面に 55b9 と印字がある。これでググると ビットした。充電IC で間違いない。
ちなみに、4.2V ±1% で充電する。C/10 になったら充電を停止する機能がある。(電圧が下がれば)再充電。 あと電圧が低い場合 2.9V になるまで 電流を制限しての充電機能もある。
LT4054 と同じだが、それより劣るようなものもあるので とりあえず安心。
これは嬉しい。バッテリーを外さなくてもデバッグできるし、管理用のドライバも不要。ただ電圧を監視すれば良い。
あとは、電源スイッチを Off すると電源が切れるのか、自分で制御して電源を切るのかの調査が必要。電源を自分で切るのなら切り方が分からないとバッテリーが空になってしまう。
ちなみに、ちゃんと電源を切っているのはほぼ確か。USB を接続するとパワーオンリセットで USB-BOOT にできるから間違いなさそう。電源スイッチも Off にすると直ちに Off になる。シャットダウンしている様子がないので、機械的な電源スイッチだと思う。
オートで電源 OFF できるのを忘れていた。機械的な電源スイッチではないかも。OFF する方法を見付けないと。
スピーカ用アンプのメモ:
XPT4890 という IC で 1W BTL。LM4890, TPA2005D1 と互換。と書いてしまったが、互換なのは LM4890 で 1W 。TPA2005D1 は PWM で 1.4W 。ピンアサインは互換性がある。どうもルーツは、MC34119っぽい。よく見るとピン互換性がある。MC34119 は 250mW だがだいぶ進化しているようだ。
ついでにメモ: aitendo で扱っている TMPA2055DM(2.7W) もピン的には互換。ただし、TPA2005D1 と違って 普通の D級アンプなので、出力に LC フィルターが必要。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: NEO_UPDATE.BINの構造
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/09/2010 13:45:02
-----
BODY:
NEO_UPDATE.BIN をダンプしてみると ... 4バイト単位で 最後の 1 バイトが 0xff になっているデータが多いことに気がつく。
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf 0123456789abcdef
00: 00 0e 07 ff 00 0e 04 ff 00 0e 03 ff 00 0f 03 ff ................
01: 00 0f 03 ff 00 0f 03 ff 00 0f 03 ff 00 0f 03 ff ................
02: 00 0f 03 ff 00 0f 03 ff 00 0f 03 ff 00 0f 03 ff ................
03: 00 0e 03 ff 00 0e 02 ff 00 0f 00 ff 00 0f 00 ff ................
04: 00 0f 00 ff 00 0e 01 ff 00 0e 02 ff 00 0f 00 ff ................
05: 00 0f 00 ff 00 0f 00 ff 00 0e 01 ff 00 0e 02 ff ................
06: 00 0f 00 ff 00 0f 00 ff 00 0f 00 ff 00 0e 01 ff ................
07: 00 0e 02 ff 00 0f 00 ff 00 0f 00 ff 01 10 00 ff ................
08: 01 10 00 ff 00 0f 00 ff 00 0f 00 ff 00 0f 00 ff ................
09: 00 0f 00 ff 00 0f 00 ff 00 0f 00 ff 00 0f 00 ff ................
0a: 00 0f 00 ff 00 11 00 ff 01 10 00 ff 00 0d 00 ff ................
0b: 00 0e 00 ff 01 11 00 ff 02 18 01 ff 01 1f 03 ff ................
0c: 04 28 08 ff 0e 37 0f ff 17 48 16 ff 1c 52 1b ff .(...7...H...R..
0d: 23 59 22 ff 2c 64 2b ff 33 6e 31 ff 35 73 35 ff #Y".,d+.3n1.5s5.
0e: 3e 78 3e ff 46 7e 47 ff 49 80 48 ff 4a 80 49 ff >x>.F~G.I.H.J.I.
0f: 4c 82 4a ff 48 82 47 ff 45 84 44 ff 46 85 46 ff L.J.H.G.E.D.F.F.
たとえばこんなデータ。
1KB 単位ですべてが そうなっているものをサーチして分析してみると ..
開始オフセット(KB) サイズ(KB)
152 299
452 299
:
7052 299
:
8870 1
14950 1
23782 1
24552 1
:
:
66428 2
66431 3
66435 3
66439 2
1KB 単位をブロックとして、152 ブロックから 7052 ブロックの間は、300 ブロック単位で 299 ブロックが該当する。
その後も そういうブロックが最後まで出てくる。
この特徴あるデータは、ファイルの中身ではない。ファイルを管理するような データ(メタデータ)。普通なら ファイルシステム自体のデータだが、例えば ウェアレベリングするための構造がファイルシステムの 下のレイヤとして存在するかも知れない。
それが何かについては、とりあえずおいておいて、そういうものが 152KB 以上最後まで のエリアにある。
152KB 以下はどうかというと、152KB を dd コマンド等で 切り出して string をかけると分かる。
ちょっとだけ抜粋すると
Jz4740
Prepare to Download MINIOS.
Ingenic Semiconductor Co., Ltd. Loader Version V1.0
:
***********************************************
* Welcom to minios shell *
***********************************************
なんてメッセージがはいっていて、Ingenic 社が提供しているブートローダだとわかる。
... というわけで ブートローダ と ファイルシステム(のような何か)の 2 部構造らしい。
そうなると カーネルはどこにあるのか? ということになる。場所がないわけで ファイルシステムの中ということになりそうだ。
ところで、ファイルシステムの部分に対して string をかけると いろいろ文字列が出てくる。出てくる文字列から判断して プログラムが 圧縮はされずに入っているようだ。たとえば、
ld.so-1.7.0
なんて文字列が 10 カ所ある。全部で 10 個のプログラムしかない?
あとは、
nfl:\SYSTEM\... (... は省略の意味)
なんて文字列が 38 カ所ある。U-DISK のパスを示すわけで、明らかにプログラムが扱っているデータと判断できる。
でどんなファイルシステムなのか?
http://chromaprog.blog101.fc2.com/blog-entry-22.html
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Neo Slim 3000でなにをしようか
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/10/2010 22:14:39
-----
BODY:
いろいろ調べてぼんやりながら何ができそうかについては、わかってきた。
で、実際なにをしていこう。
まずハードウェアの改造などしなくてできること。たぶん...カスタマイズ可能な PMP にするということになりそうだ。
既に DINGUX というものがあるわけだから、そのリソースを極力利用する方向で考えるわけだが、動かすのが目的なら A-320 を買ってDINGUXをインストールすればよい。これを目標にすると動機としては弱くなってしまう。
Linux をちゃんと動かすのを1つの目標にして。DINGUX が動くかどうかは、それができたかどうかの判断基準。... ぐらいに考えておこう。
さて、その先はどうしよう。趣味なんだから Linux を動かすこと自体を目標にしてもかまわないわけだ。Linux が動いたら満足してしまう気もするが、先のことも一応考えてみよう。
本体だけで高機能なものを作ろうとするのは多分無理がある。上には PDA や PC があるわけで、PDA や PC で出来ることならそれでやれば良い。方向性としては専用機化が良いのではないか。
例えば、サブディスプレーだって良いと思う。PDA でそれが出来たとしてもそういう使い方はしない。専用機にしたら PDA が別に必要になる。
電子工作の対象としても考えている。なにかデバイスを接続して制御したい。そういうことをすれば、ますます専用機化していきそうだ。
あとやりたいことは、Linux ではなくもっと 生(RAW)に近い状態で使う。AVR でやっているようなことを これでやっても良いような気がする。
usbboot を見て思ったのだが、ブートローダの stage2 は、USB を制御している。おなじようにして好きなソフトを動かしても良さそうだ。
好きな リアルタイム OS を動かしても良いし、本当に 生で使ってもかまわない。
入れ替えるのもそれほど手間でもない。ボタンを押してUSB に差し込み usbboot を動かすだけだ。
ただバッテリーには要注意。自分でバッテリー制御をやっているとすれば、バッテリーをつなげたまま 好きなソフトを動かすのは危険。バッテリー周りの仕組みがわからないなら外してしまった方が良さそう。
マイルストーン
0) 開発環境の構築
開発用の Linux のインストールと toolchain のインストール
1) usbboot を理解して動作させる。
FLASH にしてもなにもしないで書き込めるわけではないようだ。少なくとも 制御するための情報を Config ファイルに正しく書かないと。SDRAM も同様だし、結局チップの初期化を一通り理解する必要がありそうだ。
あと gpio を 出力にして H/L の設定をするコマンドがある。状態の読み込みは、直接レジスタを見れば良いのだろう。
このツールだけで 制御ピンを探すようなことは出来そうだし、改造すれば、たとえば PWM を動かしてみるということは出来そうだ。
こういうことをやっているうちにチップの制御方法を理解していくはず。
2) linux をビルドして 基本的な動作を確認
デバイスドライバを極力減らしてビルドして、linux そのものが動いているかどうか確認する。USB はひとつの確認手段になるはず。
USB はチップの機能だし、制御方法を見つけなくても動かせる。なによりドライバーがある。コンソールとして使うことも出来るに違いない。
USB が使える出来る前の段階では LED しかないわけだが、よくよく考えれば stage2 で既に動いているわけで 工夫次第で 信頼できるデバッグ手段になり得る。
3) Neo Slim 3000 のドライバを動かす
LCDは既に外している。裸の状態でつなげて壊すのも嫌だし、Linux がちゃんと動いてからつなげようと思う。
LCD をつなげるまでは、ボタンは自由に見ることができるが、LCD と線を共有しているので、制御の仕方も変わる。
装置固有のドライバはこの段階で確認する。
Neo Slim 3000 のドライバがちゃんと公開されているかどうかは現時点では分からない。オリジナルのドライバで良いのかもしれないし改造しているのかも知れない。
まぁ大分後の段階になるから、そのときにはかなり分かっているはず。
306 CTRL (A = ○)
308 ALT (B = ×)
32 SPACE (X = ▲)
304 SHIFT (Y = ■)
9 TAB (R)
8 BS (L)
13 RETURN (START)
27 ESC (SELECT)
273 UP (UP) 一応未確認
274 DOWN (DOWN) 〃
275 RIGHT (RIGHT) 〃
276 LEFT (LEFT) 〃
19 PAUSE (HOLD)
0 -- (POWER) ?
だそうだ。同じキーコードを返却するようにしないと。
Neo Slim 3000 は、START,SELECT なんていうボタンはないが、幸いなことにアナログスティックはある。
アナログスティックとしての機能をサポートしないで、ボタンを拡張するのに使えばなんとかなりそうだ。
例えば FN1-FN4 みたいに定義して
FN1
FN4 FN2
FN3
FN1-4 + X => START
FN1-4 + Y => SELECT
とか。同時押しというオペレーションを使っているソフトがあるらしいので、アサインは検討の余地がある。
問題は HOLD 。固定できるキーはないから 工夫がいる。
鍵を回すイメージで
FN1 → FN2 → FN3 → FN4 → FN1 (時計回りで1周) HOLD
FN1 → FN4 → FN3 → FN2 → FN1 (反時計回り) HOLD解除
とか。
POWER はどうしよう。shutdown 機能があるので 電源スイッチでは代替できない。START + SELECT 同時押しかつ長押し?
ついでに PMP-3100 。-- プライオリティは低いが、一応
こいつは、POWER だけない。START + SELECT 同時押しかつ長押しで良いのかも。
ついで dmenu の機能で
L : 音量ダウン(-5%)
R : 音量アップ(+5%)
X : 輝度アップ(1/5レベル)
Y : 輝度ダウン(-1/5レベル)
というのがある。カーネルのドライバレベルで出来ても良いような気もする。FN2 だけ特別扱いにするとか。
4) ユーザランドの動作確認
Linux が概ね動いてから、DINGUX とかのユーザランドを動かしてみることにする。MP4 のアクセラレータとかを使っていない限り互換性はあるはず。
IPU は、JZ4725B にもある。ユーザランドから見て A320 と違いがないようにできそうだ。
不安なのは、LCD 。ハード的に R5G6B5 と決まっているから A-320 と合わないかも。
→ dingoo-linux wiki: GPIOを見ると配線を調査したデータが載っている。これ見ると 16bpp で VSYNC/HSYNC を使っているように見える。16bpp だからといって R5G6B5 とは限らないのだが、デザインガイド通りなら R5G6B5 のはず。-- あまり心配しないで良いかも。
IPUが対応しているフレームバッファのフォーマットは 24bpp か R5G6B5。だから R5G6B5 なのは確定で心配する必要はなさそう。
“初心者お断り”の超小型Linuxマシン「本(Ben)NanoNote」をいじり倒すというレビュー記事が出ている。普通に作っていけば、これと似た状況になりそう。
まぁこんな感じ。それぞれの段階を楽しもうと思う。きまぐれで買ってみただけだから途中で挫折するかも知れない。
電子工作として何するかは、あまり考えていない。シリアルとか欲しいと思ったが、USB でなんとかなるはずで 再考中。
まぁセンサは欲しい。温度計とか加速度センサ。AVR の Tiny44A とかを使ってみたいが、全部終わった後。
調べたところ PIC24FJ64GB002 が USB HOST 機能もあって良さそう。-- ずっと先になりそうだが一応メモ。
さらに言うと、LCD を外して別のものをつなげてみたい。FPGA とか。smart LCD 用のピンは出ていると思うので、多少は柔軟な使い方ができるはず。
動いてしまった後の話になるが、mipsel のセルフビルド環境というものにしてみたい気もする。usb デバイスしかないわけだが、イーサネットとして見せる 仕組みはあるので、HOST とつないで network には接続できる。rootfs を nfs にすれば、リモートから ログインできるマシンになるわけだ。このあたりは SmartQ5 と同じ。
SmartQ5 は 128MB あるがこれで少ないと感じていたわけで、32MB ぐらいで何ができるのか? という気にはなるのだが、ubuntu を載せるとかいう無理なことを考えなければ それなりには使えるかも知れない。16bit 幅 512Mbit の DRAM をなんとか手に入れて 64MB にしてみる... とか電子工作として楽しめるかも知れない。
だがメモリを増やすのなら、2 個載る Jz4740 とかの方が楽めそうだ。512Mbit にしても 128MB になる。あと メモリ帯域が 2 倍違うため性能的にも有利。
追記: 512M bit DRAM の値段を考えたら、吊り合わないことが分かった。
ただ 512M bit (8bit 幅)の SO-DIMM (3000円ぐらい) から取り外すなら 値段的には折り合うか。難易度は高いが親子にする加工ができれば128MB にできる。
仮に 333 Mhz で動作させたとすると、メモリクロックは この 1/3 が選択できるので 111 Mhz ということになる。
SDRAM は隙間なく使うようなことができた場合 1 クロック 2 バイト(16bit 1個の場合) の READ/WRITE ができるわけで、 単純計算で 222 MB/sec の帯域ということになる。2 個積めばこの倍で 444MB/sec 。ただし帯域を使いきれるわけではない。大量のメモリコピーをするようなケースで 良くて 1/2 とか。
アクセスタイムという面で見てみると ... 普通の使い方をしている場合、L1 キャッシュラインを 埋めるだけの連続アクセスになる。キャッシュラインが 16バイトだとして、16bit 幅だと レイテンシ + 8クロックかかる。2 個使って 32bit 幅にすると レイテンシ + 4 クロック。
レイテンシは、CAS レイテンシが 2 クロック。ランダムアクセスだと ページを切り替えるからさらに 数クロックかかる。たぶん 全部で 4 クロックはかかるはず。4 クロックだとしても 8: 12 だから バス幅が 2 倍になっても 1.5 倍にしかならない。また、こういう状況になるとすれば、キャッシュが全然ヒットしないケースということになるからレアケース。Jz4740 が速いといっても Jz4725B に比べて せいぜい 10%-20% 高速とか じゃないかと思う。
追記:
Jx47xx ではバンクはインターリーブになっていない。そうすると単純に Burst 転送の繰り返しと思って良いかも知れない。
Programmers Manual にタイミングが載っていたので見てみた。
以下は 16 バイトの READ/WRITE
同じページにアクセスする場合 典型的な例では、32bit なら READ/WRITE に 6clock , 16bit なら 10clock 。
ただし、こういうアクセスをするのはかなり難しい。単純に memset する場合でも ダーティなキャッシュを追い出して書こうとするメモリを読み込み、キャッシュに書いてダーティにする動作になる。memcpy だと source と distnation を交互にアクセスすることになりがち。
違うページなら 32bit で 11clock / 16 bit で 15 clock 。これがほとんどだと思って良い。
そうすると 32bit の A320 は最大 (16 - 11)/11 45% 速いことになる。ただし、普通こんなに差がでないのは上で書いたとおり。
ところで、JZ4740 は 180 nm のプロセスルールだが、JZ4725B は、160 nm だそうだ。クロックアップ耐性は JZ4725B の方が高いかも。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 開発環境を構築
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(Linux)
DATE: 04/15/2010 00:44:56
-----
BODY:
Neo slim 3000 の開発環境を 遊んでいる eeePC 701SDXに構築することにした。
OS は、Vine-5.1にした。DVD イメージファイルを USBメモリに RAW で書き込むと DVD boot と同じようにインストーラが起動する。
いままで diskboot.img を使ってきたのだが、同じようにやろうとしてはまった。どうも diskboot.img は、使えないようだ。
mips 用の toolchain は、
- http://code.google.com/p/dingoo-linux/downloads/list
にある dingux_toolchain_20091022.tar.bz2 を /usr に展開して使うことにした。
export PATH=$PATH:/usr/mipsel-linux-uclibc/bin:/usr/mipsel-linux-uclibc/usr/bin
export CROSS_COMPILE=mipsel-linux-
こんな環境変数の設定で使う。
つぎに、dingoo-linux のカーネルを試しにビルドしてみることにした。
svn で全部のソースを取って来ることになっているのだが、どうしても途中でエラーになる。関係ありそうなディレクトリを個別に取って来ることにした。
とりあえず次の3つにまとめた。
1) linux-2.6.24.3 を展開して TOP デレクトリに cd
2) files-2.6.24.3-dingoo-r171.tar.gz を展開
3) mtd-utils-dingoo-r171.tar.gz を展開
4) linux-2.6.24.3-dingoo-r171.patch.gz を -p1 で当てる。
5) make a320_defconfig
6) make menuconfig
7) make zImage
これで、ビルドだけはできた。ただし、それらしいというだけで動くものかどうかは分からない。
さて、カーネルに付属のドキュメント README-JZに目を通してみたのだが、
+-----------+ +-------------+ +-------------+
| YAFFS2 | | UBIFS | | FAT or EXT2 | Filesystems
+-----------+ +-------------+ +-------------+
\ | / \
\ | / \
\ | / \
\ | +-----------------+ +-----------------+
\ | | UBI Block Layer | | MTD Block Layer |
\ | +-----------------+ +-----------------+
\ | / /
\ | / /
\ +-------------+ /
\ | UBI | /
\ +-------------+ /
\ | /
+-------------------------------------------+
| MTD |
+-------------------------------------------+
|
+--------------------+
| nand_base.c |
+--------------------+
|
+--------------------+
| jz4740_nand.c |
+--------------------+
なんていう図が載っている。ブロックデバイスの上に UBI というレイヤがあって、どうも ウェアレベリングのようなことをしているようだ。そしてその上に UBIFS という専用のファイルシステムがある。
それとは別に YAFFS2 も載せているようだ。
ようだと書いているのは、dingoo-linux には、それらが含まれていないため。Ingenic が出しているパッチは 20090506 が最新のようだが、ダウンロードできないので確認できていない。
まぁ dingoo-linux がサポートしていない以上 DINGUX を動かすだけなら必要ではないのだが... Neo Slim 3000 のファームウェアがどうも UBIFS を使っているっぽいのだ。中を覗いたりするのに欲しいような気がしている。
ところで、ビルドしてみたカーネルは、Neo Slim 3000 では動作するはずもない。ビルドしたのは、A-320 でどういうカーネルになっているかを確認するのが目的。
ベースにしようと思っているのは、
- http://projects.qi-hardware.com/
こちらの方。Jz4725 を使っている SAKC用のカーネル をベースにしようと思う。
情報は、SAKC : Development_Tools にあるようだ。
linux は出来ていると勝手に思っていたのだが、Qi-U-BOOT までみたいだ。だが、手順として、
1) Create config Files
2) Modify existing Drivers
と書いてあるだけだし、新チップに対応するような大変さは感じられない。 大丈夫なんだろう。
ちなみに上の projects の リンクから、Ingenic が出している最新のカーネルソースも取れるようだ。
SAKC のカーネルと書いたが、Ben-NonoNote の Building_Software_Imageをみると openwrt-xburst を git で取って来ることになっているらしい。
とりあえずとって来てみたら linux-2.6.32 用のパッチがあったので、同じように整理してみた。
ビルドしてみた。
基本は dingoo-linux と同じだったのだが、defconfig がないので、全部自分で設定しないといけない。
Ingenic のオリジナルを http://projects.qi-hardware.com/ を見て git で落とせたので 同じように整理。dingoo-linux の方がオリジナルに近い感じ。オリジナルは、YAFFS2 と UBIFS が入っているので files-xx が大きい。2.6.31.3 ベースの files-xx は、UBIFSが linux 自体に入っているので 小さくなっている。ちなみに rxx は git に登録されているリビジョン。
xburst-tools を ビルトしてみる。
上の projects のリンクに Xburst Tools がある。これに usbboot が含まれている。
autogen.sh を実行 して configure するようになっている。最初 CentOS 5.4 とかを使ってみたが CentOS が使っている autoconf が古くてエラーになった。
あと、libconfuse-devel (と check-devel) が必要で、Vine だと VinePlus に含まれている。あと libusb-devel も必要で DVD には含まれていない。
一応ここまでで、開発環境は構築できたとしよう。
追記:メモ
IPU -- イメージプロセッシングユニットの説明は、Programming Manual にあった。
概要は、YUV や YCbCr フォーマットのデータを resize 付きで フレームバッファに転送する機能。(それだけで他の機能はない)
フレームバッファは、R8G8B8 か R5G6B5 / R5G5B5 である必要がある。
あと Xburst は SIMD 命令 (x86 の MMX とか SSE のようなもの?) を持っているが、詳細は分からない。
- http://en.qi-hardware.com/pipermail/developer/2009-August/000317.html
どうも
- アセンブラ のソースは公開されているから、それを見れば 一覧と形式は分かる。
- Mplayer とか jpeg6b に移植されているので 使い方はそれを参考にできる。
ということらしい。
追記:
u-boot も置いておく。u-boot-1.1.6 からの差分。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Neo Slim 3000 NAND FLASH まとめ
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/15/2010 14:41:20
-----
BODY:
Neo Slim 3000 では、UBI という レイヤーがあって、ウェアレベリングを行っているらしい。ということは、論理ボリュームが構築されていて、それを通してアクセスしないと正しい情報にならないことになる。
カーネルを入れ替えて 好きなように NAND FLASH を書き換えるのもアリだとは思うが、そういうことをすると ウェアレベリングの情報がなくなってしまうので、蓄積した ウェアレベリングの情報も消えてしまう。
それだけでなく、dual-boot ができないということにもなる。論理ボリュームを通して使っているわけなので、互換性を保たないと 前のデータは壊れてしまう。
いまはまだほとんどわかっていないが、どのように FLASH を使っているのか ここにまとめていこうと思う。
ちなみに、dingoo-linux では、UBIFS は入っていないが、UBI はサポートしている。同じようにオリジナルのファームウェアが UBI を使っているのが理由のひとつだろう。
ついでなので書いておくと、SmartQ5 は iNand という FLASH を使っている。これは SD カードのようなもので、自分でウェアレベリングをしている。だから、生の FLASH と違って 普通の DISK のようにアクセスしても問題は起きない。
NAND FLASH メモリマップ (Neo Slim 3000/fw ver 1.7)
開始 page offset size (page数) 使用内容
0 0x00000000 6KB 3 stage1 bootloader
3 0x00001800 250KB 125 空き
128 0x00040000 72KB 36 stage2 bootloader
164 0x00052000 696KB 348 空き
512 0x00100000 3602KB 1801 (?)
2313 0x00484800 空き?
25088
30232 空き?
49664
0x07e80000 空き(※1)
65536 0x08000000 34320KB 17160 空き(※1)
82696 0x0a184000
100352 0x0c400000
0x0ed00000 19456KB 9728 空き(all ff)
0x10000000
(※1) 256KB 毎に
ff ff ff ff 01 00 00 00 00 00 00 00 ff ff ff ff
の header (残りは all ff )
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: UBIFS とは?
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/15/2010 21:36:19
-----
BODY:
前の記事で、どうも UBIFS を使っているらしいと書いた。
もう一度 README-JZ の図を貼るが
+-----------+ +-------------+ +-------------+
| YAFFS2 | | UBIFS | | FAT or EXT2 | Filesystems
+-----------+ +-------------+ +-------------+
\ | / \
\ | / \
\ | / \
\ | +-----------------+ +-----------------+
\ | | UBI Block Layer | | MTD Block Layer |
\ | +-----------------+ +-----------------+
\ | / /
\ | / /
\ +-------------+ /
\ | UBI | /
\ +-------------+ /
\ | /
+-------------------------------------------+
| MTD |
+-------------------------------------------+
|
+--------------------+
| nand_base.c |
+--------------------+
|
+--------------------+
| jz4740_nand.c |
+--------------------+
jz47xx のような組み込みチップで使っている NAND FLASH は、生の FLASH なので、ウェアレベリング機能などはない。そして、使う側から見て 普通の USB DISK に見える機能が見えていて FAT で ファイルシステムが作れるようになっている。
その間に ウェアレベリングをする機能がないと、特定の ブロックばかり書き換えられて FLASH がすぐダメになってしまう。
ウェアレベリングをする機能を提供しているのが、どうも UBI Block Layer というもので、基盤の機能を提供するのが UBI 。
UBIFS は、内部で使われるファイルシステムで、UBIFS - UBI の二階層の構造。これとは別に YAFFS2 という FLASH 向けファイルシステムはいっている。( ちなみに Linux で 有名な JFFS2 という FLASH 向けファイルシステムは、数 GB といった 大容量フラッシュを想定して設計されていないらしく、推奨していないようだ。)
どういう基準でどちらを使うのかよくわからないが、UBI Block Layer 必須のシステムなら UBIFS を使った方が整合性が良さそうな気がする。
ところで、Linux-2.6.32 だと UBIFS は標準でサポートされている。下位レイヤの UBI も drivers/mtd/ubi にあるようだ。
さて、UBI とは、UBIFS というのは具体的にどんなものなのだろう? そして u-boot は UBIFS からのブートを サポートしているのだろうか?
カーネルの Documentation/filesystems/ubifs.txt があり、その翻訳が JFプロジェクトでされている。
ubifs.txt によると さらに詳しい情報は、UBIFS - UBI File-Systemと UBIFS FAQ and HOWTO のページになる。
とりあえず知りたいのは、オリジナルファームウェアの構造。UBIFS だと目星をつけたとして、どうやって中を見るのだろう?
FAQ をみると、「How to extract files from an UBI/UBIFS image?」 というそのものズバリなエントリーがあって、
# Create an 256MiB emulated NAND flash with 2KiB NAND page size
# (you should see the new MTD device in /proc/mtd)
modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa \
third_id_byte=0x00 fourth_id_byte=0x15
# MTD is not LDM-enabled and udev does not create device
# MTD device nodes automatically, so create /dev/mtd0
# (we assume that you do not have other MTD devices)
mknod /dev/mtd0 c 90 0
# Copy the contents of your image to the emulated MTD device
dd if=ubi.img of=/dev/mtd0 bs=2048
# Load UBI module and attach mtd0
modprobe ubi mtd=0
# Mount UBIFS
mount -t ubifs /dev/ubi0_0 /mnt/ubifs
と書いてある。要するに nandsim というカーネルモジュールが必要で それを使って実際に ubifs で mount するということらしい。
さて、Vine-5.1 にこれらは入っているのだろうか? どうも UBIFS は、linux-2.6.27 で入って Vine-5.1 も linux-2.6.27 。
ビルトしてくれていれば入っていることになる。
で、みてみると ...
drivers/mtd/nand/nandsym.ko
drivers/mtd/ubi/ubi.ko
fs/ubifs/ubifs.ko
嬉しいことにちゃんと入っている。
ちょっとこれで、ファームウェアの中が覗けるのかどうか、調べてみよう。
... それ以前の問題として id_byte って何?という疑問が。
2GB 8bit の K9XXG08UXM のデータシートが入手できたので見てみたところ ...
- 1st 0xec
- 2nd 0xd5
- 3rd 0x14
- 4th 0xb6
- 5th 0x74
と 5 つもあった。1st がベンダーID , 2nd がプロダクトID 。
3rd は、チップのタイプ
bit 7 : cache program - 0: Not support 1: support
bit 6 : interleave program - 0: Not support 1: support
bit 5-4 : 同時にプログラム可能なページ数 - 0:1 1:2 2:4 3:8
bit 3-2 : セルタイプ - 0:SLC 1:MLC(2bit) 2:MLC(3bit)
bit 1-0 : 内部チップ数 - 0:1 1:2 2:4 3:8
0x14 なら 普通の MLC 。
4th は、ページのサイズとか 消去ブロックサイズ。
bit 7 : アクセスタイム? 0:低速 1:高速(25ns)
bit 6 : ビット幅? 0:x8 1:x16
bit 5-4 : 消去ブロックサイズ 0:64KB 1:128KB 2:256KB 3:512KB
bit 3 : 0
bit 2 : 冗長データサイズ(512B あたり) - 0:8バイト 1:16バイト
bit 1-0 : ページサイズ 0:1KB 1:2KB 2:4KB 3:8KB
0xb6 だと 消去ブロックサイズ 512KB ページサイズ 4KB 。冗長データサイズは、4Kのページあたり 16x8 = 128B 。
5th は、容量に関する情報
bit 6-4 : プレーンサイズ 0: 64Mb .. 4:1Gb 5:2Gb 6:4Gb 7:8Gb
bit 3-2 : プレーン数 0:1 1:2 2:4 3:8
0x74 なら 8Gbit x 2 で 16Gbit/2GB 。
それは良いのだがこのパラメータをそのまま入れたら nandsim が 落ちてしまった。--- ううむ。
さらに ファームウェアは RAW データではないかも知れない。
先頭は確かに RAW データっぽいのだが、UBIFS の magic が見つけられなかった。UBI の magic も見つけられないし。
それに ... UBI はパーティション別に構築するものっぽい。
.. というわけで良くわからなく...
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Neo Slim 3000 GPIO まとめ
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/15/2010 21:39:05
-----
BODY:
dingoo-linux は A-320 の GPIO の解析を ここでまとめている。
同じようにまとめておかないと、よくわからなくなるので、ここを使って記録していこうと思う。
まず、Neo Slim 3000 は Jz4725B を使用している。128 ピンもある LQFP なのだが、SDRAM や LCD など 決まったピン割り当てがあるので、自由になるピンは意外に少ない。
例えば、自由になりそうな PWM は、PC15/PWM5 のみ。ここから LCD のバックライトが これに割り当たっているのではないかと推測できる。
実際に PC15/PWM5 であった。初期状態は L 。これを H にすると バックライトが点灯。
それ以外でも 自由になりそうな GPIO は 数本しかないようだ。これだけ厳しいと ボタンを LCD のデータ線と共有するのも理解できる。
ちなみに 最低限度必要そうな GPIO は、
- ボタン -- 詳細不明だが、LCD のデータ(PD0-PD15)と共用
- スピーカー アンプ ON/OFF
- バックライト LED ON/OFF (+PWM)
- SDカード CS
- DC電源のセンス
- アナログスティック制御 (たぶん GPIO 1つと ADC 1つ)
LED 左 (赤) (ハード結線)
LED 右 (青) (ハード結線)
電源スイッチのセンス (WKUP/PB31のはず)
電源 OFF (PWRON のはず)
ぐらいか。GPIO で 5 個必要そうだが、自由になりそうな GPIO の数も(TxD/RxDを除くと) 8個 しかない。
上記以外でも GPIO を使っている可能性がある。思いつくのは、
POPノイズ低減
Ben-NanoNote の回路図をみたが イヤホンを直結せずに MOS FET スイッチを入れていた。MOS FET らしきものはないようだから、可能性はなさそうだ。
ソフト I2c
FM ラジオの制御を I2Cインターフェイスではなく GPIO で行っている可能性がある。GPIO が余っていればそうしてもおかしくはない。... のだが、よく考えたら FM ラジオモジュールの裏まで I2C の線が来ているのは確認済み。わざわざ別の線を付ける理由はないので、I2C を普通に使っているはずだ。
補足:
LED は ソフトで制御していなかった。USB-BOOT の時点で点灯している。
電源の制御自体も GPIO ではなく専用の線がある。
左右 LED メモ:
右のLED, 左のLED の順。両方 左から アノード-カソード。LED のサイズは 1608。
右のLED は青で抵抗が 102(1KΩ)、左のLED は赤で 201(200Ω)。抵抗が逆ではないかというのはサテオキ、左に注目すると太い線 - 抵抗 - LED と接続されている。この太い線はたぶん USB から供給される 5V そのもので GPIO で 供給されているかどうかを GPIO でセンスしているはず。
FMラジオモジュールメモ:
チップは違うが、FMレシーバモジュール(AR1010)を ストロベリーリナックスで扱っている。データシートを見るとピンアサインは、
1 アンテナ (右上)
2 N.C.
3 L-OUT
4 R-OUT
5 GND (右下)
6 VCC (左下)
7 Write/Read
8 Busmode (L: I2C / H: SPI)
9 Clock
10 Data (左上)
となっている。(左右逆の番号割り当てなので注意) SPI を使うピンの余裕などないとすれば、I2C を使っているはずで、それは Busmode の電圧で判断できる。ピンアサインが合っているとすれば、6(VCC) と 8 が同じではないのでたぶん GND -- なら I2C のはず。 L-OUT/R-OUT はアナログなので、LINEIN に入るのではないかと思えるが、未確認。
I2C でアクセスするレジスタの仕様は AR1000 なら サンプルコードから推測できる。使用している RDA5807P と互換性があるのかどうかは不明。RDA5800C なら aitendo で扱っているのでデータシートは入手できる。仕様が RDA5807P と近いことは想像できるが、どれぐらい違うのかは不明。
ところで、RDA5800C はデータシートの情報だけでは 動かないそうだ。→ 参考。
ChaN さんのサンプルプログラムを参照しないと扱えない。RDA5807P は、データシートすら入手できていない。なかなか使うのは難しそうだ。まぁこういうのは最後にしたほうが良さそう。
アナログスティック周り:
ADC が 1 つしかないのに、2個必要になるアナログスティックをつなげているのが不思議だったのだが.. どうも SOT23 のIC が 3つあるところに接続されているようだ。
IC の マークは、A2sSH , As1SH, WW1 -- 調べてみるとどうも A2sSH が Nch MOS FET(AO3402 互換?), A1sSH が Pch MOS FET(AO3401 互換?), WW1 が ショットキーバリア ダイオード2 個入り(BAT54C 互換?) らしい。
実際の回路はわからないが、この組み合わせなら 1つの GPIO で切り替えられそうだ。
電子工作しているとデスクリート IC が相対的に高いので、アナログ SW などを使ったりするのだが、こうやって 3 つも使っているのを見ると恐ろしく単価が低いのかも知れない。
LED ドライバ周り:
この IC が バックライト LED 用の DC/DC コンバータ。1番 pin がダイオードに接続されていて LX 。2 番 pin が GND 。裏には 22uH のインダクタ。12 Ωと低い抵抗値の抵抗があり、電流制限用に思える。バックライト LED は、 2 並列 2 直列 みたいだから 40mA ぐらい流すはず。そう仮定すると FB の電圧は 12 x 0.04 = 0.48V となるが、ちょっと中途半端。
それはともかく、どうも aitendo で扱っている XZ5121のような IC のようだ。..とすると PWM 制御用の GPIO は 4 番 pin に接続されているはず。-- 0 Ωのジャンパが入っていたりしてどうもそれっぽい。
ところで、XZ5121 のように OVP 端子がある IC でないと 定電流駆動は危険。LCD なしだと電圧が上がりすぎて コンデンサや IC そのものが壊れてしまう。まぁ大丈夫だと思うが 一応コンデンサの両端の電圧をチェックしておいた方が良いかも知れない。
あまり信用できないテスターなのだが、5V ぐらいだった。とりあえずは大丈夫そうだ。
電源制御のピンについて:
RTC には、次のようなピンがある。
84 PPRST(RTC) - power on reset / reset
85 WKUP(RTC)/PB31 - wakeup signal after power down
86 PWRON(RTC) - power on/off control of main power.
WKUP は普通 電源ボタンに接続されるようだ。で PWRON は 出力で 電源ON は L レベル。--- GPIO を探さなくとも 電源を切ることができるのはありがたい。
PPRST は いわゆるリセット。だがスイッチはないので、パワーオンリセット だけしか使えない。
... ブートプログラムやカーネルのテストで途中で暴走したりすれば、リセットもできず 電源も切れないことになりそうだ。WDT - Watch Doc Timer 機能は RTC に あるが、最初はなにもないところから始めるし --- バッテリーがない方が便利そうだ。ある程度まで行けば 、(Reset がわりの)電源断に頼らないようにできるだろうが...
WDT reset がかかって立ち上がってきたときに、電源スイッチが Off側だったら電源を切るとかすれば、安心できるか。
そういう対策は必要だが、それを作るまで裸のままというのもどうかと思う。よくよく考えれば バッテリーの線にスイッチを付けてしまえば、ソフトで対応しなくともバッテリー自体は切れる。
RESET をどう引き出すか悩んでいたのだが、これなら電子工作としては難しくないし ... これでいいや。
Nand Flash メモ:
ピンをどういう風に接続するのものなのか Board_Design_Guide から
49 PC9 A16(SRAM)/AL(NAND) → ALE
50 PC8 A15(SRAM)/CL(NAND) → CLE
51 PC29 FWE(NAND) → WE#
52 PC28 FRE(NAND) → RE#
53 PC27 FRB(NAND) → R/B#
55 PC22 CS2(SRAM) → CE# (?)
56 PC21 CS1(SRAM) → CE# (?)
+ DATA D0 - D7
NAND FLASH 用のピンは全部使っているようだ。それに加えて CS1 or CS2 を CE# に接続するらしい。で、NAND FLASHは 空きパターンもあるから たぶん CS1/CS2 両方使っている。
そういえば... 不要になった eeePC の 4GN/8GB SSD モジュールがいくつかある。K9GAG08U0M が 2 つ載ったやつと 4 つ載ったやつ。
0.5mm ピッチなので 0.8mm ピッチの SDRAM より載せ替えが難しいが覚えておこう。4GB にもできるかも知れない。-- だからといって格別便利になったりはしないと思うが 壊した時修理できる可能性がある。自分でカーネルを作ったりすれば愛着が湧いたりするので、重要かも。
SDRAM メモ:
SAKC も参照してみたが、次の配線になるはず。
10 PB16 DCS(SDRAM) → CS#
11 PB17 RAS(SDRAM) → RAS#
12 PB18 CAS(SDRAM) → CAS#
13 PB19 SDWE(SDRAM)/BUFD → WE#
14 PB20 WE0(SDRAM) → DQML
15 PB21 WE1(SDRAM) → DQMU
16 PB24 CKO(SDRAM) → CLK
17 PB25 CKE(SDRAM) → CKE
D0-D15 → D0-D15
A0-A12 → A0-A12
A13 → BA0
A14 → BA1
空いているピンなどはないようだ。ちなみに、512Kbit の SDRAM にしたとしても同じピンアサイン。
そういえば、512Mbit (16MB x 8bit x 4bank) の SDRAM x 2 なら 2 段マウントで 128MB になるかも。0.8mm ピッチとはいえ 8bit 分ジャンパしなければならないから工作的に難しいが Jz4725B が対応しているかどうかぐらいは調べておこう。
Jz4725(B) 自身は Column 12bit /raw 13bit/4 bank まで対応している。上の SDRAMは column 11bit / raw 13 bit 。
この設定は、ブートローダで行う。linux カーネルは基本触らない。ブートローダがメモリにロードするわけで そのときには設定済みでないといけないわけだ。
RESET 時の設定というものもある。上位アドレスはつかえないが、とりあえず下位だけはアクセスできるような設定のようだ。
実をいうと チップ取りを目的に 512MB の SO-DIMM を買ってしまった。中古でなく新品が3000円ぐらいだったのだが、中身は 8bit の HYB39S512800A x 8 だった。いずれトライしてみたい。
ところで 元々付いている SDRAM は、256Mb (4M x 16bit x 4bank)。column 9bit/row 13bit 。
ついでに書いておくと BANK は常に最上位ビット。したがって Jz4725(B) はインターリーブできない。
LCD用ピンアサイン:
2 PD18 LCD_PCK(LCD)
108 PD20 LCD_VSYNC(LCD)
109 PD19 LCD_HSYNC(LCD)
110 PD21 LCD_DE(LCD)
LCD_D0 - D15 => R5G6B5
GPIO候補
102 PD23 LCD_SPL(LCD)
103 PD22 LCD_CLS(LCD)
105 PD25 LCD_REV(LCD)
107 PD24 LCD_PS(LCD)
111 PD17 LCD_D17(LCD)
112 PD16 LCD_D16(LCD)
LCD 用のピンは全部は使っていない。使っていないピンは GPIO として使われているはず。
そのあたりの写真。右から 97,98... と並んでいる。
102,103 は見えない。105 ,107 はすぐ上でスルーホール。111,112 も見えない。
裏からみた写真。上に伸びているのが BOOT_SEL1 で 右のスルーホール。で、105,107 がその右に並んでいるはずなのだが、裏からみても見えない。
Smart LCD 用のピンについて :
電子工作ネタになるが、高速な I/O をしたいとするならば、LCD のコネクタを使う以外にないので、ちょっと調査してみた。
Smart LCD は、コマンドがあるタイプの LCD 。コマンドかデータは (9bit シリアル以外は) RS 線で 指定する。サポートしている機能は、データを一方的に送るのみで READ 系はサポートしていない。必要なら GPIO を操作して読み込めということだろう。
サポートしている Smart LCD はパラレル以外に シリアルも。
109 PD19 LCD_HSYNC(LCD) → SLCD_RS
108 PD20 LCD_VSYNC(LCD) → SLCD_CS
2 PD18 LCD_PCK(LCD) → SLCD_CLK (Serial Only)
113 PD15 LCD_D15(LCD) → SLCD_DATA (Serial Only)
Smart LCD を使う場合は、LCD のピンが上のように切り替わる。LCD のピンが切り替わるだけだから、改造して LCD のコネクタの先に別の装置を接続するようなときに、Smart LCD も直結できる。パラレルなら SLCD_LCK しか物理的には余らないが、コマンドが 16bit とは限らないので、FPGA などを使う場合 RS を使って多重化できる。また、シリアルを使えば、D0-D14 が別の目的に使えることになる。
ちなみに、LCD でも 8bit-Serial RGB というモードもある。D0-D7 に R/G/B を順番に出力していくモードで、D8-D15 を別の目的に使える。(ちなみに このタイプは、Ben-NanoNote で使われている)
あと IPU を使用する場合、サポートできるフレームバッファのフォーマットは R8G8B8 とか R5G6B5 とかに限られる。smart LCD の場合好きなように使うと IPU が使えないかも知れないので注意。
TV OUT 用のピンについて :
JZ4725B のデータシートには TV エンコーダの機能などない。ボードを見ても TV OUT 用のチップは載っていない。
にも関わらず、TV OUT のメニューがあったりする。また、"PMP-3000" という ベースが同じ 製品 の仕様には TV OUT があったりする。
さらに "PMP-3100" は、"PMP-3000" より少しだけ高い価格で JZ4725B を使っていると思えるのだが、TV OUT 用のコネクタまで持っている。
また、Linux などでは JZ4725B は JZ4750L として管理している。そして、JZ4750 , JZ4755 は TV エンコーダというハードウェアを持っていたりする。
これはどういうことだろう? ちょっと気になったりしている。
SDカードセンス:
カードを入れてみると GPIO の状態が変わった。PD14 が L になっている。
おどろいたことに、SD カードのセンスなんてものまで LCD の出力と共用していた。
まとめ
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: USB-BOOT
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 04/19/2010 20:42:59
-----
BODY:
そろそろ USB-BOOT をやってみたい。
まずは、USB-BOOT の stage1/stage2 を動かすこと自体が目標になる。
Jz4725 を使っている SAKC も ブートはできているようだから
を理解して 実行してみることが最初のステップか。
とりあえず、ここに書いてある通りにして git で取ってきてまとめたもの
をベースにすることにする。
まず USB-BOOT させてみる。→ キーを押しながら USB に差し込むと Linux から次のように見える。
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 7 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=601a ProdID=4750 Rev= 1.00
S: Manufacturer=Ingenic
S: Product=JZ4750 USB Boot Device
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=50 Driver=(none)
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
Jz4725B にも関わらず ProdID=4750 。String も "JZ4750 USB Boot Device" 。
あと Bulk エンドポイントが In/Out の 2 つあることがわかる。
さて 次のようにビルドした usbboot を動かしてみる。
export PATH=$PATH:/usr/mipsel-linux-uclibc/bin
export PATH=$PATH:/usr/mipsel-linux-uclibc/usr/bin
export CROSS_COMPILE=mipsel-linux-
export ARCH=mips
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc
make
make install
cd xburst_stage1
make
cp xburst_stage1.bin /usr/share/xburst-tools
cd ..
cd xburst_stage2
make
cp xburst_stage2.bin /usr/share/xburst-tools
cd ..
で動かすといきなりエラー。src/ingenic_usb.h の PRODUCT_ID が 0x4740 になっているためだった。0x4750 にしないと少なくとも動かない。
ここでかなり不安になったのだが、とりあえずは 修正して 動かしてみると...
# ./usbboot
usbboot - Ingenic XBurst USB Boot Utility
(c) 2009 Ingenic Semiconductor Inc., Qi Hardware Inc., Xiangfu Liu, Marek Lindner
This program is Free Software and comes with ABSOLUTELY NO WARRANTY.
Now checking whether all configure args valid: YES
Current device information:
CPU type is Ingenic XBurst Jz4740
Crystal work at 12MHz, the CCLK up to 252MHz and PMH_CLK up to 84MHz
SDRAM Total size is 32 MB, work in 4 bank and 16 bit mode
Nand page per block 128, Nand page size 4096, ECC offset in OOB 12, bad block offset in OOB 0, bad block page 127, use 1 plane mode
usbboot :>
お! とか思ったが、/etc/xburst-tools/usbboot.cfg をチェックするのを忘れていた。
だいたい Ben-NanoNote と同じはずで、ちょっとみた範囲では修正する必要はないように見える。
で、Now checking ... のメッセージは usbboot.cfg をチェックしているだけ なのがわかりちょっとがっかり。
ちょっと コードをチェックして bulk に read したときメッセージを出すようにしてみた。
usbboot :> boot
CPU data: JZ4750V1
CPU not yet booted, now booting...
Loading stage1 from '/usr/share/xburst-tools/xburst_stage1.bin'
Download stage 1 program and execute at 0x80002000
CPU data: JZ4750V1
Loading stage2 from '/usr/share/xburst-tools/xburst_stage2.bin'
Download stage 2 program and execute at 0x81c00000
CPU data: JZ4750V1
CPU data: Boot4750
Booted successfully!
CPU data: Boot4750
#bulk_read: 8
#00 00 00 00 00 00 00 00
Configuring XBurst CPU succeeded.
usbboot :>
CPU data: Boot4750 というメッセージは stage2 が出している。
要するに stage2 が動いて メッセージを変えたということらしい。あと bulk_read が その後初めて動作する。それまでは control エンドポイントでの通信。
それは良いとして、4750 用のコードが動いてしまっているようだ。これはまずいかも。Ben-Nanonote など 4740 のコードが動くはずで、動作を確認できていないコードが動作しているっぽい。
さて、4750 かどうかは、fw_args で判断している。要するに usbboot のプログラムが送り込んだ情報をもとに している。
さらに調べると、その情報は 結局 JZ4750V1 の情報を 引き継いでいる。
で、JZ4750V1 のまま動けば良いのだが ... stage2 の処理は なんかいろいろ違うのだった。
それは置いておいて... USB device はどうやって使うのか調べようとしたのだが ... Programming Manual に 記載がないことが判った。まぁ Linux のドライバ見れば判ることだからあまり気にしないが ...
ところで、stage2 に切り替わっても別段 USB をリセットしたりはしないのかも知れない。stage2 で USB を乗っ取るということか。ポーリングベースなら、切り替えの手続きもなしでいけそうだし。
そうすると→ブートローダ→カーネルと処理を切り替えても最初の USB コンフィグのまま使えるのかも知れない。
Linux の USB デバイスドライバを組み込まなければ そのまま使えるんじゃないだろうか? だったらコンソールとして使えるかも知れない。
で 無理やり 0x4740 に変更してみたら .. stage2 が動かない。-- ううむ 困った。
(続き)
実をいうと、NAND FLASH にアクセスできない問題が出ている。
nquery -- query NAND flash info
というのが動かないと先はないのだが、
usbboot :> nquery 0 0
CPU data: Boot4750
ID of No.0 device No.0 flash:
Vendor ID :0x0
Product ID :0x0
Chip ID :0x0
Page ID :0x0
Plane ID :0x0
Operation status: Success!
usbboot :>
となってしまうのだ。
stage2 が動いている以上、なんとかできるはずなので、調査から。
まず、ブートシーケンスの理解から
1. NAND Boot の場合
- 0x1FC00000 - 0x1FC01000(内部ROM)
から起動して、NAND FLASH から Boot する場合、FLASH の最初のエリア(size 0x2000) を SDRAM 0x8000000 にロードする。もし ECC が正しくなければ、次のエリア(offset 0x2000) を SDRAM にロード 。これの ECC も正しくなければ STOP 。ロードが OK なら 0x80000004 に JUMP 。
- 0x8000000 - 0x80002000 (First Stage Loader)
U-BOOT を 0x80100000 に ロードして 先頭(0x80100000) に JUMP。
2. USB Boot の場合
- stage1 program and execute at 0x80002000
- stage2 program and execute at 0x81c00000
ところで SDRAM の領域のベースアドレスは、ソフトで決めることができる。初期状態は、0x20000000 にマップされている?とかするので、要注意。
さて、どうするのか正しいのか? 困ってしまったのだが ... ググってみると
ingenic usbboot は対応済みなことがわかった。
たとえば stage1/fw/board_4750.c
ソース的には board_4750.c を変更して対応している。その中で 4725b かどうかを 特定の場所を参照して判断している。
( ( * (volatile unsigned int *) 0xB00F0000 ) & 0x80000000 )
どうも qi-hardware のものは 基本的に Ingenic オリジナルから再構成しているようだ。だいぶ別物になっているような印象。
ただ、jz4725b 対応は上記だけのようなので、ちょっとマージしてやってみる。
usbboot :> nquery 0 0
CPU data: Boot4750
ID of No.0 device No.0 flash:
# bulk_read: 8
# 20 d5 94 25 44 00 00 00
Vendor ID :0x20
Product ID :0xd5
Chip ID :0x94
Page ID :0x25
Plane ID :0x44
# bulk_read: 8
# 00 00 00 00 00 00 00 00
Operation status: Success!
usbboot :>
なんということだ。あっさり動いてしまった。で、Page ID を見ると 消去ブロックサイズ 256KB / ページサイズ 2KB だとわかる。
あと usbboot.cfg が 違うので 修正。
これで NAND FLASH が覗けるようになったかも。上記の bulk_read の 表示を削って使ってみることにした。
コマンドには、nread/nreadraw/nreadoob がある。読み出す位置の指定はページ。
nread と nreadraw の違いがよくわかっていないのだが .. とりあえずあちこちダンプしてみた。
頭から 6KB 弱?の stage1 ブートローダがある。ブートの仕組みからいうと 8KB x 2 にしそうなものだが、1つしかない。
128 ページから 163 ページまで(72KB) 何かが入っている。stage2 ブートローダ?
あとは、256 ページから(offset 512KB) にも。カーネル?
さらに 512 ページ (offset 1024KB) からもなにか。.. あとはよくわからない。
それはともかく、0xff が続くデータは ファームウェアのファイルには入っていなかった。RAW イメージではなかったのだろう。
さて、なにをするにも NAND FLASH のバックアップを取っておきたい。だが、いまあるコマンドは ページ単位で データをダンプするのみ。バックアップ専用のコマンドなどないようだ。
作るのは簡単そうなのだが、意図的にそうしているような気もするし ... どうしよう。
とりあえずは、
- 情報量を減らすため、nreadraw (など) で同じデータがあれば、続く状態は表示しないように変更。
- アドレスの値が ページ内オフセットだったのを 絶対アドレスに変更 (ただし 4GB まで)
- 繰り返しを指定できるように変更。
という改造をしてみた。
で、やってみたのだが、なんだがすごく遅い。1 秒に 2 ページぐらいの速度。これで 頭の 128MB を バックアップしようとすれば 10 時間ぐらいかかる計算。
ところで、nread と nreadraw の違いがわからない。他に readoob というのがあって、冗長データが読めるのは分かるのだが ...
説明には、
- nread read NAND flash data with checking bad block and ECC
- nreadraw read NAND flash data without checking bad block and ECC
nreadraw は、ECC をみない生のデータで、nread は、ECC を見て? bad block と代替したデータ? それともエラーになる?
どうもよくわからないが、同じ内容のようなので OK か。
ところで、OOB は Out of band というそうだ。2K ページ毎に 64 バイトある。ECC を このエリアに置くことになっているらしい。-- 内部ROM もチェックしているようだからどう置くかも決まっているのだろう。
... というわけで nreadoob でダンプしてみた。
- パターン1) 頭の方
0x00000000 : ff ff ff fa 75 f3 2c d5 cb 81 ac f6 84 c2 78 46
0x00000010 : 13 c5 c4 08 38 3e d9 69 e7 59 d6 4c be e0 2f f1
0x00000020 : 2c 58 fc ec 32 c7 b2 5c f8 25 50 ec ea 86 0b a5
0x00000030 : 9d 40 44 27 31 b2 d4 ff ff ff ff ff ff ff ff ff
- パターン2) 未使用
0x00001800 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
- パターン3) 後ろの方
0x00110000 : 00 5f 02 ff 00 5e 01 ff 00 5d 00 ff 00 5c 00 ff
0x00110010 : 00 5c 00 ff 00 5c 00 ff 00 5b 00 ff 00 5a 01 ff
0x00110020 : 00 59 03 ff 00 58 04 ff 01 56 02 ff 02 55 00 ff
0x00110030 : 02 55 00 ff 01 54 00 ff 01 54 00 ff 00 53 00 ff
- パターン4) 後ろの方-- 未使用?
0x0014c800 : 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff
未使用のページは、0xff のままになっている。これで書き込んだことがあるかどうか判断できそうだ。
dual-boot を考えて そういうページに、自作のデータを置くようにすれば良いのだろう。
あと、あるところから 4 バイト単位で最後が 0xff になる特徴あるパターンになっている。そういう特徴があるものの中でも "0x00 0x02 0x00 0xff" で埋められているものもある。これは何だろう?
ちなみに、nreadraw で取ったデータにも 同じようなデータが見受けられる。
使っているページを調べるために、nreadraw で取ったデータを見ていたのだが、文字列が入っていたりした。
どうも OOB のデータではないようだ。使い方を間違っているのか?
... ただ、違ったとしても ページを使っているかどうかの判断には使える。
追記:JZ4750L VOLANS board
JZ4750 というのがどうにも気になっていたのだが ...
Ingenic の VOLANS 評価ボードというのは JZ4725B らしい。
当然のように対応済みなのだが、u-boot や linux では JZ4750L として扱っている。
キーワードだけ並べるとこんなかんじ。
- VOLANS development board(ver:1.1, Jz4725B based)
- linux : arch/mips/f4750l_defconfig
- linux : arch/mips/include/asm/mach-jz4750l/board-f4750l.h
- U-Boot(1.1.6) : board/volans
dingoo-linux と qi の両方とも JZ4750L の扱いは適当そうなので、Ingenic のカーネルとU-BOOT をちゃんと取ってこないとダメっぽい。
linux の方は取ってこれているので、board-f4750l.h を見てみると...
GPIO_SD1_VCC_EN GPE4
GPIO_SD1_CD_N GPC14
GPIO_USB_DETE GPD6
GPIO_DC_DETE_N GPD7
GPIO_CHARG_STAT_N GPD15 (使っていない.. かも)
GPIO_DISP_OFF_N GPD25 (LCD_REV ?)
GPIO_LCD_PWM GPE14 (PWM4)
SD0 を除くと 上記の GPIO を定義している。別のボードの定義なわけだが、リファレンスだし、変更する理由がなければ変更しないかも知れないので参考にはなる。また、ピンアサインは変えても機能そのものを削ると ソースも直さないといけないので 素直に 対応しているかも知れない。ちなみに、想定していなかったピンは、
- USB_DETE:
USB に電源が供給されているかどうかを判断する(USB_UDC_HOTPLUG)のに必要。
- GPIO_DISP_OFF_N:
ディスプレーを OFF するのは LCD_DE ではなかったのか? あるいは(MOS FET の)電源スイッチ用?
- GPIO_CHARG_STAT_N
充電IC の LED 用のピン(/CHRG) に接続する。L で充電中。赤LED は充電を示すのではなく 外部電源の意味なので関係ない。
どこにも接続されていないように見えたが GPIO につながっているのかも。
ぐらいか。
いろいろやらないといけないとしても、どのようにやるのが正しいのかということが分かったのは収穫。
ところで、f4750l_defconfig の中に CONFIG_JZ_FPGA=y なんて記述があり、FPGA を載せたボードなのか! .. なんて思ったのだが、ググると
support f4750l(on fpga) board for jz4750l
なんて記述を見つけた。FPGA を載せたのではなく、LSI の開発前に FPGA に 載せたということらしい。
追記:本当に正しく読めているのだろうか?
0x00000000 : ff 55 55 55 55 55 55 55 ff ff ff ff
これは先頭のイメージで、0x80000000 にロードされて、0x80000004 から実行されるはず ... なのだが どう見ても命令のパターンには見えない。
とりあえず (いろいろやって) objdump で 逆アセンブルしてみた。
0: 555555ff 0x555555ff
4: 55555555 0x55555555
8: ffffffff 0xffffffff
c: 04110001 bal 14
10: 00000000 nop
14: 03e0e021 move gp,ra
18: 8fe90000 lw t1,0(ra)
1c: 0120e021 move gp,t1
20: 3c1d8000 lui sp,0x8000
24: 37bd4000 ori sp,sp,0x4000
28: 3c198000 lui t9,0x8000
2c: 273906b8 addiu t9,t9,1720
30: 03200008 jr t9
34: 00000000 nop
...
0xc 番地ぐらいからは 命令っぽいが、やはり 0x4 とか 0x8 番地は命令ではない。
あと、これはブートコードの先頭かというとそれらしい。スタックを 0x80004000 に設定しているみたいだし。
ひょっとしたら、0x80000004 番地に jump するのは古いチップだけで、JZ4750 以降は 0x80000010 番地とかに変わっているのかも知れない。
stage2 の調査
usbboot の stage2 のコードを見てみることにする。
main.c は 初期化を行ったあと usb_main() を call している。
usb_main() は、udc.c (USB Device Controller) にあり、ここですべてのコマンド処理をしている。
コマンド処理を見るまえに、ディスクリプタを見てみる。
- ここでは、Vendor ID = x0601a , Product ID = 0x4740 固定で Product ID = 0x4750 は使っていない。
- エンドポイントは、bulk エンドポイントが 2 つ。最大パケットサイズは 512B 。
- String は、"A00A00A00A00" を返す ... とっても適当。
自分では usb を reset していない。HOST が USB を reset しない限り この ディスクリプタに切り替わらない。そして 0x4750 専用にした usbboot の方が動かなくなるはず。(ココ重要)
要するに一応は定義してあるもののダミー。
次に USB の処理を見てみる。
usb_main() では、udc4740Proc() を繰り返し call しているだけ。udc4740Proc では、USB_REG_INTRUSB, USB_REG_INTRIN, USB_REG_INTROUT というレジスタの内容を見て、処理を行う。
処理を行う関数は 次の 3 つ。
大量のデータ送受信は、バルク転送を使うらしい。
さて、仕組みをしってなにをしたいのか? ... というと、シリアルコンソールの代わりをするものを作りたいわけだ。
USBの処理は go した時点で用済みなわけだが、新たに動作するプログラムでも stage2 のようにして USB デバイスのコードを入れてやれば バルクエンドポイントをシリアルのように使って通信できるはず。ただし、usbboot の方も改造して go したあと 端末モードのように動作させる必要がある。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: MXU命令メモ
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(CPU)
DATE: 05/19/2010 23:56:11
-----
BODY:
Jz47xx の XBURST アーキテクチャには、MXU 命令という マルチメディア用の命令セットがある。
これが使えるのと使えないのでは、画像や動画のデコード性能が随分違うはずだと思うので、ググってみた。
どうも QI のメーリングリストの情報が 一番整理されているようだ。
どうもこれが ingenic が公開しているすべてらしく、どういう 命令があるのか 一覧すら公開されていない。
命令の 一部の名前は分かったので、それでググってみると ..
- http://dingoowiki.com/index.php/Development:MXU
- http://www.gp32x.com/board/index.php?/topic/50216-jzsimd-mxu-instructions-list/
がヒットした。
dingoowiki.com の方を見ると 一覧と MXU 命令を 使うために すべきことの情報がある。
gp32x.com には、よくわからない 一覧になっているが、mxu_as (という awk スクリプト)を解析して どのように変換しているかの情報になっているらしい。
これらの情報をみても、それぞれの MXU 命令がどういう動作をするのかはっきりとは理解できない。
定義を理解するには、jz_mxu.h を見るのが一番のように思う。
jz_mxu.h には、命令に 1:1 に対応したマクロが定義されている。MXU を使う場合は、asm 命令を使用するが、MXU なしだとそれに相当する C コードにする。
これをみれば、どうやって使うのかは分かる。あとは、mxu_as 。これは、jz-crosstools-src.tar.bz2 に含まれているらしいのだが ... 66MB もある。このなかの misc/mxu_as だけを見れば良い。
とりあえず、mxu_as と jz_mxu.h を 以下に置いておく。
さて、まずは、mxu_user_guide_EN.pdf と Development:MXUをあわせて 見てみる。
- 60 の SIMD 命令セットがある。
- xr0 - xr16 の 17 個の XMU レジスタがある。それぞれは 32bit 。
- xr0 は、zero レジスタで 常に 0 。xr16 は コントロールレジスタ。
- XMU 命令を使うためには xr16 の bit0 を 1 にしなくてはならない。
ということらしい。
で? 60 個もあるという 命令はどんなものなのだろう?
まずは、Development:MXU を見ると
- ロード・ストア 10 種類
- 加減算 12 種類
- 乗算 9 種類
- その他の算術演算 11 種類
- シフト・シャッフル命令 16 種類
60 種類にはなっておらず 合計 58 種類が記載されている。でもよくよく見ると モードがいくつかあるようで、別々の命令として考えると種類は爆発的に増える。
それはともかく、いったいどれぐらい加速されるのだろう。あまりSIMD 命令は知らないのだが、1 命令での結果の数でカウントしてみることにする。
加減算系統だと、Q16 とか Q8 とかがあって たぶん 最大 4 つ。32bit でも D32 とかあるから 加速されるようだ。
乗算系だと D16 とか Q8 があるから 一応最大 4 つ。ただし、乗加算もあるから x2 と考えると 8つ。
1 クロックで実行できるものなのかどうか不明だが、一応 通常命令より 8 倍ぐらい高速化できるものだという風に思うことにしよう。
ところで、簡易アセンブラしかないような状況というのは分かったが、Linux での対応はどんな感じなのだろう?
見てみたのだが、どうも MXU レジスタのセーブ・リストアするようなところはないように思う。
たぶん、MXU 命令を使うプロセスを 1 つに制限しないと誤動作する。PMP だし 普通はそんな心配はいらないわけだが、うっかりするとまずいかも。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: PMP-3100,A-330入手
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 05/24/2010 19:40:38
-----
BODY:
勢いで買ってしまった PMP-3100,A-330が来た。
実をいうとこれらの小ささにまず驚いた。3.5 inch の Neo Slim 3000 を先に買っていたわけだが、なんとなく ひと周り小さいだけかと思っていたが、随分大きさが違う。あと意外だったのは、両方とも時計機能がないこと。Chip に RTC の機能はあるし、Neo Slim 3000 も時計があったので当然あるものとばかり思っていた。 -- ひょっとして、RTC に電源供給されていないのだろうか?ちょっと不安だったりする。
A-330 の分解写真とかレビューは、
- http://a330.dingoonity.org/photos/
にあるので割愛。DINGUX が動くらしいので リファレンスマシンとして使おうかと思っている。
さて問題の PMP-3100 。これは、一体どういうものだろう?
ちょっと使ってみたのだが、ファームウェアの機能はおそまつ。動画は、音ズレするし、エミュレータは GBA のみ。-- あまり使いものにならない印象。バッテリーの容量も少ないだろうし、実用として使いたい人にはまったく勧めることができない。しかし、Linux を移植してみたりして遊ぶには良い素材かもしれない。
次に USB-BOOT -- とりあえずは、A-330 で試す。電源 OFF の状態で B ボタン を押しながら USB に接続すると
と認識される。もとの状態にするには、リセットボタンを押す。
PMP-3100 の方は、リセットボタンがない。元に戻せないならただちに分解してバッテリーを外す覚悟でやってみた。
電源 OFF の状態で START ボタンを押しながら USB に接続すると ..
と認識された。で、USB を抜けば電源が切れた。なんのことはない。電源を OFF にできるから RESET ボタンは不要だったわけだ。
... ということは Neo slim 3000 もそうなのか?
やってみたところ 同じように電源が切れた。
これで、ハードの改造なしでいろいろ試せそうだということは分かった。-- たとえ文鎮にしてしまっても電源だけ切って後日リベンジとかも可能。
さて一応分解してみる。
... 驚いたことに、CPU は Jz4725 (無印) だった。Jz4740 か!と期待してしまったので残念な結果だ。メモリには SAMSUNG K4S281632I-UC75 と印字されている。128Mbit -- 16MB だ。-- なんかダメダメだ。
ちなみに TV-OUT 周りの回路は裏にはない。おそらく表側なのだろう。... といってもスペースがないはず。謎だ。
あとバッテリーは、3.7V 800mAH 。これはそんなものだろう。
Jz4725(無印) は良いのだが、メモリが 16MB しかないのは残念。Linux で遊ぶにもちょっと厳しい。
Jz4725 の無印と B の違いは、SD の 速度と、USB-BOOT の仕様ぐらいなはず。だからあまり気にならない。メモリは 256Mbit のものに換装する手はあるが、面倒だしコストが余分にかかる。
新しいはずなのに ... 残念なスペックだ。
残るは、電子工作での素材か。液晶を剥がして 別のなにかをつなぐとか... 1mm ピッチのはずだから 線を引き出すのは楽かも知れない。
... というわけで PMP-3100 はお蔵入り。Neo slim 3000 でいろいろ出来るようになったら復活させるかも。
とりあえず、記念写真。
ケースを開けたところ。スピーカとかバッテリーのケーブルの接続場所の確認用。
バッテリー 3.7V 800mAH
基板のみの写真。バッテリー固定のための両面テーブ が SDRAMと FLASH の上に貼りつけてあった。この跡を綺麗にしようとゴシゴシしたら、IC の 印字も一部消えてしまった。
ところで、シリアルの線が出ている。... ということは、なにかの機能でつかっているということだ。それは何?
シリアルは、57,58 ピン。CPU の下側 の右のエリアで 1 本だけスルーホールに消えている線があるがこれが 57 ピン。58 ピンはすこし下まで伸びてからスルーホール。
基板を外して表の写真。右下の 14pin の IC は印字が消されている。... ボタン処理用の IC だと思うのだが ... なにか見当がつかない。I2C の GPIO だったり、ワンチップマイコンだったりしそう。 それにしても TV OUT 用の IC は見えない。やはり謎。ひょっとして Neo Slim 3000 も TV OUT がついているのだろうか?
通信にシリアルを使っているのではないかとも思える。例の 57,58 ピンが、14 pin の IC に接続されているかも。
それはそうと基板には、
SmartChip
SC928M105_V0.2
2009.12.26
なんて印字がある。
ボタンの裏側。もとに戻すときの参考用。
オリジナルのファームウェアも使い物にならないし、壊しても惜しくないので、逆に開発用にしようかとも思ったのだが、ボタン処理用の IC があると解析するのが嫌だなぁ。
追記:PMP-3100 の後継機
focalprice から PMP-3100の後継機 が出ている。
見て分かるのは、
- ファームウェアが Neo Slim 3000 のと同じ見栄えになった。
- ON/OFF や HOLD → の表記 が逆になっていたのが訂正された
- AV OUT の表記が ヘッドホンマーク + FM に変更 (これも訂正)
こんなかんじ。ひょっとしたら CPU が JZ4725 → JZ4725B に変更されたかも知れない。
理由は JZ4725 は製造していないと思うから。CPU の変更にともなって ファームウェアの バージョンアップを余儀なくされたのかも知れない。さらにいうと ファームウェアが変わったために メモリも 増えることになったかも知れない
まぁ何も変わっていないのかも知れないのだが ... 少なくとも 時計機能は付いているので、良くはなった。
追記: dealextreme の PMP-3100 は P5-5 だった。
白、水色、黒 全部箱に P5-5 と書いてある。
ユーザ投稿の写真を見れば、時計も出ている。
レビューには、There is an alarm clock なんて書いてあるが、さすがに アラーム機能は無理だろう。それはともかく、ファームウェアのベースが neo slim 3000 や aneca A-41 と同じに なったのなら、GBA 以外のエミュレータ機能はともかく、PMP としてはまぁ使えるはず。
追記: とりあえず入手した。CPU は Jz4725B になっていた。これはすぐわかる。(電源OFFで)右の ESC ボタンを押しながら USB に挿すと JZ4750 USB Boot Device と出る。(Jz4725 なら JZ4740 USB Boot Device)
メモリのサイズが増えているかどうかは いろいろやってみないとわからない。-- たぶん USBBOOT の cfg を大きい方に間違うと動かないから分かるはず。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: A330にDINGUXインストール(失敗)
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 06/02/2010 19:04:05
-----
BODY:
A330 用のカーネルとインストーラが出ていたので、インストールしようと試みたのだが、失敗したようだ。
ものは、11597-dingux-330_v1.2.zip
これは、Linux と Windows に対応しているが、やっていることは基本的に同じ。
usbboot :> boot 0
usbboot :> nprog 0 xxx.bin 0 0 -n
を実行するだけ。boot 0 で xburst_stage1.bin, xburst_stage2.bin を実行するが、そこまで動くと 画面が真っ白になる。
真っ白なのは液晶の初期化をしていないためで、一度 dingux のロゴを書き込むと それが残っていて再度表示される。
xxx.bin は 3 通りあり
a330-native-spl.bin (105184 bytes -- NativeOS 優先)
a330-linux-spl.bin (105184 bytes -- DINGUX 優先)
a330-original-spl.bin (8192 bytes -- 元に戻す)
元に戻す機能もあるが、それも失敗。
失敗するとすれば、想定している構成と違うケース。A330 は出たばかりなので 1 種類の構成しかないと思っていたが、違うのかも知れない。
usbboot 自体は動くので、直すことは可能なはずだし、A320 用のリカバリーツール
が使えるかも知れない。
ただリカバリーができないと、NativeOS を使うのを諦めないといけないかも知れないのだが、まぁDINGUX を使うには支障ないだろう。
さて、どうする。構成が違うという仮説を立てたわけだから、まずは構成-- NAND FLASH の ID のチェックから
usbboot :> nquery 0 0
CPU data: Boot4740
ID of No.0 device No.0 flash:
Vendor ID :0xec
Product ID :0xd5
Chip ID :0x14
Page ID :0xb6
Plane ID :0x74
Operation status: Success!
2GB 8bit の K9XXG08UXM だ。2 つ載っているのだろう。以前調べたが Page ID が 0xb6 なら、ページサイズ 4KB 、消去ブロックサイズ 512KB。
さて、a330-boot.cfg に含まれる情報をみると...
NAND_PAGESIZE = 2048
あぁ... だめだ。
a330-boot.cfg を直してみる。(コメントされている 4KB 用を使う)
NAND_PAGESIZE = 4096
NAND_OOBSIZE = 128
NAND_ECCPOS = 28 (? )
ROWADDR = 12 (念のため 32MB 用に変更)
これだけ書き直して、a330-linux-spl.bin を手動で書き込んでみたところ ... dingux の画面が出るようになった。SELECT で NativeOS も立ち上がる。
とりあえず一息つけた。-- 電源はソフトで切るようなので、おかしくなったからといって放置できないのだ。直すまで USB に差しっぱなしにしないとバッテリーが過放電になってしまう。
だがしかし、DINGUX 自体は立ち上げられていない。ブートローダはちゃんと書き込めたわけだから MiniSD への書き込みに問題があるのか それとも Linux カーネルに問題があるのか
なんというか、リファレンスになっていない。でもまぁ、使うより作る方が目的なので苦労しておいた方が良いかも知れない。塞翁が馬という話もあるし。
ところで、usbboot を使ったDINGUX のインストール方法にはもうひとつある。
- http://code.google.com/p/dingoo-linux/downloads/list
にある dual_boot_installer_20090916.zip の zImage を 直接 SDRAM にロードして実行する方法だ。
usbboot :> boot 0
usbboot :> load 0x80600000 zImage 0
usbboot :> go 0x80600000
と入力するらしい。
Linux が立ち上がってから 自分で NAND を書き換えるわけだ。動くことの確認が手順に組み込まれているから、こちらの方がリスクが少ないかも知れない。
- http://higurashi.asablo.jp/blog/2010/04/11/5009790
ここで示されている方法も(ツールは違うが)同じ。ツールが違うので、config ファイルの変更ではなく hwinit.bin の置き換えをするのだろう。
hwinit は液晶の種類で変えるから、液晶周りの初期化をするのだろう。SDRAM の設定も 32M 用で問題ない。
NAND FLASH の設定は Linux が自分でやるから関係なさそう。
... あれ?なぜ種類が複数あるのだろう?
こっちの立ち上げをマスターしておいた方が良いような気がしてきた。自作カーネルもこれで立ち上げることになりそうだし。
ところで、A330 は無線コントローラに対応している。DINGUX でも使えるそうだ。出るはるか前から対応できているのは、いったい、どういうことなのだろう?
もともと PS2 の デュアルショックあたりに対応していて、出回っている 無線コントローラの回路を仕込んだだけだったりするのだろうか? -- 思いつくのはこれぐらい。
PS2 の インターフェイスなら SPI 使ってそうだし、そのあたりを手がかりに調べてみようかと思う。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: E705Aというのをポチってみた
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 06/04/2010 04:21:50
-----
BODY:
世の中 iped だの apad だの アンドロイド MID が人気だが、それとは全く関係ない 7inch Linux mini laptop E705A というのをポチってみた。
追記: これは dealetreme でも扱いだした free-shipping 127ドル。
スペックは、
CPU JZ4750 XBurst CPU 32
Operation system LINUX
Memory 128MB DDRII
Storage Device 2GB NAND Flash ( 512MB/1GB optional )
LCDSize 7" PANEL
M+D36atrix 800*480
VGA NO NEED
LAN 10/100M Ethernet Access
WIFI 802.11b/g
Keyboard standard enlish 84 key,support external keyboard
Mouse&Touch pad build-in touch panel, set two shortcut key,and support usb port mouse
USB Port USB 1.1 *3.0
Card Port SD CARD
Build-in camera NO
Sound effect In focus Audio
Build-in stereo speaker
External Microphone,but only for record
Battery 1300MAH
値段は、$130.93 (送料無料)
CPU は MIPS(JZ4750) なので アンドロイド はどうやっても動かない。Lyumo Book のようなもの。
... というのは厳密に言うと間違い。
http://bbs.imp3.net/thread-832943-1-1.html
をみるとプロトタイプはあるようだ。
ftp://ftp.ingenic.cn/3sw/01linux/tmp
May 05 2009 00:00 37037418 android-demo-jz.tar.bz2
Feb 20 2009 00:00 7387614 ingenic-linux.tar.bz2
Mar 20 2009 00:00 514445940 mid-src.tgz
Jul 14 2010 16:06 69811279 mipseltools-gcc412-lnx26.tar.bz2
... といってもコレ用じゃないし、放置されているところを見ると諦めたのかも知れない。
開発用に MIPS というか Jz47xx の マシンが欲しかったのが購入動機。www.aliexpress.com が比較的安全らしいのと、近くで Lyumo Book を売っているところがないのもコレにした理由。
実を言うと アンドロイド MID の人気と Lyumo Bookの人気のなさを見て 今後入手が難しくなるのでは? と思ってしまったのが今買った理由。
でアレコレみてたら、最初にリンクした 7" Support WIFI netbookの方が(送料込みで)安いことに気がついた。どうも 300MHZ の VT8500(ARM)クラスの価格帯まで値段が落ちているようだ。
ちょっとだけ気になるのが、build-in touch panel というところ。Touch Pad のことだと思うが少しだけ期待してみよう。
ちなみに、スペックには、JZ4750 と書いてあるが 信用はしていない。メモリが DDRII と書いてあるのだが JZ4750 でも DDR2 は サポートしていない。外部インターフェイスが Lyumo Book と同じだし、JZ4730 だったりするかも知れない。
まぁそれでも良いかと思っている。Jz4750 だと Video engine というのがあり、TV OUT 用の機能も付いているのだが どちらも使えないと思うし。あとは Mobile SDRAM に対応している点が違うのだが、性能が良くなるわけでもなさそうだし、そもそも使っていないなら関係ないし。
"XBURST" で ググってみると EPC E700 というのがあり CPU は Jz4730 。E702 というのもあって CPU は Jz4740 。
あれ? E705A は 本当に Jz4750 かも。
あと、E702 のところに TESO (Linux ubuntu) と書いてあった。... なんだろう?
ところでコレ、MIPS を使いたいという特別な理由がない人には、あまり勧められない。Lyumo Book も もっさりだと専らの評判だし、JZ4750 だとしても基本性能はさほど変わらない。所詮 PMP 向けの CPU で、Video engine まで使いこなしてようやく動画だけ速くなる。
とりあえずメモ:
- http://7mc.org/umpc/g400/
- http://g-netbook.com/G400.html
追記: E705A 到着
EMS のはずが UPS(配送:ヤマト) できた。500 円を徴収された。たぶん税金。(消費税?)
箱を開けてみたところ、黒の本体と 中国プラグの AC アダプタ とマニュアル。(白→黒の順で希望を書いて発注)。 AC アダプタは 出力 DC 9V 2A 、プラグ形状は PSP のと同じ(EIAJ#2)。入力は 100V-240V でプラグ変換があれば使えそうだが持っていない。あと マニュアルには、E7005 Linux Series と書いてある。
9V の AC アダプタなら 秋月の これが良いのだが、在庫切れ。さては... 同じような仕様の M001 とかのせいで需要が急に伸びたな。しょうがない。飛び出ている部分を糸鋸で切り離し コードを引き出すか。
ひょっとしたら 1.3A の これでも良いのかも。大体充電なしで 5W 充電しての使用なら 10W ぐらいだそうだ。9V 1.3A なら 11.7 W だが、100V での測定だから 1/効率 (= +25%) 余裕がある。
ちなみに WK-J2 という変換ケーブルが使える。
あ、ここで EKEN M001 用の AC アダプタを売っている。480 円と安いが 送料かかるし微妙。
さて、本体を眺めてみる。本体裏にシールが貼ってあり Easy PC E700 series と書いてあった。開いてみるとパームレスト左側にシールがあり、EASY PC E700 Linux Series とあった。その下にスペックのアイコン。JZ4750 360MHz / 128MB DDR2 / 2GB FLASH / 7inch WVGA / 802.11B/G 。
さて、やることがないのでバッテリーが入っているらしい裏側の蓋を開けてみる。
当然のようにバッテリーが入っていた。バッテリーはコネクタが付いていて、交換可能になっている。ただコネクタは奥まったところにあって外すのが難しいかんじ。バッテリーの印字は LB0102 PL3530155P 7.4V 2100mAh JA27 。-- 1300mAh でなくてよかった。100V 電源側で 5W だそうだ。無線LAN なしなら 3-4 時間ぐらいもちそう。
バッテリーを本体から出してみるとスロットのようなものが 2 つ見えた。覗いてみたところ基板とパーツが見えるだけで何らかのコネクタは付いていなかった。
つぎにインターフェイスのチェック。右側に USB Aメス x2 、左側は、マイクとヘッドホンジャックと SD のスロット。裏側には ACアダプタのジャックと Ether 、USB A メス。
一応電源を入れてみると... Loading と表示され 続いて mini laptop 。
しばらくして X が立ち上がってきた。
アイコンは、
- Image Gallery
- Word processor
- PDF Viewer
- Speadsheet
- Star dictionary
- Music player
- media player (plays a .mov video fine)
- calculator
- IM chat
- e mail
- wireless
- paint brusher (a paint/drawing program)
- ebook reader
- recorder
- internet browser (works slowly but well)
- text writer
- snes
だそうだ。(自分では未確認)。上記以外に スタートメニューから起動するものがいくつかある。パッケージのインストールなんてものもあるが、どういうパッケージか見当もつかない。
上の写真は、My 99 dollar cherrypal netbook computerから拝借した。どうも cherrypal africa という製品名で販売されたものと同じらしい。2009/12 頃にアナウンスされた外観(G400 と同じ)とは違う。-- たぶん新型。
cherrypal africa と違う点はロゴがないところ。.. 普通 AC アダプタのマーク(極性表示)やら Ether, USB のマークやらが 印字されているのだが、よくみたらプラスチックに印字が一切ない。これって OEM元のサンプル?
バッテリーは 50% しかないのでちょっとだけ使ってみた。
設定できる言語は、英語・フランス語・中国語だけ。
CPUやメモリ に関する情報はわからない。わずかに分かるのは Linux 2.6.24 ベースということだけ。
ファイルブラウザも C: とかいうのを root にした情報しか見せてくれない。どうも アプリケーションを入れるどころか root にすらなれない予感。
たいへん困ったことになりそうだが、それはさておき分解して CPU を確かめることにした。
分解方法は、「日々是おやっとさぁ」とほぼ同じ。メインボードは違うが、筐体は非常に良く似ている。
まずはメインボードの表が見えた。RAM が 2 つ載っていて P3V56S40ETP とマークされている。これは 256Mbit の SDRAM だ。DDR2 というのは予想どおりウソ。jz47xx までウソかもしれない。-- 確認できるまで安心はできないものの VIA VT85xx だったら DDR2 のはず。
2個しか見えていないのはあまり心配していない。Lyumo Book も 表裏 2 個づつなので 同じなのだろう。4 個なら 128 MB だ。
あと 基板には、WSNB0708_V1.0 2009-12-04 のシルク。
さて CPU を確かめるには、基板の裏を見なければならず、ヒンジの付け根のネジを外して完全にばらさないといけない。
ところで、root になったりするにはどうしたら良いのだろう? ちなみに jz4750 にも USBBOOT 機能はあるが、USB device のコネクタはない。あと SD Card からの boot 機能がある。ただし、ブートを切り替えるスイッチ/ボタンを見付ける必要がある。ben-nanonote はキーボードで USBBOOT になるからキーボードの可能性はあるが、汎用キーボードでは無理なのかも知れない。タッチパッドのボタンの方が可能性がたかい。
http://www.littlelinuxlaptop.com/3mx-4-0/
これが入ると嬉しいが 無理か。CPU が違ってもデバイスは同じに思えるのだが、GPIO の割り当てが違いそう。カーネルをなんとかして入れ替えるとかすれば ... あるいはユーザランドを使えるかも知れない。
やはりブートの方法を見付けておかないと...
さて、ここらで意を決して基板を外してみた。
CPU は、予想だにしなかった jz4757 -- 存在していたのか。データシートは、jz475x_ds.pdf で見てみると jz4755 と同じ CPU Core で デバイスが強化されたものらしい。
そのほかのデバイスは、FLASH と SDRAM (予想どおり裏にも2個) 以外だと
- CS8900A -- 10BASET イーサネット
ISA バスインターフェイスの古のチップ
- GL850A
4 port USB HUB
- HT82B40R
USB Low speed デバイスつきマイクロコントローラ。予想はキーボートの制御。
... 無線LAN がない。どうも LCD 側にあるようだ。インターフェイスはたぶん USB 。
なんというか、I/O 系は予想外にしょぼい。イーサは 10M だし、それ以外も多くが 1 つの USB 1.1 HOST にぶらさがっている。
100M のイーサをサポートしている jz4730 のほうがマシ。CPU が新しすぎて使いこなせなかったということか。
TV OUT も 高速シリアルも USB 2.0 HI Speed デバイスも使っていない。ちょっと残念な仕上がり。開発マシンとしてみた時は ネットワークが遅いのが残念なところ。これなら Neo Slim 3000 を無理やり 128MB にしたほうが便利かも知れない。
... といっても CPU の方は Dual-Core のはずだし Video-engine もあるし SIMD2 に強化されているし興味深くはある。
メモ:
- Keyboad のコントローラが別にある ... ということは 特定のキーで SD BOOT なんて技も簡単にできそう。なんとなくだが Linux のドライバを作るのを嫌がったんじゃないかと思える。イーサの方はリファレンスデザインにあったと思うのでドライバがあるのだろう。
- FLASH にインストールする手段が必要なはずで SD BOOT を使うのだろうとは思うのだが CPU の左下のパッドが気になる。JTAG + シリアルの可能性もあるが、USB device が出ていて USB BOOT なんて可能性もありそう。-- SD BOOT を探すのも程々にしておこう。
(追記) パッド は左から 4pin(J5), 2pin(J1), 4pin(J4) 。しげしげ見ていたが J4 は 2 本の並行線が CPU から直接来ている。そして 線の元あたりに USB Device がある。... たぶん J1 が USBBOOT を有効にするスイッチで J4 は USB Device なのだろう。
J5 も 2 本の平行線が来ているが 左の方から。そして 10K でプルアップかプルダウンされている。-- こちらはシリアルなのか?
ところで、J5/J1 の側まで来てスルーホール(下2つ)に消えている線はたぶん I2C 。で、左の 8in IC(2つあるうちの下) に行っている。この IC なんだろう? ちゃんと見ておけば良かった。... なんとなく RTC を外付けしているような気がする。8in IC(2つあるうちの上)に水晶付いているし。そうなれば、もうひとつは、温度監視とか電圧センサ?
そういうことはともかく、治具+USBBOOTで初期化するっぽい。そうだとすると SD BOOT の機能は作りこんでないかも。
- VIA VT8500版 cherrypal africa (Win CE)を見ているのだが、完全に同一筐体のようだ。コネクタの配置も同じ。ただし、右上の 4pin コネクタが E705A の方には余分に付いている。VT8500 の方は無線 LAN がオンボードなのだろう。2 本の線を平行にして配線しているし、インターフェイスはやはり USB に思える。
その左のコネクタは何だろう? タッチパネルだと嬉しいがっそんなことはないのだろう。外してみて不具合が起きるかどうかで何か調べられるかも。
- USB HUB は、4port で 外部に 3 つ出ている。残る 1 つは無線LAN だとすれば他には使っていないことになる。ならば キーボードは PS2 ? タッチパッドも PS2 なのか? -- Libra という開発ボードには PS2キーボードが付くようなのでドライバはあるのだろう。
- jz475x_ds.pdf には、jz4755 と jz4757 が記載されているのだが、Dual-core だという説明はない。ひょっとしたら video-engine がもうひとつの xburst-core なのかも。
- 2009/12 に $99 PC としてアナウンスされた cherrypal africa には、Linux Type(jz47xx) と Win CE Type(VT85xx) の 2 通りがあったらしい。メモリは両方 128MB で 256MB というのはガゼ。
で、Linux Type をやめて アンドロイドのものを新たに cherrypal asia として出したらしい。たぶん中身は VT8500 。
VT8500 のノート型は $80 ぐらいまで値段が下がっているし、せめて 256MB か CPU のグレードアップがないと $99 は高い印象がある。
... それはともかく、jz47xx は売れていないからやめるわけで、残念なことだ。(世の中 ARM 一辺倒になるのは面白くないだけなのだが) -- メディアプレーヤーや イメージ viewer,PDF viewer あたりが使い勝手良ければ それだけで 値段分の価値にはなりそうなのだが
- キーボード右下の zzz キーはサスペンドだった。... ちゃんとかどうか分からないが、動いている。動作は瞬間。あまりにも速いので不安になる。どれぐらい消費電力を落とすのかの方が重要だがまだ試していない。
(追記)試したところ数時間で電源が落ちた。多分 液晶を Off しているだけ。
- バッテリーのランプは、充電中を示すのだが、段々暗くなって最後には消える。なかなか良い。
- メディアプレーヤー は、H.264 の FLV は対応してなかった。FLV 自体は対応している。IPU 使っているみたいに見える。でもフルスクリーンにしても、ファイルによっては周りに黒帯になったり...
それにしても... どうしようコレ。お手軽に開発マシンにしたかったのだが... いまのところプリインストールのアプリしか動かせていない。
ただ、これにもアプリケーションをインストールする仕組みはある。Application Manager というものだが、起動するとタイトルバーに IpkgViewer とでる 。ひょっとして OpenWRT とかの ipkg なのだろうか? ならインストールスクリプトで /proc の内容を ファイルに出力するとか出来るかも。
いじっていて野良パッケージはインストールできないようにしている可能性はある。そうなればお手上げ。まぁ無理なら諦めて ... Neo Slim 3000 に絞ろう。
パッケージについて
- http://7mc.org 経由で、CnMBook のサイトにパッケージが色々あることを知った。.info と それに指定してあるいくつかのファイルを使うタイプ。... だが 全然ダメ。
Lyumo book などだったら OK なのかも。
- OpenWRT のサイト http://downloads.openwrt.org から .ipk を拾ってきて SD カードに入れてみたら、ファイルブラウザで アイコンが出た。ダブルクリックすると Windows のような Setup 画面になった。 ... 適当に選んだものなので cansel したが、なんとかなりそうな予感。
まずは、パーミッションとか ディレクトリ構成と ファイル一覧を作成するものを作ってインストールしてみたい。
まぁ、パッケージ使ってカスタマイズできなかったとしても、USBBOOT はなんとかなりそうだし。ちなみにパッド部分は、バッテリーのところにある隙間から見えている。治具が作れれば無改造でなんとか出来そう。
ところで、これは何だろう? E705A でググると ATS-E705A というのも見つかるのだが、そこにあった製品。やっぱり Xburst で 128MB なのだが 新しいのは 7inch で額縁が狭いということ。-- どうも液晶の方に合わせたキーボードを採用しているようだ。
7inch Mini Laptop としか記されてなく型番も付いていない。まぁ E705A を小さくしただけなら興ざめなのだが ちょっと気にかけておこう。
こんなのもある。これは aliexpress から買える。中身はともかく デザインは新しい。xburst も 色々新製品が出るのか。
ところで、なぜ jz47xx が気に入ったのか?
最初は、PMP で Linux が動く! という驚きから調べだしたわけだが...
- 1. USBBOOT があり、FLASH を壊してしまっても復旧できる。
これは改造とかして遊ぶ場合に重要なポイント。文鎮化したらゲームオーバだと ちょっと遊ぶのはちょっと無理。
- 2. MMU があり普通に Linux が動く。
個人的に 仮想記憶がない CPU は好きでない。
- 3. 電子工作の対象になり得る。
Jz4725B や Jz4755 は BGA でない。0.4mm ピッチで実際に作るのは厳しいとは思うが 工作可能な範囲。RAM も旧来の SDRAM で 0.8mm ピッチでいじれる範囲。
400M Hz というのは、実用レベルからみると遅いわけだが、電子工作観点だと 最速レベルなのだ。
ちなみに、CPU 単体も入手可能。jz4755 が 30元 jz4725B が 20元 だそうだ。
チャイナモールでは、「MP3の部品のMP4の部品の君の正のJZは4725の主はJZ 4725 Bを訴えて」が 1010 円だそうだ。
- 4. マルチメディア用 SIMD 命令。
DSP ではなく CPU の機能拡張なのが良い。ちょっといじってチューニングできたりする。
- 5. A320 以外のソフトがダメダメ
これは、改造してみたいと思う動機になる。
- 6. ハードが安い
PMP-3100 とか Neo Slim 3000 とか 4000円ぐらいだし 安いのは敷居が低くて良い。
あと、中華PMPを改造しても、咎められたりしないというのも利点。もとが オープンソースだし。
- 7. 情報が(一応)手に入る。
まぁ完全にオープンではないようだが、ググれば拾ってこれる。
こんなところか。何年かすれば事情が変わってくるのだろうが、しばらくは楽しめそう。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Neo Slim 3000 が文鎮に
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(機種解析)
DATE: 06/07/2010 00:55:11
-----
BODY:
分解した Neo Slim 3000 を元に戻すことにした。
といってもちょっとだけ改造。青と赤のLEDを外す。光り方が安っぽい上に、PORT で制御するようになっていないので役に立たない。 dingoo なんかも LED が付いていないし。-- ハンダこての二丁使いで外すのは楽勝にできた。
次に外したバッテリーやらスピーカーの線をハンダ付けして、組み付け。ボタンが引っ掛かり気味だったので 靴磨き用のシリコンを塗っておいた。
さて、動作確認。このときは問題なく立ち上がった。-- バッテリーを外していたので時間が設定されていない。時間を設定して一旦電源を落とす。
次に USB につなげてみたのだが、画面がまくらなまま何も起きない。
ちょっとあせったのだが、→ボタンを押しての USB 接続で USBBOOT になることが確認できた。
一旦 USBBOOT にして電源スイッチを ON 。これで USB を抜き差ししても普通に USBBOOT になる。--- どうも電源周りは異常ないようだ。
よくわからないのだが、ファームウェアアップデートの最中に電源を切るようなことをしたとしか思えない。確か ファームウェアを U-Disk に置いていたから アップデートが動く可能性はあった。
まぁファームウェアが壊れただけなら問題ない。ちょうど USBBOOT を改造して、元のファームウェアバックアップして戻せるようにしようとしていた所だし、生きている二号機もある。改造に精を出すことにしよう。
... というわけで usbboot の調査。
まず USBBOOT は データ用に IN,OUT 2つの bulk エンドポイントを持っている。コントロール エンドポイントに コマンドを送り それにしたがって データ用エンドポイントを使って送受信する。
送受信できるデータの量は 最大 1MB 。制限があるが、これだけのバッファを確保している。チェックは特にしていないからこれ以上のデータを送るとどこか壊れる。ホスト側でチェックしないといけない。
NAND FLASH に書くコマンドは、NAND_PROGRAM。 これにはオプションがあって OOB_ECC を指定すると データ以外に OOB も書いてくれる。転送フォーマットは データ(1page) oob ... の繰り返し。
これに対応する 読み込みコマンドは NAND_READ_RAW 。これにも OOB_ECC オプションがある。
HOST 側は
Usage: nprog (1) (2) (3) (4) (5)
(1) start page number
(2) image file name
(3) device index number
(4) flash index number
(5) image type must be:
-n: no oob
-o: with oob no ecc
-e: with oob and ecc
という風に nprog を使って書き込みができる。-e オプションで oob の書き込みもできる。
ただし ファイルへ 読み込むコマンドはない。NAND_READ_RAWをするコマンド nreadraw はあるのだが 16 進ダンプするのみだし OOB_ECC も指定できない。なにより遅い。1 page に 1秒ぐらいかかる。あくまで目でみるためのもの。
... というわけで nreadraw を参考に 新しいコマンドを作る予定。
仕組みは分かったし どう改造すれば良いかも分かった。
... さて、実はもう一つ作りたい機能がある。
それは、シリアルがわりに使える機能。仕組みは上で書いたとおりなので Neo slim 3000 のプログラムから データをたれながす訳にはいかない。ホストからポーリングする必要がある。
... でどうするか。
コマンドを追加して、メッセージのサイズと場所をホストに教えられるようにする。メッセージがなければ サイズ 0 。
HOST はメッセージがあれば メモリーを読み込む。
... とまぁこんな風に考えてみたのだが ... 調べてみるとメモリーを読み込むコマンドがない。
どうも 全部作らないといけないようだ。ならば、メモリーを読み込むコマンドを作り、オプションとしてメッセージを指定できるようにしたほうが楽かも知れない。
仕様が変だと思われるかも知れないが メモリ空間、メッセージ用空間という考え方ならそれほど変でもない。ついでなので GPIO 空間というのを作っても良いかも知れない。GPIO も出力は設定できるが 読み込むコマンドがないのだ。
追記:
FLASH の内容をファイルにセーブする機能は出来た。だが、書き込む nprog が何故かちゃんと動いてくれない。イレースは 出来るから壊れていないと思うのだが ... 正しく書き込めないところが出ている。... ううむ 困った。
... やはりデバッグできないと困るので、シリアルで出力した内容を表示できるようにした。
usbboot :> msg
CPU data: Boot4750
msg_read: 298 (1000)
address is : 0x81C00000
Address offset is: 0x01C00000
GOT correct to : 0x81C06C40
Init UDC
GET_CPU_INFO: 0xFBBBFF7F
GET_CPU_INFO: 0xFBBBFF7F
Configuration: DS_hand_t!
Borad_init! 0x00004750
GET_CPU_INFO: 0x00004750
SET ADDRESS: 0x00000000
DATA_LENGTH: 0x00001000
--- end
usbboot :> msg
CPU data: Boot4750
msg_read: 79 (1000)
0x00004750
SET ADDRESS: 0x00000000
DATA_LENGTH: 0x00001000orrect to : 0x81
--- end
こんな感じ。4KB までバッファに溜められて、msg コマンドでそれを表示。
ポーリングして自動で 出そうかと思ったが、面倒なので とりあえずパス。
ついでに GPIO の 値も調べられるようにして、ボタンの割り当てが分かった。
なにも押さない状態:
PAPIN: 0000bcdb
PBPIN: 823f0401
PCPIN: ffdf7cff
PDPIN: ffffffff
この状態で ボタンを押すと該当ビットが 0 になる。
L: B31
R: D4
up: D0
down: D1
left: D2
right: D3
▲(up) : D11
×(down) : D10
■(left): D12
◯(right): D9
power: NONE
Lボタンだけ LCD と共用になっていない。-- WKUP というピンで サスペンドからの復帰に使える。
ちなみに、LCD の データが有効でないとき、ボタンの値を読むことができるが、正しい値を読むには、最後に LCD のデータを出力してから 少々時間が必要。end of frame interrupt というのがあるようなので、これを イネーブルして、割り込みでボタンの状態を見るようにするのだろう。イネーブルするには LCDCTRL レジスタ を操作する。
あと、SDRAM の内容をダンプする機能を作れば、だいたいデバッグできそう。(これで Jz4740 が Jz4750 として見えてしまう問題も解決できるはず )
ところで、GPIO のまとめで書いた ピンのマッピングは Jz4725 のデータシートを見て書いたのだが、Jz4725B と ポートのアサインが全然違うことが分かった。面倒なことだが、見直さないと。
追記: 原因は分かった
書き込めない原因はわかった。
GET_CPU_INFO: 0x00004750
SET ADDRESS: 0x00000280
DATA_LENGTH: 0x00000080
Request : NAND_PROGRAM!Skip a write fail block
... finished.
stage2 のプログラムがエラーを検出している。-- コードを見るとNAND の チップがエラーを返していたのだった。
NAND 側のデータシートを見ると ...
READ_STATUS コマンドを発行して、データバスに出てきたデータ
busy flag (か FRB) をチェックせよみたいなことが書いてある。
チェックはしているようなのだが、GPIO の Port を決め打ちで書いてある。... よくよく見てみると FRB の Port は、JZ4740/JZ4725 では PC30 , JZ4750/JZ4755/JZ4725B では PC27 だった。気まぐれに Port 番号の割り当てを変更したのではなく、アーキテクチャによって Port 番号が決まっているようだ。
なんども書いているわけではないから、製造時から bad block だったのかも知れない。安物だから bad block の率が高いのを安く仕入れているかも知れないし、有り得そうな話だ。
そうなると ... bad block を使わないようにする仕組みが必要になる。
U-Disk は、FAT でフォーマットしてあって何度も書き換えるから UBI なのだろう。
それは良い。立ち上がってからの話だし。フォーマットする 機能もあるし。
まず問題は、root これは ファームウェアのほとんどを占めるはずだから 60MB ぐらい。jffs2 を使ったり yaffs2 を使ったり するのに違いない とあたりは付けたものの offset と size がわからないとどうにもできない。
しかし、それ以前の問題もあった。bad block を回避するために カーネルや ブートローダまで 固定の位置に置いてないのかも知れないということ。
低レベルのプログラムで bad block を回避するために、例えば使っている データがあるブロックのリストを作って書いておくとか .. そういうことをしているはず。
確かに 2 台のマシンの nand を バックアップしたデータは 、結構違う。だが、2 台の差分ぐらいで データ構造がちゃんと分かるかというと疑問。
いったん復活させたかったのだが、労力ばかり多くなりそうなので 復活は打ち切り、サラのマシンとして扱おうと思う。
さて、次にやりたいことは?
ひとつは、Jz4740/Jz4725 で usbboot を使ったときに 正しく 認識できるようにすること ( なぜか Jz4750 と表示され 動作が不安定 ) -- 済
もうひとつは、neo slim 3000 の ブートローダを なんとかすること。LCDにメッセージも出したいし、USBBOOT で動かしたときは、USB から メッセージを取り出せるようにしたい。
.. その前にプログラムを ロードして実行する機能を確認しないと。
とりあえず ... ここまでの成果
- usbboot-qi.tar.gz -- QI から取ってきたオリジナル(ベース)
- usbboot-wk2.patch.gz -- ここまでの修正パッチ
- usbboot-wk2.tar.gz -- tarball (configure 済みで サイズがでかい )
- JZ4725B 対応
ingenic のオリジナルをベースに 変更。( ちなみに ingenic オリジナルには JZ4760 対応が入っている )
- コマンドの追加
ndump (NAND FLASH をファイルに書き出す)
gpior (GPIO の ピンの値を表示 )
msg (シリアルに出した内容の取得)
mread (SDRAM のダンプ )
- fw_args.cpu_id の値(0x4750/0x4740) は、USB の プロダクトID から取ることにした。もう誤認しないはず。
ちょっと、どんな風に NAND FLASH を使おうか検討してみる。
- まず、最初にブートする領域は 2 つある。最初の 8KB と次の 8KB 。最初のブロックが ECC エラーなら次のブロックからブートする。どちらにも同じ内容の stage1 ブートローダを書き込むことにしよう。
- で、 8KB のどこかに パラメータブロックを置く。できれば fw_args と互換性がある形にしたい。これを見ればクロックやメモリの初期化が正しくできる。ロードする FLASH の アドレス変換をするテーブル(8KB) を作ることにして、1 エントリ 16bit とすれば 8KB で 4096個 入る。ブロックを 8KB にしてしまえば、全体で 32MB まで管理できる。
ここの領域には、zImage と initrd を置く。32MB あれば複数の組みを置ける。普段使うものと、インストーラは置ける必要が出てきそうなので、ブートセレクタ機能がいりそう。
- 残りの部分は rootfs と U-DISK 。両方とも UBI にして、上位に普通のファイルシステム。rootfs は ext3 で U-DISK は FAT32 とか。1 つの UBI にできると 全体を使って ウェアレベリングできるから swap とか書き換えの多い データも置きやすくなる。
... UBI の上に パーティション作れると良いのだが... あ、device-mapper とか使えば良いのか。md でも良さそうだし。
- UBI 前提にしてしまうと、rootfs にブートローダがアクセスできないし、USBBOOT を使って UBI にアクセスするのも難しそう。
-- そうなると インストーラカーネルを使って 初期化できないといけなくなる。
実際に作ってみると違うものになりそうだが、こんな感じでどうだろう。
- メモ1: 電源を入れたときに USB が刺さっていたら ... インストーラカーネルを動かして、そうでなければ通常のカーネルにしたらどうか。
- メモ2:FATファイルシステムではダメなのか?
まず先頭がいきなり書けなかった場合に対処できていない。ルートディレクトリや ファイルアロケーションテーブルも 基本的に固定の場所(全体をずらすことは可能だが、一般的でない)。
仕様をわずかに変えたものは 既にFAT ではないし、かえって混乱しそうなのでやめたほうが無難。
書き換えるには、消去ブロックサイズ ( 128 ページ )を一旦消して書き換える。ただし、未書き込みの部分に書く場合は ページ単位で書ける。--- この特徴なら 先頭の 128 ページ(4K ページだと 512KB) はあまり書き換えないように ファイルアロケーションテーブル相当は 512KB 以降に割り当てたほうが良さそうだ。
もちろんこの領域はあまり書き換えないのが前提なわけだが、先頭ブロックが壊れるのはとても困るので、考慮は必要だろう。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: IPUメモ
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(CPU)
DATE: 06/07/2010 20:29:56
-----
BODY:
Jz47xx には IPU (Image Process Unit) というデバイスが付いている。これでいったいどういうことができるのかについてメモ。
簡単にいうと YCrCb のようなフォーマットのイメージデータを 拡大縮小し RGB に変換して転送する装置。これがあると高速化されるのは、mplayer のような動画ソフトと jpeg のデコード。
この処理は 3 つのデータに係数をかけて加算する処理を RGB の 3つに対して行うわけでかなり重い。さらに画面サイズに合わせて拡大縮小するとなれば 相当な処理量だ。これをハードウェアで行わせることが出来るわけでかなり嬉しい機能。
ところが DINUX では disable カーネルがあって わざわざ使わないようにしていたりする。
どうもメモリーの使用量が増えるというデメリットがあって 32MB しかない A320 では無視できないらしい。
mplayer や jpeg を扱うソフトだけ enable すれば良いと思うのだが そういうわけには行かないようだ。IPU は 装置なので 物理メモリを扱う。入力・出力用のイメージは物理メモリで連続した領域でないといけない。一方アプリケーションは仮想メモリで 4KB 単位の page でメモリを割り付ける。使っているうちにフラグメント化されて、物理メモリで連続した領域がなくなってしまう恐れがあるので、リザーブしているらしい。
仮想メモリを移動して 物理メモリで連続した領域を確保する機能があれば問題ないのだが、linux にあったようななかったような... あったとしても使い方が難しいなら対応が後回しにされている可能性もある。
さて、もう少し詳しく機能を調べてみよう。
まず入力フォーマット。これは Y,U,V と名前がついた 3つのプレーン。それぞれ 8bpp でパラメータには、width,height 以外に stride があり、大きなイメージの一部を入力にできる。
入力は、YUV/YCrCb フォーマットの 4:4:4, 4:2:2, 4:2:0 , 4:1:1 をサポートしている。
出力は、R8G8B8 (32bpp) か R5G6B5,R5G5B5(16bpp) こちらも width,height 以外に stride がある。
変換終了は レジスタの値で分かるが割り込みも使える。
だいたいこんなところ。画像viewer などで オリジナルを 1回展開しておけば スクロールやズーム処理を コスト 0 で出来るから、積極的に使うと良いと思うのだが ... やはりメモリが問題か。
ちなみに この機能と MXU命令 を使えばかなり動画の性能が上がる。Neo Slim 3000 では H.264(400x226,30fps) を 遅いながらも再生できた。ただし、起動の時間が異常に長く 音ずれも尋常ではなく現状では実用的ではない。
このあたりが限界なのか?というとよくわからない。根拠はないが、ソフトのチューニングとオーバクロックで この程度ならなんとかなりそうな感じはする。
ちなみに、Xburst が 2つ載っていて さらに H.264 用のアクセラレータの video Engine を載せた jz4755 は別格かも。400MHz とクロックも上がっているし、 H.264 対応とか 1080p 対応とかを謳っているが本当にまともに再生できるのかも知れない。
データシートによると jz4755 は single core に比べて 2 倍の動画再生性能だそうだ。そしてその性能は XGA (1024x768) の H.264 の 30fps 再生。ならば jz4725や jz4740 で 720x480 の H.264 の 30 fps が出来ても不思議ではない。
ただし 期待は 700Mhz とか噂されている jz4760 。u-boot などにはコードがマージされているのでいずれは出て来るはず。
jz4760 は、600MHz かも知れない。プロセスが 130nm だそうだ。ある記事によると jz4750 の機能に加えて DDR2(DDR) をサポートし、USB は OTG 対応。性能は ARM11 800MHz 相当だそうだ。
まぁ ARM勢 と比べると明らかに差を付けられている感のある jz47xx だが、いじり甲斐はある。特に MXU 命令。難解だが使いこなせると bit 操作とかいろいろ高速化できるような気がする。気が済むまで遊んでみたい。
追記:IPU の使い方
IPU が使える状態では、IPU のために 4MB の連続領域がある。
まずこの 4MB を 4 つまでのエリアに分割する。
リクエストは、/proc/imem に対して書き込む。
結果を知るには、/proc/imem を読み込む。
書き込み / 読み込み フォーマットは省略。
次に バッファーを IPU に設定する。
同じように /proc/ipu に書き込むことで設定ができる。
ちなみに、/proc にはimem,ipu 以外に 次のようなエントリーがある。imem1 以外はデバッグ用。
- emc
EMC -- External Memory Controller の情報が読める。
- pmc
PMC -- Power Manager Module の情報が読める。
- cgm
write することで、CGM -- Clock Generation Module の CPCCR -- Clock Control Register に書き込みができる。
read すると CGM の様々な設定情報が読める。
- udc (jz4750l, jz4750d のみ)
udc hotplug と書いてある。udc は デバイス側の USB 。read することで、USB の抜き差しのメッセージが見える。機能はそれだけ。
- tlb (jz4750 のみ)
read しかできない。ipu の設定と TLB が見える。
- imem1 (jz4750d のみ)
jz4750d は、最大 16MB の imem に加えて 最大 8MB の imem1 を確保しようとする。
jz4750 は、最大 16MB の imem を確保しようとする。
この 2 つは普通に 128MB ぐらいのメモリがあることが前提なのか?
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: SDRAMの換装方法(案)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 06/20/2010 00:56:33
-----
BODY:
Neo Slim 3000 でいろいろ遊ぶ計画はちっとも進んでいないのだが、また横道にそれて、メモリを増やすために SDRAM を換装する方法を検討してみた。
Neo Slim 3000 では 16bit 幅の 256Mbit SDRAM を 1つ使っている。
メモリを増やすためには、もとのを取り除いて 512Mbit SDRAM を付ければ良いわけなのだが、生憎 16bit 幅のメモリは高価(1個3000円以上)なうえに入手が難しい。NOTE-PC 用の PC133 SO-SIMM 512MB なら 3000 円程度で 入手できたのだが、8bit 幅。
これをなんとか使えると 32MB を 128MB まで増設できるのだが、どう配線するのか?
配線を示したのがこれ。赤と青のピンが 16bit 品の データバス。青のピンが 8bit 品の データバス。-- 親子にして、上になった SDRAM の 青を 赤のところにジャンパすれば良い。
具体的には
- まず下になる SDRAM は、そのまま普通に付ける。
- 上になる SDRAM の青のピンを水平になるように曲げる。
- >のこりのピンは下と接触するように ランドを垂直にする。
注意: 根元から曲げないこと、簡単にもげてしまう。ニッパで挟んで曲がっているピンを伸ばす。あと、曲げなくても出来そうなら曲げない方が良い。
- 青以外を 下のピンにハンダ付け
- 青を 赤のところにジャンパ
たぶんこうすれば OK 。SDRAM は 0.8mm ピッチで他と比べれば工作が容易。配線も単純だし、私でも出来そうな気がしている。
追記: あ、ダメかも知れない。DQM を無視していた。これでいけるのは、16bit 単位の read/write しかしない場合。(8bit 単位でアクセスできるようにするには ちょっと面倒)。 データシートを確認しなくては。
と言うか普通にダメだ。これで無理やり動かすには、DMA を含めてすべてのバイトアクセスを排除しないと。-- メモリのキャッシュ経由のアクセスだけはバイトアクセスがないことを保証できるから、不可能ではないかも知れない。カーネル内部の(DMA を含む)メモリアクセスの範囲に限られるはず。
でも、Low バイトと High バイトを分けて配線するのは極端に難しい。上、下、基板の3層を引き出して全部違うところに配線しなければならない場所がある。-- 私には無理だな。
ではカーネルの方をなんとかする方針で検討してみよう。
ところで、DQM は、UDQM の方に接続されている。16bit アクセス時は LDQM = UDQM だから read/write ともに問題ない。
High バイトの Read では Low バイトのデータが 出力されてしまうが問題ないはず。Low バイトの Read では出力されないわけだから 正しく読めない。
あと、High バイトの Write は Low バイトに違うデータが書きこまれ、Low バイトの write はデータが書き込まれない。
こんな感じで、Write は、16bit 単位で書くしかない。ただ read はどうだろう。無駄にデータが出力されるだけだから 8bit アクセスが出来るようにできないだろうか? データシートを読んでいてもよくわからないのだが L 固定ではダメなのだろうか?
なぜ気にするかと言うと IPU 。RGB の output は 16bit/32bit で問題ないはずなのだが 入力が 8bpp なので バイトアクセスが発生する心配がある。最適化してあれば 32bit アクセスしかしないと思うが分からない。
ううむ。これは実験して確かめないとマズそうだ。
ところで、こうやってメモリを増やしても 自動的に認識するわけではない。使えるように SDRAM の設定をして やらないといけない。なにもしないと(立ち上がらないということはないと思うが)、換装前のメモリしか認識しない。
SDRAM の設定をしているのがカーネルならカーネルを対応したものに置き換えないといけない。
この改造を 分解したり、文鎮になったりした Neo slim 3000 1号機にたいしてやってみようと思っている。
その前に PMP-3100 で実験するかも。 あと A320/A330 などは 2 つの SDRAM を使っているので 256MB になる。 やってみて簡単ならトライするかも。
ところで、IC を外すには、サンハヤトの表面実装部品取り外しキット SMD-21 を使う。このキットも高価だが興味から既に買っていて死蔵しているので問題ない。
ただ注意点がある。
「ハンダ付け(半田付け)職人の はんだ付けblog」を見ると、低温ハンダで使われているビスマスは、もろくてクラックの原因になるそうだ。できればコテ先も使い分けした方が良いとのこと。当然だが、取り外した部品に付いた低温ハンダもできるだけ取り除いた方が良い。
なかなか面倒な話だが、まぁやってみようと思う。
追記: 512Mb (32Mx16) が 買えるところを見つけた。
だいたい digikey の 1/4 ぐらいの価格。だが、最安 SO-DIMM の bit 単価の 2 倍ぐらい。1 個単位で買えるから 突撃しても良いかな。
- どうも、送料を高価に設定して安いように見せているらしい。
ただし、1/2 個の場合だけ FreeShipping 。
そうなると 2 個を何回も買えば良さそう... とか思ったが 2 回目を オーダーしてみたらキャンセルされた。
計算してみると ... EMS の基本送料が 9.71 ドル で 1 個毎に 5.55 ドル加算されている。送料 10 ドル + 単価 15ドルという感じだが、それでも digikey と比べれば 安いことは安い。
- aliexpress で SDRAM を売っているのは、emery's storeだけだった。上記に加えて256Mbit (x16, 166MHz) だと K4S561632H-UC60 が 10 個 26.36 ドル。
256MBモジュール 1500 円を基準にすると bit 単価は 25% ほど高いだけ。512Mbit 品になると bit 単価が 2 倍以上になる。
追記:256Mbit を売っている別のショップ
EM63A165TS-6G 1個 2.05 ドル (送料 12.21 ドル@EMS)
送料はかかるが、aliexpress で買える 2 つのショップのうちの1つで貴重なショップ。あと、-6G は 166MHz 品。
SDRAM のクロックは、普通 CPU_CLOCK の 1/3 。400MHz なら 133MHz 。CPU をオーバクロックさせて動かすなら 143MHz 品か 166MHz 品が安心なので、メリットはある。
追記: K4S511632D-UC75 2 個 と EM63A165TS-6G 10 個入手。
K4S511632D-UC75 は、64MB 133MHz 。 EM63A165TS-6G は 32MB 166MHz 。
SDRAM の数は十分になった。8bit x 2 の換装は諦めていないが、Linux を動かして よく理解した後にしようと思う。
最初は、簡単そうなので練習したい。使うのは当然 32MB の方。
Neo Slim 3000 は、ピンの周りが空いていて 簡単そうなのだが .. すでに 32MB だから除外。
PMP3100 または P5-5 は、ピンのそばのチップが邪魔。裏蓋を開けただけの状態で 換装ができそうなのがメリット。
唯一の Jz4725(無印) である PMP3100 は カーネルを作るつもりはなく、換装しても無意味。P5-5 は いずれ Linux を動かすつもりなので、意味はある。
A-41 は、片方が基板の端だし 簡単そう。邪魔なバッテリーは LCD に貼りつけてあって剥がすのがやっかいなのだが、裏蓋を開けた状態で 換装できそう。( ちなみにボードを外しても液晶が付いてくるので 特に換装が簡単にはならない ) 。それに、Linux の移植は、A-33/A-41 を優先する予定で 意味もある。
A-41 も一見簡単そうに見える。が、ケースが邪魔なので 一旦ボードを外さないといけない。
練習は、P5-5 でやることにしよう。うまくいったら A-41 で 64MB 化。それもうまくいけば A-33 で 64MB 化。
8bit x 2 は、文鎮化した Neo Slim 3000 でやってみて、うまく行くなら もうひとつの A-41 でもやるということにしよう。
これでいこう。
リスクについて
16MB しか載っていない PMP だと アドレス線 A12(pin 18) が配線されていないかも知れない。多分そんなことはないと思うのだが ... 確認してみないことには。
あと、8bit x 2 だと オリジナルの ファームウェアは動かないはず。それは良いのだが .. 電力的にも不安がある。
SDRAM は結構大食いで、EM63A165TS を例にとると operating current(burst mode) が 160mA も使う。Active Stand by でも 30mA (?) 。Self Refresh Mode に入ってようやく 3mA 。power-down mode にすると 1-2 mA 。2 chip になると x2 。A-41 に使われている (W9812G6PH に近い) W9812G6IH だと operating current(burst mode)が 120mA 。160mA でも随分増えているのに 320mA にもなったら果たして供給できるのだろうか?
K4S511632D-UC75 も調べてみた。operating current(burst mode) が 220mA と大分増えている。さらに refresh の瞬間は 400mA だそうだ。
A-41 の写真を見ると 小さめのコイルが 1 つしか見えない。それは 1.8V の core 用 のはず。 バックライト用がないことになるが、昇圧が必要ないのかも知れない。SDRAM も使う 3.3V は レギュレータなのだろうか?
A-33 は、大きいのと小さいのが1つづつ。表示面積が大きいからバックライト用も 普通のタイプになったのだろう。やはり 3.3V はレギュレータだと思う。
Neo Slim 3000 は裏に 2 個のコイルだが、core 用と バックライト用なのは ほぼ明らか。PMP3100 もコイルは 1 個。-- バックライトは昇圧が必要なかったような気がする。
いずれも SOT23 サイズのレギュレータだとすると ... 200mA あたりが上限かも知れない。-- かなり不安になってきた。8bit x 2 など不安定でまともに動かないかも知れない。
ちょっと計画を見直さないといけないかも。A-41 / A-33 はせいぜい 32MB にして、Neo Slim 3000 を 64MB にするとか。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Aneca A-41
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(機種解析)
DATE: 06/25/2010 18:25:26
-----
BODY:
focalprice.com で PMP を見ていると Neo slim 3000 と同じ画面のものがあるのに気がついた。
いろいろ見ているとどうも Aneca というところの製品が多い。
明らかに同じ画面なのが、A-33 , A-41, A-9 。ちょっとカスタマイズしただけっぽいのが、A-7 , A-32 。
ちなみに Aneca のサイトを見てみると、A-32 には CPU が 4725B と書いてある。おそらく全部 Jz47xx なのだろう。タッチパネルでない安いモデルは、Jz4725 (か新しいのは Jz4725B) だろう。上位機はわからない。H.264 サポート してたら Jz4755 とかかも知れないが Ingenic に OTG はない。OTG と書いてあるのは違うのだろう。
あと A-39 と A-57 は、RK2706 系列だそうだ。全部が J47xx ではないようだ。
これは、その中でも気になった Aneca A-41。 -- 33.8 ドルと安いのも良いのだが、2.4 inch でコンパクト(5cm x 9cm x 1cm) なのが良い。
電子工作のベースに都合がよさそうなので欲しくなった。
ちなみに、黒もあるのだが、メニューが違う。旧製品なのか?
ところで、この A-41 をググってみると focalprice より安いところが見つかった。everbuying.com というところで A-41が 30.24 ドル。free-shipping なのは同じ。--- どうも Aneca 全般が安いようだ。-- 有名ではないようだからリスクはあるが、ここにしようかと思う。
ちなみに A-33 というのも良さそう。400x240 で 4GB 内蔵で 33.93 ドル。4GB なら A-41 でも 33.81ドルだから お得な感じ。
もうひとつ気になるのは、A-56。 45.79 ドルとちょっと高めだが 400x240 タッチスクリーン。ひょっとして VX747 もどき? JZ4740 なら欲しい。-- これは違った RK2605A だった。
追記: 結局注文したのだが、shipping のオプションに +10 ドルのやつと +15 ドルのやつがあった。free-shipping は 7 日〜 27日(だったか)かかるそうで船便かも知れない。
とりあえず記録:
6/25 注文
6/30 shipped になり追跡番号が載った RTxxxxxxxxxHK (国際通常書留)
7/2 日本郵便のサイトに追跡情報が載った 7/2 香港 で引き受け
7/5 国際交換支店から発送
7/6 国際交換支店に到着 -- 通関検査待ち
7/8 受け取り
さて、最近こんなものばかり集めるようになってしまった。A-41 でいったい何がしたいのか? 良くわからなくなったので整理してみる。
CPU は Jz4725 , RAM は 8MB or 16MB を想定している。もし、CPU が違ったなら 以下は論外なので注意。
所有しているのは、Neo Slim 3000 と PMP-3100 。(A330 もあるが、とりあえずは 対象外)。ソフトを作って遊ぶにはこれらで十分なのだ。なのにもかかわらず違うものが欲しいわけだ。
不満のひとつは、外観がゲーム機だということ。全然別のことをしていても、ゲームをしているように見えるのがちょっと嫌。だから持ち歩くには、できたら タッチパネルタイプか MP3 タイプのほうが嬉しい。
なので、A-56 とか A-41 が気になった。--- これがたぶん いちばんの理由。
次の理由は、電子工作観点。外観がゲーム機だと ボタンのスペースの分基板が大きくなる。単なる CPU ボードとして見れば コンパクトなほうが嬉しい。
で、なにをしたいのか。
まずは、普通のPMP レベルの機能を組み込んだ装置に仕立てたい。そうしておけば、欲しい機能を自分で組み込めるし、チューニングしたりして より実用的にできたりする。Jz4725 クラスでも 360p の H.264 ぐらいは 表示できてもおかしくないはず。
次に入れたい機能は、アラーム時計の機能。これを入れるには、おそらくサスペンドをサポートした上で RTC の API を組み込まないといけない。回路的に サスペンドしても無意味なほど消費電流が多いかも知れないのだが ... まぁやってみないことには。
あと、PC 接続時の環境。普通電源 Off の状態で USB に接続すると勝手に電源が入る。このときに別の環境が立ち上がるようにしておいて、スタンドアローンのときとは違うものになるようにしたい。
たとえば PC に画面を飛ばす機能 ... これは PC から USB を介してメモリを抜ければ それで良いはず。DMA もできるはずで PMP 側に負荷はかからない。逆も簡単なはず。これを作るのに X やら VNC やらは使わない。できれば USBBOOT のプロトコルに仕込んで ブートローダでも使いたいところ。
あとキーボードも使えるようにするとか。で、このコネクションを壊さずに ネットワークとして接続できると 嬉しい。
まぁこういうのは、Neo Slim 3000 と共通だしそっちでやるかも。
電子工作観点だと まずはメモリの換装。256Mbit の SDRAM なら壊れた 玄箱から取ってこれる。8bit 幅の 512Mbit x2 はリスキーなので、その後。
あと BlueTooth は付けたい。シリアルで接続できるモジュールがお手軽で良さそうなのだが、シリアルが空いているとは限らない。空いていても信号を引き出せるとは限らないし悩ましいところ。それに装置の値段に吊り合わないぐらい高かったりするし。
bluetooth は、wii 用が安い。それは こっちの記事に書いた。
ただ、これが使えるようになったとしても問題がある。筐体に入れるスペースが全くない。裏蓋アルミだし、工夫するにも難しいところがある。ううむ。
ついでに書くと いろいろなセンサーも。I2C ならなんとかなりそうだし、こっちのほうがお手軽か。
CPU ボードとして見た場合、液晶を外すことになる。そうしないと十分な信号線を引き出せない。
デバイスを bus に接続する場合、SRAM インターフェイスを使うものらしい。で SRAM インターフェイスは、ほとんど SDRAM と共用。CS1/CS2 を使って 切り分けるのだが CS1/CS2 も NAND FLASH と共用。 -- NAND FLASH を 2 個載せた場合は、この方法は使えないということだが、まぁ SDRAM のピンから 手配線で 信号線を 引き出したくはないので パス。
LCD を使う場合は、Smart LCD を使うと write は、キューイング付きの DMA が使えて高速にできる。 read は GPIO を使うしかなく遅い。
割り込みは、GPIO なら割り込みに設定できるらしく、心配いらない。
... まぁ CPU ボードとして使うには ちょっと I/O が貧弱で 高速なデバイスが使えそうにないのが残念。
しかし... 30.24 ドル(paipalのレートが 92円ぐらいだから 2800円弱) で バッテリーと LCD が付いた CPUボードが入手できるわけで、コストパフォーマンスはすごく良い。
ちょっと taobao で検索してみた。ANECA ではヒットしないが、安耐克 で見つかった。
2GB が 155 元/4GB が 200 元 だった(どちらも送料含まず)。1 元 15円とすると 2300円/ 3000円ぐらい。思ったよりは中国国内との価格差が小さい。... というか 4GB は逆転しているような。
ところで、こちらのスペックには FM ラジオ( 87.5-108MHz)が載っている。-- すくなくとも I2C ( と linein ) は簡単に引き出せそうだ。
ところで mahdi T552 265元 が気になる。
4GB 4 inch 480x272 液晶 そして CPU は Jz4755 。
ここのレビューに分解写真がある。jz4755 なのは 間違いない。
微星(msi) MT-V656 というのも Jz4755 だそうだ。3 inch で、4GB が 230 元。タッチパネルのように見えるがどこにも書いていないし、画面がボタンタイプと同じようだから違うのだろう。TV-OUT は 付いているし、H.264 は当然のようにサポートしている。
ちなみに、タッチパネルの MT-V660 というのも出ているが、こちらは RK2806 。値段も 100 元以上高いようだ。
.. なかなか色々あるようだが、1 万円近くなってしまうと Android のほうが良さそうに思えてくる。とりあえずは安物でいいか。
MP4 プレイヤー と CPU の対応表を見つけた。
これを見ると、Jz47xx は少ない。
A-41 到着:
備品は、イヤホン、USB ケーブル、AC アダプタ(USB 口)
ちょっと使ってみた範囲では、Neo Slim 3000 とほぼ同じ。ただし ボタンの数が違うので操作性は違う。手持ちの H.264 FLV は 再生するが、やはり音ずれ。
ボタンの数は 5 つ (M , ←, →, II , VOL) -- クリック感がある。HOLD はない。電源スイッチ Off ですぐ切れるのも Neo Slim 3000 と同じ。
あと FM はメニューになかった。
電源OFF の状態で、M ボタンを押しながら PC の USB に挿し込むことで USBBOOT になった。デバイスは Jz4750 として見えているから Jz4725B だろう。
本体の裏蓋は アルミ。ネジ 1 つを外しスライドさせることで外せる。(microSD をいれていると引っかかる。注意)
メインボードは、全体の 3/5 ぐらいを占める。(サイズは 54mm x 45mm ) 空いているところはバッテリーのスペース(30mm)。あと、メインボードを U字型に切り取って スピーカが1つ はめ込まれている。
CPU は 予想通り Jz4725B 。メモリは W9812G6PH-6 (128M bit = 16MB) 。NAND FLASH は表からは見えない。
FM はモジュールを付けるためのパターンだけがあった。ここから I2C を引き出すのは簡単(なはず)。ただし I2C ではなく SPI での制御かも知れない。未確認なので 決めつけないほうが良いかも知れない。
その他コメント:
イヤホンジャックの近くに C107 とマークされた コンデンサが2つ載っている。カップリングコンデンサ 100uF 。値は十分で低音がでないという問題はなさそうだが、たぶん積層セラミックなので 音が歪む。
5本の IC は、右下の 2つと、右上 スピーカーの下の 1 つ。あとスピーカーの左に 8本足。
右下の2つのうち左のそばに インダクタがあることから これが主電源用(1.8V)の 電源IC だろう。右下の上は USB の近くだから たぶん充電制御用 IC 。右上のもうひとつは、たぶん LCD バックライト用 で、8 本足は スピーカーアンプ。
それ以外には、3端子の IC がほとんどない。スピーカの下に 1 つ見えるだけ。-- これは何か分からない。ダイオードかも知れないし、レギュレータかも知れない。あるいは、スイッチの機能の MOS FET かも。マークが読めればだいたい判明するが、写真ではちゃんと写っていない。
バッテリーは、3.7V/650mAH model:YZ453046 (43mm x 29mm) 。ケーブルが付いている基板の裏には、なにかチップが載っている。過放電保護ぐらいはしてそうだ。サイズがぴったりなので、将来交換するときに代替品を探すのに苦労するかも知れない。
これを殻割りしたらどうかな。5cm x 3.3cm x 0.5cm だから 無理かも。でも、2.38 ドルだし試す価値はあるかも。
あるいは これ 2.46 ドル 4.5cm x 3.8cm x 0.5cm -- こっちは幅がきつそう。
置けるスペースは、最大 45mm x 30mm どちらも無理そう。
まぁこんなものだろう。JZ4725B なのはちょっと嬉しい。メモリは少ないが 必要なら交換するつもりだから無問題。
ところで 2.4 インチ LCD はどういう接続になっているのだろう? コントローラ内蔵の いわゆる Smart LCD なのだろうか?それとも Jz47xx では一般的な ビデオタイプなんだろうか?
これを調べるには まずメインボードを外さないといけない。
メインボードは、3 つのネジ穴があるが、ネジは 1 つしか付いていない。いいかげんだなと思いながらネジを外したが、取れる気配がない。よくよく見たら 基板に ツメが 左右 2 つあってそれで ケースに固定されていた。ちなみに基板はすごく薄い。0.8mm かそれ以下。
ツメを外したところ、LCD とバッテリーが付いたままで外れた。
ボタン周りをみたところ、予想どおり タクトスイッチだった。だが予想外なことに タクトスイッチの空きパターンが沢山ある。
○マークつきが 4 つあり、それと重なるように超小型のタクトスイッチのパターンも配置されている。
どうもいくつかの製品をカバーしているようだ。-- だが 2.4 inch の製品など他には無いような..
同じ信号のボタンの配置を変えられるだけなら魅力はないが、もし使っていない信号が引き出されているなら 電子工作で使えるかも知れない。覚えておこう。
その他のコメント:
7002 とマークされた 3端子の IC と、t1A 99 と読める 3端子の IC が2つ使われている。7002 は Nch MOS FET の 2N7002 ? t1A は、NPN Tr の PMBT3904 ?
さて液晶側を見てみる。液晶の裏は、薄いシートが貼ってあるだけ。バックライトの光が透き通るところから(まともな)反射板ですらない。
そこにバッテリーが(相当に強力な)両面テープで貼りつけてある。剥がすと シートが剥がれそうなので、ちょっと浮かして覗くぐらいにしておいた。
LCD は例によって 0.8mm ピッチのコネクタが基板に直付け。pin 数は 40pin 以下のようだ。たぶん 36 pin 。
思い出した。2.4 inch のフォトフレームに付いていた
AF240E1-36B V2.0(R1) DOU // AF240E1-36C V1.0(R2) DOU
と同じようなものかも知れない。結局ピン配置は分からなかったし機能も分からなかった。
そういえば、そのとき見つけた "Universal Firmware" というやつは、LCD の型番じゃなく コントローラのID を入力していた。
動くように接続されているわけだから 事情は同じかも知れない。
ふうむ。型番らしきものはフレキにあったから、それをメモって コントローラのID を知ることが最初のステップか。
これと同じっぽい。型番の一部しか覚えていないのだが ...240T36... となってた。そうか 9325 なのか。
ちなみに、9325 とは、ILI9325 のこと。aitendo で売ってた TFT液晶モジュール(2.4"/Touch付き) もコントローラ自体は同じ。ただしピン配置が違うし、使える機能も違う(はず)。
36pin タイプの データシートが見つかった。型番は、"MB-TFT-24-S3D-S", "TS024HAADD02-00", "MI0240JT" ググレば 見つかるはず。
1-3 NC
4 IM3(0: 16bit 1:18bit)
5 NC
6 RESET
7 VSYNC
8 HSYNC
9 DOTCLK
10 DEN (0: enable RGB interface )
11-28 Data bus (DB17-DB0)
29 RD
30 WR
31 RS
32 CS
33 GND
34 VCC
35 LED_K
36 LED_A
3 つデータシートを見つけてどれも同じなので、間違いなさそう。
1-3,5 pin の NC は、果たしてそうなのかどうか ... 。IM0-IM2 が割当たっていてもおかしくない。... とか思ったが、写真を見れば、シルクでの説明付きのジャンパが。
ポイントは DEN で、Smart LCD と ビデオタイプの動作を切り替える。
ちなみに LED は 4直列 とかで高電圧。
そんなことより驚いたのが、NAND FLASH 。1 個しか付いていないのだが、2個目のパターンがあって 端子が スピーカーをまたいでいる。-- 要するに IC の端子の間の部分が切り取られている。ひょっとして、2 個使う製品では U 字型には切り抜かないのだろうか?
ちょっと USBBOOT してみる
usbboot :> nquery 0 0
CPU data: Boot4750
ID of No.0 device No.0 flash:
Vendor ID :0xec
Product ID :0xd5
Chip ID :0x14
Page ID :0xb6
Plane ID :0x74
Operation status: Success!
まぁこれは 4K Page の K9XXG08UXM であることを示している。
次にボタン
usbboot :> gpior
gpio_read:
CPU data: Boot4750
PAPIN: 00000000
PBPIN: 823f7d0c
PCPIN: ffdfdcff
PDPIN: ffffffff
--- M button ---
usbboot :> gpior
gpio_read:
CPU data: Boot4750
PAPIN: 00000000
PBPIN: 823f7c6c
PCPIN: 7fdfdcff
PDPIN: ffdfffff
---- > button ---
usbboot :> gpior
gpio_read:
CPU data: Boot4750
PAPIN: 00000000
PBPIN: 023f758c
PCPIN: ffdfdcff
PDPIN: fffdffff
---- < button ----
usbboot :> gpior
gpio_read:
CPU data: Boot4750
PAPIN: 00000000
PBPIN: 823f766c
PCPIN: ffdfdcff
PDPIN: fffdffff
--- II buttun ---
usbboot :> gpior
gpio_read:
CPU data: Boot4750
PAPIN: 00000000
PBPIN: 023f7c2c
PCPIN: ffdfdcff
PDPIN: ffffffff
--- VOL button ----
usbboot :> gpior
gpio_read:
CPU data: Boot4750
PAPIN: 00000000
PBPIN: 823f7d8c
PCPIN: ffdfdcff
PDPIN: fffdffff
うーん実を言うと良くわからない。
PB31 WKUP(RTC) が 1 → 0 : > と II
PC31 BOOT_SEL1(USB-BOOT 設定)が 1 → 0 : M
PD17 LCD_D17(LCD) が 1 → 0 : < と > と VOL
PD21 LCD_DE(LCD) が 1 → 0 : M
なんか マトリックスになっているような感じ。マトリックスなら片側が 出力でないと わからないだろうし ...
それにしても ... WKUP をうまく絡めて来るな。
LCD のバックライト
PCPIN: ffdfdcff
で、PC15-11 は、1101 となっているわけだ。
PC13 だけ L になっているので怪しいと見て
gpios 77 0
としたところ (77 は PC (32 x 2) + 13 ) バックライトが点灯した。
で、この PC13 の機能は、UART_RxD 。UART は使えないということ。逆に考えると UART_RxD まで使っているということは、空いているポートはないのかも知れない。
センス系。
よくよく考えると microSD の抜き差し や イヤホンの抜き差しを 検出するのに PORT を使っているはずで、これは簡単に 特定できる。先に 調べておいたほうが良さそうだ。
micro SD あり PCPIN: ffcfdcff
micro SD なし PCPIN: ffdfdcff
イヤホンあり PDPIN: fdffffff
イヤホンなし PDPIN: ffffffff
これで
microSD あり: WAIT/PC20 が L レベル
イヤホンあり: LCD_REV/PD25 が L レベル
というのが判明した。
ボタンの解析その2
上記の結果ボタンを押すとなにか変化があるポートは、BOOT_SEL1 を除くと
PB31 WKUP(RTC) が 1 → 0 : > と II
PD17 LCD_D17(LCD) が 1 → 0 : < と > と VOL
PD21 LCD_DE(LCD) が 1 → 0 : M
それを除いた候補のポートは、
48 PC15 PWM5/A18(SRAM) (出力では?)
102 PD23 LCD_SPL(LCD)
103 PD22 LCD_CLS(LCD)
107 PD24 LCD_PS(LCD)
112 PD16 LCD_D16(LCD)
いろいろなパターンを試してみたのだが、M を押すと いつでも PD21 が L になっている。-- たぶん M は専用 PORT なのだろう。
PB31 WKUP(RTC) も II を押すといつでも L 。これも専用なのだろう。( >で変化すると書いたが間違い )
のこるボタンは 3 つのみ。
この 3 つの何を押しても PD17 が L になる。
変化する以上ボタンに関係するのは確かだが、どういう意味があるのだろう?
もしや ... PD17 は共通出力で 出力 H にすべきなのを 出力にしていないから、スイッチに負けて L になっているのではないか?
だとすると、PD17 を 出力 H にすれば、なにか変化するはず ... と思ったのだが、なにも PORT は変化しない。よもや、ADC で受けているとか。--- ADC は 2 つあって 1つはバッテリーの電圧測定と決まっているが、もう1つは未使用のはず。
これもまぁいいや。2 つ分かっただけでも収穫。-- デバッグに利用できる。
A-41 JZ4725B ピンアサイン表 (作成中)
凡例 : x 割り当てに選択の余地がないピン
o A-41 固有の割り当てで判明したピン
? 不明なピン
Jz4725B
x 1 PD0 LCD_D0(LCD)
x 2 PD18 LCD_PCK(LCD)
x 3 GND
x 4 VDDCORE(1.8V)
x 5 PB3 A3(SDRAM)
x 6 PB2 A2(SDRAM)
x 7 PB1 A1(SDRAM)
x 8 PB0 A0(SDRAM)
x 9 PB10 A10(SDRAM)
x 10 PB16 DCS(SDRAM)
x 11 PB17 RAS(SDRAM)
x 12 PB18 CAS(SDRAM)
x 13 PB19 SDWE(SDRAM)/BUFD
x 14 PB20 WE0(SDRAM)
x 15 PB21 WE1(SDRAM)
x 16 PB24 CKO(SDRAM)
x 17 PB25 CKE(SDRAM)
x 18 PB12 A12(SDRAM)
x 19 PB11 A11(SDRAM)
x 20 GND
x 21 VDDCORE(1.8V)
x 22 PB9 A9(SDRAM)
x 23 PB8 A8(SDRAM)
x 24 VDDIO(3.3V)
x 25 GND
x 26 PB7 A7(SDRAM)
x 27 PB6 A6(SDRAM)
x 28 PB5 A5(SDRAM)
x 29 PB4 A4(SDRAM)
x 30 PB13 A13(SDRAM)
x 31 PB14 A14(SDRAM)
x 32 PA8 D8(SDRAM)
x 33 PA9 D9(SDRAM)
x 34 PA10 D10(SDRAM)
x 35 PA11 D11(SDRAM)
x 36 PA12 D12(SDRAM)
x 37 PA13 D13(SDRAM)
x 38 PA14 D14(SDRAM)
x 39 PA15 D15(SDRAM)
x 40 PA0 D0(SDRAM)
x 41 PA1 D1(SDRAM)
x 42 PA2 D2(SDRAM)
x 43 PA3 D3(SDRAM)
x 44 PA4 D4(SDRAM)
x 45 PA5 D5(SDRAM)
x 46 PA6 D6(SDRAM)
x 47 PA7 D7(SDRAM)
? 48 PC15 PWM5
x 49 PB16 A16(SRAM)/AL(NAND)
x 50 PB15 A15(SRAM)/CL(NAND)
x 51 PC29 FWE/MSC0_D1
x 52 PC28 FRE/MSC0_D0
x 53 PC27 FRB/MSC0_D2
? 54 PC20 WAIT(SRAM)
x 55 PC22 CS2/MSC0_D3
x 56 PC21 CS1
? 57 PC13 PWM3/UART0_RxD(UART)
o 58 PC12 PWM2/UART0_TxD(UART)
? 59 PC11 PWM1/I2C_SCK(I2C)
? 60 PC10 PWM0/I2C_SDA(I2C)
x 61 PD28 MSC1_D0(MSC)
x 62 PD26 MSC1_CLK(MSC)
x 63 PD27 MSC1_CMD(MSC)
x 64 EXCLK(CPM)
x 65 EXCLKO(CPM)
x 66 VDDIO(3.3V)
x 67 PBAT/ADIN0
? 68 ADIN1
x 69 VSSADC(CPM)
x 70 VDDADC(CPM)
x 71 AVDDPLL(CPM)
x 72 AVSSPLL(CPM)
x 73 VDDPLL(CPM)
x 74 VSSPLL(CPM)
x 75 VDDA(USB)
x 76 RREF(USB)
x 77 VDDUSB(USB)
x 78 DM0(USB)
x 79 DP0(USB)
x 80 VSSUSB(USB)
x 81 RTCLK(RTC)
x 82 RTCLKO(RTC)
x 83 VDDRTC(RTC)
x 84 PPRST(RTC)
x 85 PB31 WKUP(RTC)
x 86 PWRON(RTC)
x 87 VDDHP(CODEC)
x 88 RHPO(CODEC)
x 89 VSSHP(CODEC)
x 90 LHPO(CODEC)
x 91 VDDLHP(CODEC)
x 92 VSSCDC(CODEC)
x 93 VDDCDC(CODEC)
x 94 VREF(CODEC)
x 95 VDDCDC2(CODEC)
x 96 VSSCDC2(CODEC)
x 97 LLINEIN(CODEC)
x 98 RLINEIN(CODEC)
x 99 MICIN(CODEC)
x 100 BOOT_SEL0
x 101 BOOT_SEL1
? 102 PD23 LCD_SPL(LCD)
? 103 PD22 LCD_CLS(LCD)
x 104 VDDIO(3.3V)
? 105 PD25 LCD_REV(LCD)
x 106 GND
? 107 PD24 LCD_PS(LCD)
x 108 PD20 LCD_VSYNC(LCD)
x 109 PD19 LCD_HSYNC(LCD)
x 110 PD18 LCD_DE(LCD)
? 111 PD17 LCD_D17(LCD)
? 112 PD16 LCD_D16(LCD)
x 113 PD15 LCD_D15(LCD)
x 114 PD14 LCD_D14(LCD)
x 115 PD13 LCD_D13(LCD)
x 116 PD12 LCD_D12(LCD)
x 117 PD11 LCD_D11(LCD)
x 118 PD10 LCD_D10(LCD)
x 119 PD9 LCD_D9(LCD)
x 120 PD8 LCD_D8(LCD)
x 121 PD7 LCD_D7(LCD)
x 122 PD6 LCD_D6(LCD)
x 123 PD5 LCD_D5(LCD)
x 124 PD4 LCD_D4(LCD)
x 125 GND
x 126 PD3 LCD_D3(LCD)
x 127 PD2 LCD_D2(LCD)
x 128 PD1 LCD_D1(LCD)
A-41 JZ4725B 判明ピン
バックライト:
o 57 PC13 PWM3/UART0_RxD(UART) H で ON
イヤホンセンス:
o 105 PD25 LCD_REV(LCD) L でイヤホンあり
microSD センス:
o 54 PC20 WAIT(SRAM) L で microSD あり
ボタン "M"
o PD21 LCD_DE(LCD) 押し下げで L
ボタン "II"
PB31 WKUP(RTC) 押し下げで L
JZ4725B 調査対象ピン
制御候補
? 48 PC15 PWM5/A18(SRAM)
専用機能
o 57 PC13 PWM3/UART0_RxD(UART)
? 58 PC12 PWM2/UART0_TxD(UART)
? 59 PC11 PWM1/I2C_SCK(I2C)
? 60 PC10 PWM0/I2C_SDA(I2C)
? 68 ADIN1
電源制御
x 84 PPRST(RTC)
o 85 PB31 WKUP(RTC)
x 86 PWRON(RTC)
GPIO 候補
o 54 PC20 WAIT(SRAM)
? 102 PD23 LCD_SPL(LCD)
? 103 PD22 LCD_CLS(LCD)
o 105 PD25 LCD_REV(LCD)
? 107 PD24 LCD_PS(LCD)
? 111 PD17 LCD_D17(LCD)
? 112 PD16 LCD_D16(LCD)
+ UART ?
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: everbuying.com
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 07/26/2010 15:28:44
-----
BODY:
メモ書きに転用
RB200444441HK
RR835175344CN
RB214671457HK
RT067262167HK
RT067262167HK
中華PMP の回路図を見て
Ben-nanonote
いろいろ工夫がある。
工夫1)イヤホン出力にポップノイズ削減機能がある。
100 uF の カップリングコンデンサの後段に o100 オームで pull-down した 後TM2302N という Nch MOS FET を入れてある。この MOS FET の ゲートを port で ON/OFF できるようにしている。
あと、FET の後 33 オームを直列にいれて ショート保護している。(イヤホンがない場合は、ショートして MIX し、アンプ入力にしている。)
イヤホンジャックの GND は、直接 GND に接続せずに PZ1608D221 というチップフェライトビーズ(220Ω@100MHz)を介している。
あと、イヤホンジャックの センス用のピンは、100K オームの PULLUP 後 AMPIN に接続。
AMPIN は スピーカ用の 1ch アンプに接続されていて、port で ON/OFF を制御できるようになっているが、その間に TM2301N という Pch MOS FET のスイッチが入っている。PULLUP が効いている間は、port を 1 にして出力しようとしても アンプは enable にならない。
アンプの電源にも LC フィルタが入っている。PZ1608D221 + (47uF + 0.1uF)
PZ1608D221 の 221 は uH ではないらしい。
データシートには、220 Ω @ 100MHz ということのように見える。
直流抵抗は 最大 0.2 Ω、最大電流は 1A 。1608 のサイズで 220uH のはずはない。
PZ1608 の直流抵抗は、121 で 120 Ω。102 で 1000Ωで、221 なら 220Ωぐらい。
ちなみに、アンプのカップリングには、0.1uF(16V) + 10K を直列にしている。
こんな風に BEN-NanoNote は贅沢な作りになっているが、安中華PMP は そんな風にはなっていないようだ。
イヤホンには、10uF(タンタル) でカップリングしただけのものが多い。A-41 は、C107 とマーキングされた 100uF を使っているが、サイズから 積層セラミックのはずで 逆に特性が悪いかも知れない。電子工作などでは、通常 220 uF (+イヤホン 16オーム) 。NanoNote のように直列に 33 オームをいれたりすれば、1/3 にできる。(100 uF で十分) 。
バッテリー充電IC には、SE9016 を使用しているが、電源ON の状態では、PROG の抵抗値を減らして 電流を多く流すようになっている。あと CHRG ピンに PORT をつないで 充電完了したかどうか分かるようにしている。
USBの GND と VBUS はそれぞれ PZ1608D221 を介して VBUS/GND に接続されている。さらに信号線も SDCW2012-2-900 という トランス? を介している。まるで イーサネットの回路のようだ。
2.4 inch の デジタルフォトフレーム。
安かったので買ってみたが、バッテリーを充電しても 1日持たない。
内部は予想どおり。
基板には、MDP-A18 VA 2008-03-08 と書いてあった。
電池は、381430 とマーキング。かなり小さい 150mAH とかそれぐらいだと思う。そして ... 膨れていた。内部にガスがたまっているのが分かる。
安物を買うのは、危険なわけだが。今回は液晶取りに使えるか調べるために購入しただけ。
SST25VF016B BF 25 41
SST25VF032B BF 25 4A
SST25VF064C BF 25 4B
MX25L1605AM2
ML25L1605D C2 20 15
ML25L3205D C2 20 16
ML25L6405D C2 20 17
Netduino
なかなか興味深い。
http://www.netduino.com/downloads/
回路図やボードレイアウト(Eagle brdファイル) も公開している。
開発言語は C# で、開発ツールは、.NET Micro Framework SDK v4.1
回路図や
コネクタのアサインは機能を優先して配置している。
出ている機能は、PWM x 4 , シリアル x 2, SPI , TWM , ADC
TWM , ADC は切り替え。
SPI などは DMA が可能。
128KB の RAM がある。
水晶は、18.432MHz と中途半端だが、これには理由がある。
この値だと USB からの SAMBA BOOT が可能になる。
液晶は 0.8mm ピッチ 36 pin タイプ。-- タッチバネルなしだとこれがデファクトスタンダード。
A-41 を ここで買ったわけだが、問題ないようだ。
ただ、2 回目の購入で納品ミスがあった。間違いで より高価な品物が送られてきたのだが ... 一応問い合わせたところ 向こうのミスなので 持ってて良いと言われた。
ミスは困ったものだが、印象は良かったので ちょっと紹介。
3 回目の発注は、ちょっと眉唾。
印象として欠品が多い。注文できたからといって 在庫があるとは限らない。
あと、遅い。dealextreme は最近早くなったし 比較にならない。
このショップは、focalprice に似ている感じで、取り扱っている商品も focalprice とかぶるものがある。値段も似たようなものが多いのだが、中には 妙に安い商品がある。
その妙に安い商品をいくつか紹介してみようと思う。
1350mAh Mini Universal Solar Charger $6.56
同じショップ内の よく似た 1350mAH の充電器は $12.01 なのに、これだけ安い。dealextreme にも似たような商品があるが $ 12.30 。-- このあたりが相場だろう。
focalprice でも オレンジだけ安く $7.46
ちなみにサイズは、9.1cm x 4.0cm x 0.8cm 。付属品は AC アダプタと 充電用の USB MINI-B ケーブル。あと 供給用の ケーブル。
これは dealextreme で見つけた 分解写真。
1350 mAH など嘘で、3.7V 950mAH リポ電池が入っている。-- これは中華製品の常なので、ショップの責任ではない。太陽電池の性能も 5.5V/80mA と書いてあるが、実測した人がいて 5.0V/35mA だったそうだ。
3 LED Black Solar Power Flashlight Keychain $1.25
日本のショップだと ワンコインとか言って 500 円 だったりするのだが、普通は 2.5 ドル前後。で、これはそれのさらに半額。デザインも違うし同じものではないのだが ...
focalprice は $2.77
011 3W 1AA LED Flashlight Lamp Torch 黒・青・赤 $2.84
単三 1 本の フラッシュライトで安いものもある。delalextreme だと $ 3.71だが $2.84 だから随分違う。
focalprice でも同じ商品があった。値段は $3.03
これは delaextreme の方の写真だが、3 ピースらしい。
7001 Super Mini LED Flashlight Lamp Torch with Clip $2.65
8032 3W 1AAA Super Mini LED Flashlight Lamp Torch with Mountaineering Buckle $2.70
単四 1 本の フラッシュライト ... dealextreme でも $4.15というのがあるが、もっと安い。ただ、こういうものは中身が重要なわけだから、値段だけ見て格安かどうかは判断できない。
2 in 1 Red Laser Pointer 2 LED 青・黒・赤
こちらは、単四 1 本の レーザポインタ・フラッシュライト。単四 2 本というのは普通にあるのだが、1 本というのは見たことがない。デザインも悪いし、電池の向きが普通とは違って変。... ではあるが、
これまた focalprice で pink だけ扱っていた。$2.81
2.4 inch Digital Photo Frame $11.55
16MB 2.4" White Edge Digital Photo Frame Album $15.88
DealExtreme なら 同じものが $20.66 フレーム違いが $16.90
Universal Lithium 16340/10440/14500/18650 9V Battery Charger $6.28
これは別に安くなかった。focalprice なら $5.16
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: 電子ブックメモ
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 08/20/2010 20:19:31
-----
BODY:
dealextreame で 電子ブックも売り出した。型名は E003 メモリ 128MB/FLASH 2GB で、黒、白ともに 94.40 ドル。
-- これは aliexpress で扱っている GR-B701 108.98 ドル と同じもののように見える。
GR-B701 のスペックには CPU が書いてあって RK2729 (500MHz) だそうだ。メモリも GR-B701 は 256MB になっている。
画面は どちらも 普通の TFT 。E-ink ではない。
aliexpress を見ていると E-ink のパネル自体が高価らしく 製品は 200 ドル前後のものが多い。
一番安そうなのが、HW-EB05i $79.38 + $39.26 = $118.64 。5 インチ E-ink で RK2706B,64MB 。
気になるのは、やはり Jz47xx を使ったもので、GR-B605 185.61 ドル。Jz4740 64MB だそうだ。バッテリーは、交換できるらしく 1500mAh(NOKIA BP-4L) と書いてある。
E-ink の場合 バッテリーの持ちについての表示は、8000 screen refresh みたいに書くようだ。
どうも、screen refresh には(イメージの展開もあるし)電力が必要らしいのだが、それ以外の状態も(CPUとか)電力を使うものらしい。ある 電子ブックのスペックには 20mA とか書いてある。それなら 2000mAH でも 100 時間しか持たない。携帯の待ち受けみたいなものか。
省電力を完璧にすれば、その何倍、何十倍も持つのだろうけど。
なんか良さそうではあるのだが、Jz47xx が気になるのはいじるのが前提。そうなると Openinkpot でサポートしている Hanvon WISEreader N516-W のほうが良いのではないかとも思える。ただし、値段は $242.11 + $24.88 = $266.99 と結構する。
CPU は Jz4740 だしメモリも 64MB 。FLASH は 少なく 512MB 。同じようなものだが、8-level gray scale(N516)/ 16-level gray scale(GR-B605) の違いがあるし 移植しないと GR-B605 は動かなそうなのが惜しい。
まぁこんなふうに気になってはいるのだが、当面買うつもりはない。Neo Slim 3000 (or A41) を自由に扱えるようにするのが先。
ちなみに、Linux が動きカーネルをいじれそうなのは、Jz47xx 以外だと ARM になる。RK2806 とか S3C6410(SmartQ 5) とかならなんとかなるかも。
そういえば、S3C6410 を採用した android 端末もある。7” Touch Screen TFT LCD Google Android 1.6 Tablet PC $142 だそうだ。メモリ 256MB と OTG/HOST 別々の USB に魅力を感じる。aliexpress の MID703 $137.89 と似ている。オプションの WCDMA Module 付きらしい HCY7003 が $189.47 。あと バッテリーは 7.4V 1800mAH , AC アダプタ 12V,1A らしい。(3000mAH ではないはず。)
RK2806 ベースのほうが良いような気もするが、縦表示と動画のサポート状況が満足できる範囲なら買いか? -- といっても買わないつもりだが。
色々みていくと Marvell の CPU を採用した android タブレットも出ているようだ。"Marvell 166 800MHz" なんて書いてあったりするが どうも PXA166 のようだ。ややこしいが ARMADA 100 シリーズで cpu core は Sheeva (SheevaPlug/豆Sheeva とか LinkStation などで採用している。)。ちなみに 前身の Feroceon core は スーパースカラで Sheeva もスーパースカラ。
L2 キャッシュも載っているし、普通の ARM 800MHz よりはかなり高速だろう。(L2 付き Cortex-A8 なら負けそうだが)。 Marvell だから ソースコードも公開されているはずだし。周辺装置も WMMX2 コプロセッサ / Ethernet MAC / PCIe / Qdeo ICR? などなにやら盛りだくさん。こっちのほうが面白そう。
ただ、FLASH を壊してしまうと JTAG でないと復旧できない。
jz47xx は USBブートが可能だし、S3C6410 は SDカードからのブートが可能。こういうのと比べるといじるときのリスクが大きい。
RK2808 は、8KB の ブートROM を積んでいるのだが、詳細は知らない。
aPad を初期化してみる (1) (2) を見るとUSBブート出来るような気がするが、ブートローダでやっているかも知れないし 完全ではないかもしれない。まぁ RKAndroidTool.exe さえ起動すれば、FLASH を書き換えられるから、リカバリできるようだ。
Telechip tcc8902 は、USBブートが可能。
SUNLIKE MID-704 $144.33 + $39.26 = $183.59 ってまだちょっと高いか。
いずれ 2.1 or 2.2 対応してくるだろうからそれからでも検討しよう。
普通に使うなら、tcc8902 , android 2.1 の E7002 (green-tool で 17250円) か。海外なら リスクがあるものの 2 割ほど安い 159.99 ドルがあるが ...
拾った tcc8900 のデータシートをみると H.264 のハードウェアコーデックがある。あとグラフィックエンジンに 90°単位の回転の機能がある。動画も強いし、 画面の回転も楽勝っぽい。キャッシュは L2 なしで L1 16KB+16KB 。CPU は ARM11 (ARM1176JZ)。
動画は、1080p がいけるようだし、将来的にも十分なような気もする。贅沢を言わなければ末永く使えそう。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: jz47xx 開発計画(計画の修正)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx
DATE: 08/20/2010 23:02:11
-----
BODY:
Neo Slim 3000 or A-41 で Linux を動かすつもりなのだが、全然進んでいない。
理由は面倒だから。動いたときの満足感がイメージできていなくて面倒だとばかり感じてしまう。
ここで、なにが一体面倒なのか書いて(そうすることで実は面倒じゃないじゃないかと思える場合が多々ある)、 実現できると何が嬉しいのかについても書いてみる(動機の強化)ことにする。
なにが面倒なのか?
Linux は既にあるのだ。コンパイルもできている。面倒なのは、シリアルコンソール。これがないと動作の確認も最初のオペレーションもできない。だが、0.4mm ピッチの IC から線を引き出さなくてはならず、自分のスキルでは実現ができない。
そうなると、シリアルコンソールに代わるものを用意しないといけない。で、usbboot のプロトコルを改造して メッセージのやりとりが出来るようにしようと考えている。
こうなると u-boot - linux の通常起動は無視して、usbboot - linux の直接boot をすることになる。
面倒1: メモリマップ
どこにロードしてどうやってパラメータを渡すのかをちゃんと設計しなければならない。そして障害になるのが、xburst_stage2 ブートローダの ロード場所と 使用しているバッファ(1MB もある)
さて、メッセージのやりとりは、PC 側のプログラム(usbboot) がポーリングすることで 行うことになりそうだ。
面倒2:ポーリングの方法
普通ポーリングする場合 select システムコールを使ったりするのだが、USB を使うための ライブラリ libusb には select を支援するための機能がない。
timeout を使ってビジーループにすれば実現できるのだが、作法的にどうか? というのがあって躊躇している。マルチスレッドにするのも手なのだが、Windows でも動かしたいし OS の違いを吸収するのもまた面倒だったりする。
面倒3:Linux のシリアルコンソール代替ドライバ
いま考えている方式だと、xburst_stage2 で usbboot が動いている状況を USB をリセットすることなく Linux に引き継いでもらわないと うまくいかない。
なので、xburst_stage2 相当をつくり直して Linux に組み込むことになる。これが面倒で面倒で。
xburst_stage2 を破壊しないようにして、 xburst_stage2 に callback のエントリーを加えたほうが楽でスマートなように思えてきた。
メモリは無駄に使うことになりそうだが、ここは目をつぶろう。
ちなみに、Linux のメッセージの出力は、メモリに書いて callback を呼び出すことになりそう。入力は ポーリングになると思う。シリアルドライバもポーリングできるようになっていたと思うので、たぶんあまり悩まずに作れる。
これができると何が出来るようになるのか?
まず、シリアルコンソールだけが使える Linux が出来るわけだ。
これで何ができるかというと 立ち上げメッセージが見える。だが、root を mount するところで panic することになる。
panic するところまで確認できたら、initrd を作って root にして いくつかのコマンドを用意すれば、デバッグができるようになる。
SD カードは ドライバが動くと思うので、次の段階では SD カードを mount して ストレージが使えるようにする。
次に LCD のドライバ。LCD の初期化の問題さえクリアすれば、LCD もまた動かせるはず。LCD が動けば、シリアルコンソール以外にメッセージを見る手段ができたことになるから、xburst_stage2 を開放して、usg-gadget で Network を通す。
詳しく書くと、
1) Linux から callback しないようにする。
2) xburst_stage2 が使っていたメモリを linux が使うように組み込む。
3) usg-gadget ドライバを組み込む。
- 1) - 3) を連続実行する手続き(スクリプト?)を シリアルコンソールから実行するとともに usbboot を 終了する。(切り替えに失敗するとなにも出来ないので shutdown か?)
- Jz47xx 側で dhcpd を動かすと PC 側の設定なしで、(ローカル IP を使った)Network の接続はできる。
ここまでくると普通に Linux が動いているのに近くなる。login もできるだろうし、nfs を使ったりもできる。
で、このあたりから始めるのが、Neo Slim 3000/A-41 固有のドライバの作成。.. といってもボタンぐらいのはず。
装置固有のドライバが捗らなくても、やれることは多い。システムをつくり上げるために色々ビルドしなくてはならないし、サスベンドとかもある。
それに、正規の boot も やらないと。u-boot についても 同じように シリアルコンソールの代替をすることからやれば良い。
これができると何が嬉しいのか?
とりあえず最終形態ではなく、usbboot から Network が使える前後まで来たらなにが嬉しいか。
まず嬉しいのは、開発できるものが複数になること。あきたり、行き詰まったりしたら別のことをやれば良い。
性能を調べても良いし、オリジナル ファームウェアがどう FLASH を使っているのか調べたりしても良い。u-boot の移植でも良いし。
あと、ここまで来れば立派な開発環境になるというのも嬉しい。メモリを付け替えて 64MB にして ビルド三昧とか。-- 64MB でも全然足りなさそうだが、足りないのは gcc の CPU パワーと ld(リンカ)のメモリが第一。これを 外の IA マシンにやらせればなんとかなるはず。(ただ、それの前提として nfs でファイル共有が必要なはず)
あと、USB-gadget での Network は Windows でも出来る。SD が使えさえすれば、PC でも動かすことは出来るようになる。cifs を入れれば PC との共有(PCがサーバ)もできるし 箱庭のようなシステムを構築することも出来る。
SDL 1.2を使えば Windows でも グラフィックの表示は簡単にできそうだ。
Jz47xx のフレームバッファを抜いてきて Windows で表示させれば、LCD が動かない場合でもデバッグは出来そうだ。こういったのは機種依存がないので、意外と便利かも知れない。
あと SDL は、スレッドを提供している。SDL に全面依存して作ると楽かも知れない。-- Jz47xx 自体も SDL つかうことになりそうだし。
追記: メモリマップについて
0x80000000
割り込みベクタとか
0x80002000
(8KB) xburst_stage1
(stack)
0x80004000
0x80100000 (offset 1MB)
u-boot
0x80600000 (offset 6MB)
kernel
0x81c00000
(4MB) xburst_stage2
(stack)
0x82000000 (32MB の場合)
xburst_stage1 は、0x80002000 (先頭 +8KB) にロードされ、xburst_stage2 は、後ろ 4MB にロードされる。メモリのサイズは、SDRAM の設定情報から計算している。
xburst_stage2 のスタックは、start address + 0x3ffff0 (4MB の終わり) に設定。1MB のバッファ(Bulk_buf) は、配列で 普通に BSS 上に取られる。
ちなみに、xburst_stage1/stage2 共に 先頭は jump命令 + nop。
その後の 32バイトにパラメータが設定される。
こういう構造をしているので、Linux は 先頭の方にロード可能。usbboot のプロトコルでシリアルコンソールを使う場合は、後ろの 4MB は使わないようにする。
使わない場合は、全部のメモリを使えるが HOST側 が usbboot 使えなくなったことを知っていないと まずい。
あとは、linux に対するパラメータを (u-boot が)どのように渡すのか調べないと。
これは、普通の関数呼び出しと同じで a0-a3 にパラメータをいれて jump する。文字列を渡すからその領域は 割り当てておかないといけないが。
prom_argc = (int) fw_arg0; // a0
prom_argv = (char **) fw_arg1; // a1
prom_envp = (char **) fw_arg2; // a2
だそうだ。envp は jz47xx では未サポート。prom_init_cmdline() で argc,argv を元に、arcs_cmdline に cmdline を再構築する。スペースでくっつけていくだけだから アーギュメントは command_line のイメージ 1 個でも良い。
なお COMMAND_LINE の最大サイズは 256 バイト。
ロードするアドレスは、ビルドするときに決まる。
dingoo-linux だとどうも 0x80600000 らしい。ちなみに u-boot は 0x80100000 。
ところで、xburst_stage2 とかのメモリを Linux に渡して使えるようにするには、どうしたら良いのだろう。
initrd のメモリを開放するとかは出来るから、方法はあるはずだが、スマートな方法を取りたい。
reserve_bootmem(__pa(initrd_start), size, BOOTMEM_DEFAULT);
free_bootmem(__pa(initrd_start), size);
こういう使い方をするらしいのだが、
void __init free_bootmem(...
と __init 属性が付いているから 初期化終了後は、free_bootmem は使えない。まぁ initrd も後で開放できるからなにか方法があるのだろう。
重要なのは、usbboot のときは、後ろの 4MB について reserve_bootmem しておくこと。メモリーサイズ自体を -4MB とすると再利用するとき困る。
追記: シリアル コンソールドライバ
多くの SoC の シリアルは、8250 の拡張の 16550A と互換性を持っている。linux では、8250 ドライバが一手に引き受けているようだ。
Jz47xx でも
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
なんて定義をして、汎用ドライバを使っている。
さて、シリアルのふりをして CONSOLE にも登録できるドライバを用意しないといけないわけだがどうしよう。
とりあえず drivers/char/Kconfig を見て CONSOLE になれる変なドライバをさがしたところ bfin_jtag_comm.c というのを見つけた。どうも kthread を作ってポーリングしているようだし、マネして作れば良さそうに思える。ライン数は 365 行であまり規模が大きくなさそうだし、いけそうだ。
これを drivers/char/jz_char に移し、jz_usbboot_comm.c とかにして 変更していけば、良さそう。
ところで、コールバックのエントリをどこに置くか?
stage2 の先頭 の jmp 命令の次に 4x8 のエリアをパラメータエリアとして使用している。ここには、fw_args 構造体をコピーするのだが、fw_args 構造体のサイズは 4x7 分。もう 1 エントリ付け加えることができる。また、start, size というメンバがあって、これは未使用。-- すくなくとも 初期化は不必要にできる。
このあたりに callback 関数のアドレスを入れておけばよさそう。
追記: SDL 1.2
ソースコードをダウンロードして configure するだけで MinGW 版はビルドできた。
これが、libusb と MSYS コンソールの stdout をスレッド環境で使えるなら言うことはないのだが...
ちなみに SDL 自体は グラフィックを提供するだけで、メニュー 、ダイアログなどは提供しない。それどころか フォントの描画すら提供していない。
でも Jz47xx のフレームバッファを表示するだけならそれで十分。
メッセージは出力したいが、MSYS コンソールに出力できるなら、それでもいいかと思う。log とか取るの楽だし。
もし、フォントを表示するなら、DINGUX と 互換になるようにしたほうが良さそう。これは別途考える。
試してみると全然だめ。
gcc -o testkeys.exe testkeys.c -g -O2 -I/usr/local/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -DHAVE_OPENGL -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows
こんな風に testkeys はビルドされるのだが、なにもメッセージがでない。
... 調べてみると Windows は、stdout.txt , stderr.txt に出力されるものらしい。で、環境変数を SDL_STDIO_REDIRECT=0 としておくと reopen されないみたいに見える。
あ、できた。環境変数設定することで MSYS コンソールでも コマンドプロンプトでもちゃんと stdout が出力された。
あとは、スレッド使って usbboot と SDL 画面の 両立ができればいけるか。
- ちなみに、使用している qi-hardware 版 usbboot は、Linux 以外で コンパイルできることを考慮していないから 先に移植しないと。
さらに、ちょっと面倒なことに confuse も 入れないといけない。
mingw での confuse の ビルドは、ここ参照。
とりあえず ... ここまでの環境を usbboot-wk4.tar.gz に置いておく。
Linux だと動くけれども MinGW だとビルドできるものの usb_claim_interface で エラーになったりするのが現状。
( ちなみに inf ファイルは 0x4750 も通すように修正)
追記: ちょっとメモ
Linux 2.6.30 あたりのカーネルは、mm/migrate.c が含まれている。なにをするものかというと、ページを動かして連続領域を確保しようとするもの。今までは 4KB のページの数倍 -- 16KB でも厳しい状況があったのが、取れるようになる。ただ、128KB とか 数MB (システムの 10% とか) とかの連続領域を作ってくれるのかどうか? ちょっとわからない。目的が違うから厳しいような気もする。
MB クラスの 連続ページが取れると、IPU用メモリの動的アロケートができるのだが ... そうすると動画を使わない場合は メモリが多少増えて嬉しいのだ。 360p -- 仮に 640x360 だとすると IPU を使うには たぶん 256KB/64KB/64KB の 3 つの連続領域が 取れる必要がある。720p なら 1280x720 として 1MB/256KB/256KB が必要そう。PMPみたいなシングルタスクに近い使い方なら取れるような気もするし無理なような気もする。--- うーんわからない。
最後の 4MB を HIGHMEM にできないかな。HIGHMEM だと slab 置けないから 確実にメモリを追い出せるような気がする。
ちなみに、オリジナルの処理は、初期化時に __get_free_pages() を使って 4MB を予約している。予約したエリアは jz_imem_base に保存される。
ここから メモリ領域を 割り当てるのは proc を使って行う。
... usbboot を使ったときは、当初は使えず Network でつないだ後に 使えるようになる ... といった仕様で十分そうな感じ。
そういうふうにすれば、jz_imem_base の設定ぐらいで事足りる。
こういう風に しておいて、後で migrate の機能を使って動的に確保できないか試す ... のほうが手順的に楽そう。
usbboot (stage2) → Linux への制御の渡し方
どうやって Linux に制御を渡すのか について整理しておく。
stage2 は初期化が終わると 無限ループで udc4740Proc() を実行する。その延長で いろんなコマンドの処理を行う。コマンドの中には VR_PROGRAM_START1(未実装) と VR_PROGRAM_START2 がある。
VR_PROGRAM_START2 は、渡ってきたコマンドパケットに含まれる アドレスを パラメータなしで call する。( アドレスは USB の wValue , wIndex を使っていて パラメータを入れる余裕はない )。
もしリターンしてきたら、処理を続行する。Linux に処理を渡したとすれば、もちろんリターンせず Linux がスタートすることになる。
で、Linux のドライバで (USB Device ドライバを 使うことなく) udc4740Proc() をポーリングしてやれば、Linux が動作しながらも USBBOOT のプロトコルを受けられることになる。
Linux のカーネルは 仮想アドレス を使う。stage2 の アドレスが変わってしまうと 暴走する。.. のだがたぶん大丈夫だろう。(未確認)
udc4740Proc() は、再帰的に call されることになる。再帰自体は問題ないが、一回リターンして 再度 call されるのと比べると いくつか実行されない処理が出る。
両方 2 度 同じ処理をしても問題なさそうなので、処理をする前に 実行しておいたほうが良いかもしれない。( 不要かも知れないのだが、面倒なので調べていない )
さて、ポーリングするだけだと、メッセージをやりとりすることはできない。メッセージがどこに置いてあるか の情報を Linux が知る必要がある。それも登録しておけば ... Linux から メッセージの送受信のコードが書ける。
ついでなので、パラメータとして渡すコマンドラインも 同じように登録しておいて あらかじめ送り込んでおき、a0,a1 に常に設定するようにしたら良いかも知れない。(ただし、登録エリアが少ないので、メッセージの置き場所を構造体にしておく)
追記:を !
Subject: [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip
Date: Sat, 19 Jun 2010 07:08:05 +0200
(中略)
This patch series adds support for the Ingenic JZ4740 System-on-a-Chip.
The JZ4740 has a mostly MIPS32 compatible core (no on cpu timers) and many on
chip peripherals like RTC, NAND, MMC, OHCI, UDC, ADC, I2C, SPI, AC97, I2S, I2S
Codec, UART and LCD controller.
The JZ4740 is mostly used in eBooks, PMPs and hand-held consoles.
This series contains patches for the Qi Ben NanoNote clamshell device as the
inital supported device.
(後略)
こんなメールを見つけた。JZ4740 用のコードを メインストリームにマージしようとしているのか?
Ben NanoNote とか の名前が出ているし ingenic 版から jz4750系とかをザックリ切り捨てた qi-hardware 版みたいだ。(dingoo-linux とも違う)
まぁベースとして入ってくれると 差分が分かるから jz4740 は今のところ 関係なくても 嬉しいかも。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: tcc89xx (E7002とか)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: 日記
DATE: 08/25/2010 17:43:30
-----
BODY:
ハイエンドの 中華PMP には Telechip tcc89xx を採用したものが多いのは知っていたのだが、android も tcc8902 を採用し 2.1 対応のものが出てきている。
SmartQ V5/V7 も Telechip らしく 草分け的存在かも知れない。
コストパフォーマンス的には、E7002 (green-tool で 17250円) か。海外なら リスクがあるものの 2 割ほど安い 159.99 ドル とかがある。
ちょっと気になってきたのでメモ。
気になった要素は、
- Chip に USB や SD からの Boot 機能がある。
文鎮になってもリカバリが可能そう。
これは重要。元に戻せることが確信できないといじるのが怖い。
- android 2.1 対応。
対応しないチップがある以上やはり魅力
CPU は ARM11 (ARM1176JZ)
キャッシュは L2 なしで L1 16KB+16KB
- H.264 1080p に対応
動画プレイヤーとしても十分使える。
贅沢を言わなければ末永く使えそう。
動画アクセラレータを使うには、メーカのサポートがないと厳しい。
SmartQ 5 (S3C6410) はイマイチだったので気にしている。
Jz47xx は、ソースコードまで手に入るのだが高性能とは言えないのが残念。
- 画面を回転してももっさりしない(はず)
グラフィックエンジンで 90°回転できる。
SmartQ 5 (S3C6410) はもっさりだったので気にしている。
- Linux ソースとか データシートが拾ってこれた。
リンクすると 削除されたりするかも知れないので リンクしない。
ヒントは、TWS89x_v800_Doc.zip とかが置いてあるところ。
といったところ。
ファームウエアには、linux.rom, ramdisk.rom and tcboot.rom が含まれるものらしい。(rootfs も必要そうだが)
そういう構造をしているのは、
など。Telechip がベースを提供しているなら みな構造が同じのような気がする。
usbboot の方法は、拾ったデータシートには書いてなかった。
SmartQ_V5/V7_partition_recovery_howto が参考になりそう。
T56 の情報は、ここにあるらしい。
まぁ、これをいじるのも楽しそうではある。だが時間がいくらあっても足りなさそうなのでパスか。
ちょっとメモ:ixsoon E6500
リンク見ると CE 6.0 or android 2.1 のマシン。800MHz だそうだ。これも telechips tcc8902 っぽい。
「これ」とか 230 ドルぐらいするのが多いのだが、妙に安いところがある。「これ(134 ドル)」 と 「これ (143 ドル)」。なんか怪しげ。それはともかく この怪しげなのには、telechips 720MHz と書いてある。(他だと Marvell と書いてあるところもあるのだが、2.1 は出せてないはず。) それにしても値段の違いはなんだろう? カメラとか GPS とか option が違う?
追記:10/09/07 E7002 の アルミシェルタイプが出てきた。
プラシェルは分解が難しいらしく、買うならアルミシェルと考えていた。(放熱効果より 分解が最優先。-- 絶対分解するから)。これは、E7001 初代アルミシェルと同じ。
green-tool でも 予約を開始している (17,999 円 送料無料)。
aliexpress だと これとか。162.16 ドル x PayPalUSDJPY(86.3648) = 14005 円。1 万超えるから 消費税を請求されるかも知れない(+700円)。あと国内の場合ショップによっては ACアダプタが変更になっているかも知れない。それに海外からの購入は、リスクが追加される。初期不良とか面倒だし。さらに言うと、専用ケースや 国内用ACアダプタ+プラグ変換ケーブルを一緒に買えない .. とかのデメリットもある。
-- あまり得ではないかも知れないのだが ... やはり値段を見てしまう。この値段なら ... だいぶ欲しいような。
で、ポチってしまった。そして、その日のうちに発送のメールが。あとは、はずれを引かないことを願うのみ。
そういえば、SmartQ V5 の廉価版の V3 も出てきた。4.3 inch だが小さいのが良いなら これが良いかも知れない。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: USBBOOT で hello world
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(USBBOOT)
DATE: 08/31/2010 21:51:34
-----
BODY:
オリジナルの usbboot は、いろんな機能が足りない。このカテゴリでは、usbboot の改造とかについて書いていこうと思う。
目的は、Linux カーネルの直接ブート と (カーネルにドライバを入れることでの)カーネルのメッセージの取得。
そのための機能は、一応仕込んだ。これからテストしてみようと思う。
プログラム:
SDRAM へのプログラム(ファイル) のロード:
オリジナルは、1 回の転送サイズ (MAX_LOAD_SIZE) を 12KB に制限していて とても遅いので、とりあえず 256KB に変更。
サンプルとして DINGUX の dual_boot インストーラの zImage を ロードしてみた。
ちゃんと ロードできたかどうかは、SDRAM のメモリをダンプする mread というコマンドを作成し xburst_stage2 にもプリミティブを作ってテストした。ちなみに ファイルに書き込む mdump というコマンドも作る予定だが、まだ作っていない。
usbboot :> load
Usage: load (1) (2) (3)
1:SDRAM start address
2:image file name
3:device index number
usbboot :> load 0x80600000 zImage.bin 0
start:::::: 0x80600000
Total size to send in byte is :3256320
Loading data to SDRAM :
CPU data: Boot4750
Load last address at 0x80600000
0x80640000
CPU data: Boot4750
Load last address at 0x80640000
CPU data: Boot4750
Load last address at 0x80680000
CPU data: Boot4750
Load last address at 0x806c0000
:
CPU data: Boot4750
Load last address at 0x80900000
usbboot :> mread
Usage: mread (1) (2)
1:start address
2:length in byte
usbboot :> mread 0x80600000 256
CPU data: Boot4750
Reading from 0x80600000 length 0x100....
0x80600000 : 21 80 80 00 21 88 a0 00 21 90 c0 00 21 98 e0 00
0x80600010 : 92 80 04 3c 00 b0 84 24 92 80 05 3c 40 54 a5 24
0x80600020 : 00 00 80 ac fe ff a4 14 04 00 84 24 92 80 1d 3c
0x80600030 : 40 54 bd 27 60 80 04 3c 20 40 84 24 31 00 05 3c
0x80600040 : 20 6f a5 34 01 80 06 3c 60 80 1f 3c 60 00 ff 27
0x80600050 : 60 80 1a 3c 98 19 5a 27 08 00 40 03 00 00 00 00
0x80600060 : 21 20 00 02 21 28 20 02 21 30 40 02 21 38 60 02
0x80600070 : 18 80 1a 3c 10 0b 5a 37 08 00 40 03 00 00 00 00
0x80600080 : 08 00 00 10 60 80 08 3c 9c 00 08 25 00 a0 09 3c
0x80600090 : 25 40 09 01 08 00 00 01 00 00 00 00 00 80 1a 3c
0x806000a0 : 00 80 1b 3c 00 40 7b 37 80 ff 7b 27 00 00 41 bf
0x806000b0 : 20 00 41 bf 40 00 41 bf 60 00 41 bf 00 00 40 bf
0x806000c0 : 20 00 40 bf 40 00 40 bf 60 00 40 bf f7 ff 5b 17
0x806000d0 : 80 00 5a 27 60 80 08 3c e4 00 08 25 08 00 00 01
0x806000e0 : 00 00 00 00 08 00 e0 03 00 00 00 00 00 00 00 00
0x806000f0 : 08 00 e0 03 00 00 00 00 08 00 e0 03 00 00 00 00
usbboot :>
ロードしたプログラムの実行:
オリジナルでも go コマンドがある。これは引数なしで、アドレスを call する。
Linux の boot を考えると 引数 と コマンドラインが必要。不定値では都合が悪い。go コマンドを改造し コマンドラインの設定と 引数として渡すようにした。
詳しく書いておくと コマンドラインを含む通信エリアというのを定義していて、通信エリアの先頭が argv になるようにしている。
プログラムが 対応していれば、USBBOOT のプロトコルを使って メッセージを返せるようにしている。
これをテストするプログラムを xburst_stage1/2 を参考に作ることにした。
target.ld:
これはプログラムの アドレスを決めるもの ... と思って良い。
stage1/2 の違いをみると MEMORY のところだけなので、開始アドレスを 0x80600000 にした。サイズは適当で良さそうだが、最低 16MB の RAM があり後ろ 4MB に stage2 があるとして 6MB にした。
UTPUT_ARCH(mips)
ENTRY(_start)
MEMORY
{
ram : ORIGIN = 0x80600000 , LENGTH = 6M
}
(後略)
head.S:
これはスタートアップを定義するもの。c_main に jump するのだが、c_main が return すれば、USBBOOT に制御が戻るはず。とりあえずは、stack を設定しないバージョン。
.globl _start
.set noreorder
_start:
#if 0
/*
* setup stack, jump to C code
*/
la $29, 0x80bffff0 /* sp */
#endif
j c_main
nop
ビルド:
xburst_stage1/2 の Makefile を変更しただけ。こんな風にビルドしている。
ipsel-linux-gcc -O2 -fno-unit-at-a-time -fno-zero-initialized-in-bss -mips32 -fno-pic -mno-abicalls -c main.c -o main.o
mipsel-linux-ld -nostdlib -EL -T target.ld head.o main.o msg.o -o xburst_hello.elf
mipsel-linux-objcopy -O binary xburst_hello.elf xburst_hello.bin
mipsel-linux-objdump -D xburst_hello.elf < xburst_hello.dump
mipsel-linux-objdump -h xburst_hello.elf < xburst_hello.map
mipsel-linux-nm -n xburst_hello.elf < System.map
確認:
objdump を使って xburst_hello.elf を見てみた。
mipsel-linux-objdump -d xburst_hello.elf
Disassembly of section .text:
80600000 <_start>:
80600000: 04 00 18 08 00 00 00 00 00 00 00 00 00 00 00 00 ............
....
80600010 <c_main>:
80600010: 0818003f j 806000fc
80600014: 00a02021 move a0,a1
...
806000fc <msg_init>:
806000fc: 3c028060 lui v0,0x8060
80600100: 03e00008 jr ra
80600104: ac4401a0 sw a0,416(v0)
ちゃんとロードアドレスが、0x80600000 になっていて、その先頭が entry になっている。
_start が ディスアセンブルされていないが、
.type _start, @function
:
.end _start
を入れることで ディスアセンブルされるようになる。
それはともかく、これが動くかというと ... 制御が渡った後に戻ってこない。
usbboot :> go
Usage: go (1) (2) (3)
1:start SDRAM address
2:device index number
3:command_line
usbboot :> go 0x80600000 0
CPU data: Boot4750
Load last address at 0x81d08130
Executing No.0 device at address 0x80600000
usbboot :>
usbboot :> boot
Error - can't retrieve XBurst CPU information: -19
ほとんどなにもしていないのにもかかわらず戻ってこない。.. メモリに書き込んでいるぐらい。
次のステップとして
- メッセージを追加しての USBBOOT への return 。
- ポーリングすることで、メッセージを出力。
を考えているのだが ...
原因を調べて直さないと次のステップに行けない。
それはともかく ... こういう風に USBBOOT を使って任意のプログラムを動かせるようになれば、ちょっと大規模な マイクロコントローラのような使い方もできるようになる。ライブラリがないのがつらいところだが、Cortex-M3 とか SH-2A とかのボードを使う感覚でプログラムを作ってみるのも、面白いかもしれない。
なにしろ、LCD や サウンド、microSD(or SD) 、バッテリーが最初から付いているのだ。メモリも最低クラスが 16MB -- 十分ではないか。
もうひとつ嬉しいのは、ボタンとか LCD などデバイスの使い方をさがすのに USBBOOT の拡張に頼らなくて済むという点。プログラムを書いて動かしてみれば良い。ちゃんと return してくるなら reboot もしなくて済む。
このあたりの目的には ロード + 実行のコマンドを作って使いやすくしておきたいところ。検討しておこう。
プログラム:
動かない原因を調べるために。stage2 で 実際に実行しているところを コメント化して 実行直前の データを取ることにした 。
ところがこれも動かない。いくつかの処理を call しているので どれが関係するのか調べていったところ ...
jz_writeb(USB_REG_POWER,0x0); // High speed
このコードを入れると動かなくなることが分かった。
UDC (USB Device Controller) の Power Manegement レジスタだそうだが、何をしようとしているか不明。
したいことは、UDC の状態を変更せず 戻れることだから、不要そうではある。
Execute program at 0x80600000
Command line: aaa bbb ccc ddd eee fff
さて、stage2 での "go" 直前の状態。-- アドレスと Command line の設定はうまく行っている。
これで 実際に実行するように変更する。そして stage2 内に仕込んだ hello() を実行してみる。
32MB だと stage2 の先頭アドレスは 0x81c00000 になる。hello のアドレスを mipsel-linux-nm で調べてみると 0x80001610 。
go 0x81c01610 0
とすると
Execute program at 0x81C01610
Command line:
hello world
なんて表示された。今度は 実際のプログラム... の前に バイナリの作成について ..
stage1 は、作成時に決めた固定のアドレスにロードするが、stage2 はリロケータブル。リンクのオプションは同じだが、target.ld が違う。
stage1:
_gp = ABSOLUTE(.);
stage2:
_gp = ALIGN(16);
_got_end = ABSOLUTE(.);
の違いがある。で、stage2 では、c_main でなにかおまじないをしている。
リロケータブルなバイナリは作ってみたいとは思うが最初はパスして、stage1 流で行く。
usbboot :> msg
usbboot :> load 0x80600000 hello.bin
usbboot :> go 0x80600000 0
Execute program at 0x80600000
Command line:
comm_area addr:0x81D070E0
proc_func addr:0x30783009
XXXXXXX hello world XXXXXXX
argc = 0x00000002
argv[1] :
さて、hello.bin を動かしていて、気がついたことがある。
ロードしなおしても前のプログラムが動いてしまうのだ。
原因は、icache の flush 忘れ。もともと 2 回以上実行することを想定していないのかも知れない。
とりあえず。usb_main の先頭と同様に __icache_invalidate_all() を入れることで 解決した。
次の課題は、hello.bin からのポーリング。果たして動くのか ...
というと動かなかった。
リロケータブルなバイナリの call はみな t9 にアドレスを入れてそこに call している。
806000a0 <msg_proc>:
806000a0: 3c028060 lui v0,0x8060
806000a4: 8c420290 lw v0,656(v0)
806000a8: 10400006 beqz v0,806000c4 <msg_proc+0x24>
806000ac: 00000000 nop
806000b0: 8c590010 lw t9,16(v0)
806000b4: 13200003 beqz t9,806000c4 <msg_proc+0x24>
806000b8: 00000000 nop
806000bc: 03200008 jr t9
806000c0: 00000000 nop
806000c4: 03e00008 jr ra
806000c8: 00000000 nop
この msg_proc は、関数ポインタとして 登録されている udc4740Proc() を call するもの。
関数ポインタを使った call は t9 を使って call することはクリアしている。
うーん何が悪いのだろうか?
Execute program at 0x80600000
Command line:
comm_area addr:0x81D070F0
proc_func addr:0x47200A0D
XXXXXXX hello world XXXXXXX
argc = 0x00000002
argv :0x81D070F0
proc_func addr :0x47200A0D
関数ポインタの値を表示したところ、答えが出ていた。不定値が入っている。よくよく見れば。関数ポインタに代入していなかった。
これで、hello.bin の中から 10 回 udcProc を call して return しても正しく動くようになった。
これで hello world は、一旦の完成だが、 Jz47xx で動かした プログラムについてのメモを載せる予定。
一応 Linux を移植しようと思っているので、この状態で実用的なものを 自作しようとはお持っていない。基本的に テストプログラムを走らせるつもり。
ただテストといっても いろいろ考えられる。装置の解析が第一としても、XMU を使ったプログラムを動かして動作を確認するとか、オーバクロックしてどこまで動くか調べるとか 。
プログラム:
テストプログラムの追加。tests に 01_hello / 02_backlight / 03_portout を作成した。
01_hello は今まで作ってきた hello world 。
02_backlight は、PWM のポート に対して 出力に設定するもの H と L が出力できる。( パラメータで指定 )
03_portout は、02_backlight を汎用化したもの。PA0 〜 PD31 までの範囲の ポートに対して 出力 (H/L) と 入力(Z) を設定できる。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: aneca A-33
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(機種解析)
DATE: 09/02/2010 01:02:27
-----
BODY:
またもや買ってしまった。
今度は、aneca A-33 -- FocalPrice だと 37.80 ドル
実際に買ったところは、everbuying で もうちょっと安い 33.93 ドル。-- まぁ有名でないし勧められるかどうかわからないので、ForcalPrice の方を先に紹介しておく。
2-3 回利用してみたが、対応は悪くない。ただ 品切れになったから姉妹ショップから買えとか変なことを言ってきたりする。安いのも B級品とかで 品質が悪いのかも知れない。
あと、受け取りまで やたら時間がかかる。20 日以上が普通で FocalPrice よりひどいかも。
33.93 ドルだと 87 円換算で 3000円を切るレベルの値段。これで 16:9 400x240 のディスプレイと FLASH 4GB のモデルが手に入る。
ただ、これは FM ラジオもスピーカーも付いていないようだ。で、なぜかストップウォッチが付いている。
使わないものは、ないほうがスッキリする。ただ FM ラジオのパターンは線を引き出すために付いていて欲しい。-- taobao で売っているのには、FM が付いているからパターンはあるようだ。ちなみに、バッテリーは 600mAH だそうだ。
ボタンは、サイドに 5 つと、液晶面に 1 つ。A-41 より 1 つ多い。
電源スイッチも反対側のサイドに付いている。たぶん例によってハードスイッチ。-- 開発するには、ソフトで電源を切るタイプ(A-320 など)より便利。
A-41 と同じ背景だし おなじ Jz4725B なのだろう。メモリは 16MB のはず。(PMP 機能だけならそれ以上は積まないだろう)
aneca でのファームウェアはカスタマイズのレベルが高かった。これも同じはず。
ひどい日本語が修正されているし、カレンダーもまとも。
フォントのサイズも変更されてて、ちゃんと見栄え良く画面に収めるようにしている。
あと SJIS で埋め込んだ ID3タグがちゃんと表示されるし、EBOOK も UTF-8 なら表示される。(.. これは P5-5 でも OK だからFWのベースに入っているのだろう)
メニューもなにか増えている。ロックができたりするし。
H.264 は無理だが xvid 程度の動画を見たり、mp3 を聞くなら実用として使っても便利そう。
改造とかの面でいうと、スイッチの配置からみて ボードはたぶん 筐体 の半分ぐらいで 取り出した場合コンパクトで良さそう。あと、液晶面のスイッチの周りになにか仕込むスペースがありそう。
... というわけで A-41 より気に入りそうな感じ。
こんな感じで、気に入りそうだとすぐ買ってしまっている。そのかわり Andoid とか Arduno(電子工作むけのボード)は、買わないのだ。これでよいのだ。(実は Android は1つ購入。だが、当面これだけの予定)
追記:入手できた。
大きさは、縦 9.8cm 幅 5.1cm 厚さ 1.0cm 。
スイッチは左サイド 下 に電源スイッチ(スライドSW) 。右サイドに +/- , ←/→ , PLAY/PAUSE の 5 個。と液晶面 下に 1つ (M)。ケースはプラスチック。サイドは メッキしたプラスチック。
まずは、機能の確認。A-41 とまったく同じ。ストップウォッチなどないし、スピーカも付いている。電源スイッチも同じでただちに電源OFF にできる。あと気がついたのだが PLAY/PAUSE ボタンの長押しでシャットダウンする。そして、その状態から PLAY/PAUSE ボタンで電源ON する。
CPU は、予想どおり JZ4725B 。Mと書いてある 液晶面のボタンを押しながらUSBに挿すことで USBBOOT になる。
ケースはプラスチックで嵌め合わせ。精度は良さそうなのだが、なぜかサイドに隙間がある。おかげで分解は簡単で、裏蓋が簡単に外れた。
見ると バッテリーは 650mAH で A-41 と同じものが使われている。
(拡大)
基板は、A-41 より少し大きい感じ。スピーカーのところが U字型に切り抜かれている。FM ラジオモジュール用のパターンもある。あと、メモリは 16MB。
製造は、2010/8月 って 最近なのか。あ、下のコイルが欠けている。(よくあることだが、ちと残念)。メモリは、W9812G6PH-6 で FLASH は、29F32G08CBAAA とマーク (Micron MT29F32G08 ?)。
メモリを換装するには、基板をはずさないといけない。ネジが 2 つあるのでそれを外すのか? 液晶を含めまるごと外れるような気がするのだが ...
ここから先の分解は、ちょっと慎重にならないとマズそう。液晶のところを見たいのだが ... 今回はパス。
ちなみに、もうひとつの方も裏蓋を開けているのだが、やはり 2010/8 月。箱が違ったので 1つは古いと思ったのだが違った。
あとで気がついたのだが、簡単とか言いながら 裏から見て 左中央のツメを折ってしまっている。-- 破片が見つからないし、スキマがあったのはこれが原因かも知れず、最初からだったかも。あと、microSD が入っているとひっかかって裏蓋をはずせない。すぐ忘れてやってしまうので要注意。
A-41 と同じような感じ。回路的にもほぼ同じなのだろう。解析は楽そうだ。
満充電になると、充電のアニメーションが止まることに気がついた。充電中に電圧を測定しても満充電かどうか分からないはずなので、充電IC の 状態をセンスするために GPIO が割り当てられているはず。
A-41 も調べてみたが、どうも同じようだ。PLAY/PAUSE ボタンでの 電源 ON/OFF も同じだった。-- そういえば WKUP ピンが割り当てられているのだった。 WKUP は、サスペンド/ハイバネーションからの復帰ができる。ハイバネーションといっても 状態をセーブしてなけれれば電源ON と同じ。
この電源 ON/OFF 機能を知らなかったのだが、P5-5 も同じだった。Neo Slim 3000 にも 機能は付いていた。(OFF はできるが ON でハングアップする)。ボタンは、P5-5 が SELECT の位置 (電源マークあり) 。Neo Slim 3000 は L ボタン(これも電源マーク)
それはともかく、普段は PLAY/PAUSE ボタンで 電源 ON/OFF するようにしていれば、アラーム機能も付けられるわけか。
(ちなみに、ハイバネーションは電源 OFF と大差ないから消費電力は気にしなくて良い)
少々使ってみた。液晶は 3inch 400x240 。視野角は予想より狭い。
H.264 の 動画の再生は 400x226@30fps でも音ズレするのだが、動きが少ない場面ではちゃんと再生できている。640x360@24fps も見てみたが、明らかに遅くスローモーションのようになる。どうもフレームスキップはしてないようだ。
Jz47xx は、SIMD 命令(XMU) を使ったソフトコーディック。いままで買った JZ4725B の挙動は全部同じなので コードが共通なのだろう。Jz47xx の潜在能力はもう少しあると思えるので、自作ソフトが動かせるようになったらチューニングしてみたい。
あと、オーバークロックもしてみたい。180nm プロセスのJz4740 は 400MHz+αで動作するようだが、Jz4725B は、160nm でオーバークロック耐性が高いはず。400 x 180/160 = 450 なので 450MHz+α で動くかも知れない。
不具合はちょっとある。USB の接触が悪く。接続が切れたりする。これは、使っているうちに良くなるかも。
実は 2 つ買ったのだが、1 つはいくら充電しても 充電が進まないことが判った。バッテリーには過放電保護が付いているようだし 膨らんでもいないので、劣化が理由ではないかも知れない。-- 充電回路が変なのか?
一晩充電したら、充電完了した。バッテリーが弱っていて予備充電状態が長かったのかも。
もうひとつ気になることがある。電源SW OFFで接続すると バックライトがチラつく。電源SW ON にすると それが収まる。この現象は両方で起きる。
電源スイッチが入っていると バッテリーからも電源供給するような回路でも入っているのだろうか?
所感:
- 基本は、A-41 と同じだが、表示できる面積と情報量が多い。Linux を動かす前提なら、情報量が多い方が嬉しい。
- Bluetooth を付けてみたい。その前提ならプラケースの方が加工も楽だし、電波を通すし都合が良い。ケースは嵌めるだけなので、スライドさせる A-41 より 加工の自由度が高そう。
ちなみに、デバイスを付けるとしても I2C しか I/O がない。シリアルさえ使えない。Bluetooth を付けるにも スレーブコントローラが必要。 こういうものでも、司令塔にはなれるので、ロボットとかの 制御に使えるかもしれない。
- オーバクロックの面では、A-41 も A-33 も CPU の上の空間は空いている。P5-5 は バッテリーがあり、Neo Slim 3000 はすぐ LCD。SDRAM に関しても同じ。アルミケースの A-41 の方が放熱はしやすいが、A-33 も ケースに穴を空けてしまえば ヒートシンクさえ付けられるので 問題ない。
- LCD の視野角が狭いのが残念。まぁ無理を言っても仕方ないし ..
これを本命として Linux の移植をしていきたい。
換装用 メモリは、32MB 多数 と 64MB 2 個を確保。64MB は本命のこれに付けようかと思う。ただし、32MB で練習するのが先なので、換装は後の方。練習は SMP3100 でやって 次に A-41 か。
ちなみに、8bit 64MB x 2 もやってみたいが これは P5-5か。
さて、そろそろ簡単なところを解析.
NAND FLASH :
usbboot :> nquery 0 0
CPU data: Boot4750
ID of No.0 device No.0 flash:
Vendor ID :0x2c
Product ID :0xd7
Chip ID :0x94
Page ID :0x3e
Plane ID :0x84
Page ID から 消去ブロック 512KB / ページサイズ 4KB 。
Plane ID から 16Gb プレーン x 2 = 4GB 。
ということが分かる。
バックライト は、PC13 (PWM3) で A-41 と同じだった。
あと、MENU と PLAY/PAUSE 以外の ボタンのどれを押しても PD17 が L になるのも、A-41 と同じ。
default:
PAPIN: 00008f83
PBPIN: 823f7b3c
PCPIN: ffdfdcff
PDPIN: ffffffff
M button:
PDPIN: ffffffff (not pressed)
PDPIN: ffdfffff (pressed)
PLAY/PAUSE button:
PBPIN: 823f7b3c (not pressed)
PBPIN: 023f7f3c (pressed)
MicroSD
PCPIN: ffdfdcff (not inserted)
PCPIN: ffcfdcff (inserted)
A-33 JZ4725B 判明ピン
バックライト:
o 57 PC13 PWM3/UART0_RxD(UART) H で ON (A-41 と同じ)
microSD センス:
o 54 PC20 WAIT(SRAM) L で microSD あり (A-41 と同じ)
ボタン MENU "M" :
o PD21 LCD_DE(LCD) 押し下げで L (A-41 と同じ)
ボタン PLAY/PAUSE "⇒II" :
PB31 WKUP(RTC) 押し下げで L (A-41 と同じ)
要調査:
PHONE センス
-- A-41 にはあったが、見つからない。なしでも実装できるようだからないのかも。
カップリングコンデンサは、J476 になっている。周りの抵抗は 470 x2 と 330 x 2 。よく分からないものの 小容量 コンデンサ を使えるようにするための抵抗 と MIX 用?
スピーカースイッチ
満充電センス
-- 存在しそうなことは分かった。しばらく使って GPIO の差分を見てみる。→ GPIO には変化なし -- 違うのか?
microSD CS (不要)
-- Programming Manual に 1bit モードの記述がある .. ドライバもサポートしている(CONFIG_JZ4750_MSC1_BUS_1)。GPIO はどうも HOTPLUG_PIN (上記 MicroSD センス)のみを使うようだ。
スイッチセンス (+/ー/←/→ ) (PD17 - ADC?)
-- ADC が使えるのは、Linux が動いた後なので解析は先延ばし。
LCDの接続。
-- 接続自体は済みなので不要といえば不要。HSYNC/VSYNC を使う接続なら 初期化の方法だけ分かれば良い。コントローラを使う SLCD の接続なら コントローラの詳細を知る必要がある。
追記:再度分解
液晶の接続を見るために再度分解した。
やはりネジは外す必要があった。あと、LCD の一部が弱く接着されていた。それ以外に固定しているものはなかった。
これは、全部を外したあとのケース。どうなっているか記録。
液晶は、0.8mm ピッチ 40 pin だった。HUARUI T-0052-B というものらしい。-- なんか NC が多い。
コンデンサ(CXX)やダイオード(DX) ばかりで抵抗がない。
バス幅などの設定はないようだ。
これはボタンのところ。一応記録。ボタンに関係するものは、2-3 個のように思えるのに沢山載っている。よく見ると Power 系のデバイス -- 大きなコンデンサや ダイオード 三端子のなにかがある。
再組み立てに失敗。液晶がずれた。そういえば、ネジもつけ忘れた。で、やり直してみたが、似たような感じになってしまった。
-- SDRAM をつけたら真面目に組むことにして 当面このままにしよう。
-- 全部はばらしていないもうひとつの方も 左と下が 1mm ほどずれている。よくよく考えれば、基板を固定すれば LCD の位置はほとんど変えられない。もともとだったとして納得しよう。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: P5-5 (PMP3100後継機)
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(機種解析)
DATE: 09/02/2010 01:30:24
-----
BODY:
以前 PMP3100 を勢いで買ったのだが、予想に反して Jz4725(無印)だった。
Jz4725(無印) も Jz4725Bも おなじようなものだと思っていたのだが、調べるうちに 全然違うことが分かってきた。Jz4725(無印) は、Jz4740 ファミリーで、Jz4725B は Jz4750 ファミリー。
Port のマッピングが ファミリーで 全然違うので、Jz4725(無印) と Jz4740 は同じカーネルにできる可能性があるが、 Jz4725(無印) と Jz4725B は同じにできない。
そのうち、後継機の P5-5 が FocalPriceから出たので気になっていた。DealExtreme で PMP3100として売られているのも実は P5-5 だと知ったので、ひとつ入手しておくことにした。
後継機と言っても ハードウェアは、CPU を載せ替えて、ボタン や スイッチなどの印字を 妥当なものに修正しただけに思える。
-- 最初の PMP3100 は、HOLD, ON/OFF の表示が逆 。あと、2つめの イヤホンジャックに AV-OUT と印字されていた。
CPU を載せ替えるのは、たぶん入手できなくなったから。
ファームウェアも前のが動かないし、刷新することになったのだろう。
なにかものを作る場合、だれも持っていなさそうな aneca をターケットにするより 数が出て 安定供給されそうな P5-5 をターゲットにしたほうが良いのだ。
aneca は自分が気に入ったからターゲットにするのだが、気が済んだら P5-5 もターゲットにしたいと思う。
まだ入手しただけだが、Jz4725B なのは確認できた。あとはメモリサイズを一応確認してみる。ついでにメモリが 32MB になったりしてると嬉しい。
usbboot :> nquery 0 0
CPU data: Boot4750
ID of No.0 device No.0 flash:
Vendor ID :0xec
Product ID :0xd5
Chip ID :0x14
Page ID :0xb6
Plane ID :0x74
4K Page の K9XXG08UXM (2GB) だった。
次は RAM サイズ。USBBOOT の cfg ファイルに
BUSWIDTH = 16
BANKS = 4
ROWADDR = 13
COLADDR = 9
という設定がしてあって
SDRAM Total size is 32 MB, work in 4 bank and 16 bit mode
というメッセージがでる。で、この情報を元に CPU の SDRAM 設定をする。CPU は、32MB だと思ってアクセスするわけだが、実際に 16MB しかない場合、データ が 循環する。bank が 上位 2 bit になるので、8MB が実は 4MB + 同じデータの 4MB ということになる。
W9812G6PH-6 を使っていて 16MB しかないのが明らかな A-41 でまずは確認。
0x81c00dd4 : 00 00 1c 3c 2c 60 9c 27 21 e0 99 03 d0 ff bd 27
0x81800dd4 : 00 00 1c 3c 2c 60 9c 27 21 e0 99 03 d0 ff bd 27
次に A5-5 。... 結果はまったく同じだった。これで RAM 容量は 16MB だと分かった。
ところで、... 16MB 用のマシン に 64MB の RAM を入れるとどうなるのだろう? OK そうなのだが、A12(pin 18) に配線されているのが条件。PMP3100 だが写真を見ると SDRAM の方に配線されているから 問題ないはず。
よくよく考えると、16MB では DINGUX 並のことはできない。RAM の換装が必須だが 電子工作が趣味ならともかく、普通の人が RAM の換装などできるはずがない。そうすると ターゲットにする意味がなくなってしまう。 -- ただ、このマシンは 裏蓋をあけるとすぐ RAM にアクセスでき、周りにスペースもあるので 換装自体は 最もやりやすい。最初に RAM 換装してみようと 思っているマシンだったりする。
GPIO の 解析
簡単そうなのが、microSD のセンスと イヤホンのセンスだったので同じことをやってみる。
初期状態
PAPIN: 0000ffff
PBPIN: 823f5f0c
PCPIN: ffdfdcff
PDPIN: fd7fffff
microSD なし PCPIN: ffdfdcff
microSD あり PCPIN: ffcfdcff
ありで PC20 が L に変化
phone1 あり -- 変化なし
phone2 あり -- 変化なし
分かったのは、microSD のみ。デフォルトの pullup を落とすとかしないと分からないのだろうか? それとも コントローラ経由?
さて PC10 からの PWM は 110111 (MSB が PC15)のビット列。
これを見るとバックライトは、PC13/PWM3/UART-RxD のように思える。
実際やってみると当たり。-- まぁこれは 選択枝がないようなもの。... それはともかく、コントーラの制御に UART を使っているものとばかり思っていたのだが違うのかも知れない。
すぐわかるのはここまで。他はどうしよう。
課題1 PHONE1/PHONE2 のセンス
Linux が動いてからでも遅くない。とりあえずパス。
課題2 ボタンの制御
これはどうやったら分かるのだろう? 配線もわからなければ、制御するための プロトコルも分からない。
こういうのに近いものがあるとすれば ... A-330 のワイヤレスコントローラか。受信部にマイクロコントローラが付いているところから よく知られているコントローラ互換のように思えるのだが ...
ロジアナ使うにしても できることは、コントローラ自体の PIN の変化が分かるだけ。分析すれば どのように制御しているかは分かるだろう。で、GPIO がどう配線されているかを見つけるのはどうしよう。... テスターで頑張ればなんとかなるか。
課題3 スピーカー出力切り替え
これも 後回しで問題ない。
課題4 PHONE の ポップノイズ対策 (ないと思うがあるかも知れない)
課題5 LCD の制御
LCD のつなぎ方は、割と決まっている。特に 2.8 inch なら A-320 などと 同じはず。-- と思ったが、A-320 の 新しいタイプ ILI9331 は SLCD(SmartLCD: HSYNC/VSYNC を使わない) 接続だそうだ。
確かめてみることはできるだろう。DINGUX の hwinit を参考にすれば 良さそうだ。... ソースコードの情報は、dingoo-linux の ここ。svn でダウンロードできる。
課題6 MicroSD の CS
MSC1 は、CLK/CMD/D0 のみ。CS は GPIO でやることになっているようだ。そうすると PIN を見つけないと MicroSD が使えない。
これは基本機能なので重要だ。なんとか見つけないと。... と思ったのだが、どうも SPI モードとは違うらしく 上記の線だけで良いのかも。
付録 PMP3100(旧機種) の基板写真
P5-5 JZ4725B ピンアサイン表 (作成中)
凡例 : x 割り当てに選択の余地がないピン
o A-41 固有の割り当てで判明したピン
? 不明なピン
Jz4725B
x 1 PD0 LCD_D0(LCD)
x 2 PD18 LCD_PCK(LCD)
x 3 GND
x 4 VDDCORE(1.8V)
x 5 PB3 A3(SDRAM)
x 6 PB2 A2(SDRAM)
x 7 PB1 A1(SDRAM)
x 8 PB0 A0(SDRAM)
x 9 PB10 A10(SDRAM)
x 10 PB16 DCS(SDRAM)
x 11 PB17 RAS(SDRAM)
x 12 PB18 CAS(SDRAM)
x 13 PB19 SDWE(SDRAM)/BUFD
x 14 PB20 WE0(SDRAM)
x 15 PB21 WE1(SDRAM)
x 16 PB24 CKO(SDRAM)
x 17 PB25 CKE(SDRAM)
x 18 PB12 A12(SDRAM)
x 19 PB11 A11(SDRAM)
x 20 GND
x 21 VDDCORE(1.8V)
x 22 PB9 A9(SDRAM)
x 23 PB8 A8(SDRAM)
x 24 VDDIO(3.3V)
x 25 GND
x 26 PB7 A7(SDRAM)
x 27 PB6 A6(SDRAM)
x 28 PB5 A5(SDRAM)
x 29 PB4 A4(SDRAM)
x 30 PB13 A13(SDRAM)
x 31 PB14 A14(SDRAM)
x 32 PA8 D8(SDRAM)
x 33 PA9 D9(SDRAM)
x 34 PA10 D10(SDRAM)
x 35 PA11 D11(SDRAM)
x 36 PA12 D12(SDRAM)
x 37 PA13 D13(SDRAM)
x 38 PA14 D14(SDRAM)
x 39 PA15 D15(SDRAM)
x 40 PA0 D0(SDRAM)
x 41 PA1 D1(SDRAM)
x 42 PA2 D2(SDRAM)
x 43 PA3 D3(SDRAM)
x 44 PA4 D4(SDRAM)
x 45 PA5 D5(SDRAM)
x 46 PA6 D6(SDRAM)
x 47 PA7 D7(SDRAM)
? 48 PC15 PWM5
x 49 PB16 A16(SRAM)/AL(NAND)
x 50 PB15 A15(SRAM)/CL(NAND)
x 51 PC29 FWE/MSC0_D1
x 52 PC28 FRE/MSC0_D0
x 53 PC27 FRB/MSC0_D2
? 54 PC20 WAIT(SRAM)
x 55 PC22 CS2/MSC0_D3
x 56 PC21 CS1
? 57 PC13 PWM3/UART0_RxD(UART)
o 58 PC12 PWM2/UART0_TxD(UART)
? 59 PC11 PWM1/I2C_SCK(I2C)
? 60 PC10 PWM0/I2C_SDA(I2C)
x 61 PD28 MSC1_D0(MSC)
x 62 PD26 MSC1_CLK(MSC)
x 63 PD27 MSC1_CMD(MSC)
x 64 EXCLK(CPM)
x 65 EXCLKO(CPM)
x 66 VDDIO(3.3V)
x 67 PBAT/ADIN0
? 68 ADIN1
x 69 VSSADC(CPM)
x 70 VDDADC(CPM)
x 71 AVDDPLL(CPM)
x 72 AVSSPLL(CPM)
x 73 VDDPLL(CPM)
x 74 VSSPLL(CPM)
x 75 VDDA(USB)
x 76 RREF(USB)
x 77 VDDUSB(USB)
x 78 DM0(USB)
x 79 DP0(USB)
x 80 VSSUSB(USB)
x 81 RTCLK(RTC)
x 82 RTCLKO(RTC)
x 83 VDDRTC(RTC)
x 84 PPRST(RTC)
x 85 PB31 WKUP(RTC)
x 86 PWRON(RTC)
x 87 VDDHP(CODEC)
x 88 RHPO(CODEC)
x 89 VSSHP(CODEC)
x 90 LHPO(CODEC)
x 91 VDDLHP(CODEC)
x 92 VSSCDC(CODEC)
x 93 VDDCDC(CODEC)
x 94 VREF(CODEC)
x 95 VDDCDC2(CODEC)
x 96 VSSCDC2(CODEC)
x 97 LLINEIN(CODEC)
x 98 RLINEIN(CODEC)
x 99 MICIN(CODEC)
x 100 BOOT_SEL0
x 101 BOOT_SEL1
? 102 PD23 LCD_SPL(LCD)
? 103 PD22 LCD_CLS(LCD)
x 104 VDDIO(3.3V)
? 105 PD25 LCD_REV(LCD)
x 106 GND
? 107 PD24 LCD_PS(LCD)
x 108 PD20 LCD_VSYNC(LCD)
x 109 PD19 LCD_HSYNC(LCD)
x 110 PD18 LCD_DE(LCD)
? 111 PD17 LCD_D17(LCD)
? 112 PD16 LCD_D16(LCD)
x 113 PD15 LCD_D15(LCD)
x 114 PD14 LCD_D14(LCD)
x 115 PD13 LCD_D13(LCD)
x 116 PD12 LCD_D12(LCD)
x 117 PD11 LCD_D11(LCD)
x 118 PD10 LCD_D10(LCD)
x 119 PD9 LCD_D9(LCD)
x 120 PD8 LCD_D8(LCD)
x 121 PD7 LCD_D7(LCD)
x 122 PD6 LCD_D6(LCD)
x 123 PD5 LCD_D5(LCD)
x 124 PD4 LCD_D4(LCD)
x 125 GND
x 126 PD3 LCD_D3(LCD)
x 127 PD2 LCD_D2(LCD)
x 128 PD1 LCD_D1(LCD)
P5-5 JZ4725B 判明ピン
バックライト:
o 57 PC13 PWM3/UART0_RxD(UART) H で ON
microSD センス:
o 54 PC20 WAIT(SRAM) L で microSD あり
JZ4725B 調査対象ピン
制御候補
? 48 PC15 PWM5/A18(SRAM)
専用機能
? 57 PC13 PWM3/UART0_RxD(UART)
? 58 PC12 PWM2/UART0_TxD(UART)
? 59 PC11 PWM1/I2C_SCK(I2C)
? 60 PC10 PWM0/I2C_SDA(I2C)
? 68 ADIN1
電源制御
x 84 PPRST(RTC)
x 85 PB31 WKUP(RTC)
x 86 PWRON(RTC)
GPIO 候補
? 54 PC20 WAIT(SRAM)
? 102 PD23 LCD_SPL(LCD)
? 103 PD22 LCD_CLS(LCD)
? 105 PD25 LCD_REV(LCD)
? 107 PD24 LCD_PS(LCD)
? 111 PD17 LCD_D17(LCD)
? 112 PD16 LCD_D16(LCD)
+ UART ?
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: jz_ubcomm
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(Linux)
DATE: 09/05/2010 23:25:40
-----
BODY:
条件がそろったので、そろそろ Linux の方に手を出していこうと思う。
まずは、ingenic から提供されている Linux をビルドしてみる。
だいぶ前に qi-hardware 経由で 取ったスナップショットだが、
をベースにすることにする。
kernel.org の linux-2.6.31.3 を展開した上に files-2.6.31.3-ingenic-r108.tar.gz を展開して、linux-2.6.31.3-ingenic-r108.patch.gz をパッチすればよかったはず。
次に config 。JZ4725B は、JZ4750L だと思うので、これを y にしている arch/mips/configs/f4750l_deconfig をベースにすることにして .config にコピー。
で、make menuconfig とかして make zImage とかすると なにか出来る。
ただし、f4750l は、評価ボードですらない よく分からない ものみたいなので、ビルドできただけでは 動かない。少しづつ修正していこうと思う。
修正 1) drivers/char/jzchar/Kconfig
JZ4750L だけ仲間はずれなので、追加しておく。
ここまでが準備。本題は コンソールドライバの作成。
USBBOOT に組み込んだプロトコルを使って コンソールの代わりをさせるためのドライバを作成しなくてはならない。
一から作るのは面倒だからベースとなりそうなドライバを探してみたところ bfin_jtag_comm なんてドライバがあることが分かった。
まずは、bfin_jtag_comm.c を jz_ubcomm.c にリネームして、drivers/char/jzchar に置く。
次に namespace だけ 変更。 変更するということは 命名しなくてはならない。"JZ USBBOOT COMMUNICATION CONSOLE DRIVER" ということで ファイル名を jz_ubcomm.c , prefix を ubcomm/UBCOMM にしようと思う。
で、drivers/char/jzchar の Kconfig と Makefile を bfin_jtag_comm とかを参考にしながら追加。
一応ビルドできることを確認。
ここまでが第二の準備。形式だけ整ったドライバが出来た。
いよいよ 中身をみて変更していく。
Linux とのインターフェイス
Linux とのインターフェイスには、3 段階ある。ひとつは通常の TTY 。もうひとつは、console としての登録。最後に 初期化完了前の インターフェイス。
ここが最も行数が多い。そして、元のドライバには全部揃っている。
通常の TTY として登録するには、struct tty_driver に必要なものをセットして、tty_register_driver() で登録する。
tty_driver には、関数テーブルもあって、open,close,write,flush_chars,write_room,chars_in_buffer,wait_until_sent といった関数を用意して 登録する。
コンソールとして登録する場合は、struct console に必要なものを セットして register_console() で登録する。必要なものの中には、TTY ドライバも含まれる。
初期化中のメッセージを 表示するには、struct console に 初期化中に使う関数をセットしなければならない。登録の方法は不明。
(作っておくだけでよいような気がするが詳しくは知らない)
基本は、TTY ドライバ。これがちゃんとできれば良さそうな感じ。
bfin_jtag_comm でどのような処理をしているか見てみる。
まず、jtag 経由の通信は、一度に大量のデータを扱うものではないようだ。よく分からないのだが、4 バイトづつデータをおくっている。
4バイトづつでは、大量のメッセージを直接扱えない。一旦バッファリングして、カーネルスレッドで徐々に送り出すようになっている。( 割り込みは使っていない )
USBBOOT では、バッファのサイズを 4KB にしているが もっと大きくもできる。大きなバッファを、USB で一度に 吸いだすようなことは問題ないが、stage2 の関数を定期的に call してやらないと USB の処理自体が止まる。また、ホスト側のプログラムが read してくれないと表示はできない。問題なのは PANIC 。カーネルが止まった後でも ポーリングがされないと USB が動かない。
このあたりの性質の違いを考慮すると
- console(TTY) への write は、直接 通信エリアのバッファーに追加していくようにして、ローカルなバッファは持たないようにする。
- カーネルスレッドは利用するが、メインは stage2 関数の ポーリングにする。
こんな感じで処理を作るのが良さそう。たぶんオリジナルよりさらに簡単な処理になるはず。
ただし PANIC 後どうするのか? これは調べないとわからない。
PANIC 処理について:
panic の本体は kern/panic.c
panic したしたあと、panic_notifier_list に登録されている関数を順次 call するようになっている。-- これは 1 回限りなので使いにくい。
あと、panic_blink という 関数ポインタがあり、reboot するまでの間 1msec 間隔で call するようだ。
この関数、誰も使っていないように見える。これを使おう。
とりあえずは、make zImage で、なにか出来た。一応 途中まで動く可能性があり、メッセージが見える可能性があるはじめてのものだ。
だが、成功すればメッセージが出るが、ダメだとなにも起きない。-- これでは デバッグのしようがないのだ。
メッセージが出るまで、デバッグのために使えるのは、LCD のバックライトのみ。
バックライトを使ってどこまで動いたか調べないと。
まずは、起動シーケンスのおさらい
1) zImage の自己解答後の最初のエントリ -- kernel_entry (arch/mips/kernel/head.S)
2) start_kernel (init/main.c)
3) setup_arch (arch/mips/kernel/setup.c)
setup_arch に来るまで、結構 start_kernel で関数を call している。
さて、backlight を点灯させる関数を作成して、start_kernel の先頭で call するようにしてみた。
... NG 。まだ、マシン依存のコードは動作していないにも係わらず 点灯してくれない。そうなると .. zImage の作り方自体に問題があるのかも知れない。
まず、zImage は 0x80600000 にロードする。それは正しい。で、zImage が動作すると、decompress_kernel を call して、カーネルを展開する。
展開アドレスは、vmlinux の 先頭アドレスと同じ 0x80100000 。展開が終わったら vmlinux の開始アドレスである kernel_entry に制御を渡す。
これだと 0x80100000 - 0x80600000 の間に、カーネルと initrd が入らなければならないという条件になる。そして (展開後の)カーネルのサイズは、4MB +α。なかなか厳しい。
心配なのは、スタックはどこに取られるのか? stage2 を壊してしまわないかということ。zImage の 展開部分は、スタック用のエリアを配列で持っているから大丈夫。vmlinux 自体も似たようなもので、init_thread_union (arch/mips/kernle/init_task.c) 上に取られる。
もうひとつ心配なのが、上記の アドレスやサイズが正しく設定されているかどうか。
zImage のスタートアップでは、
la a0, __image_begin
la a1, IMAGESIZE
la a2, LOADADDR
という風に ビルド時に定数が埋め込まれる。この値が実際どうなのか というと次のようになっていて正しい。
-DIMAGESIZE=1792767
-DKERNEL_ENTRY=0x800144f0
-DLOADADDR=0x80010000
initrd のサイズを気にする必要はあるが、正しそうだ。
もうひとつ可能性がある。点灯は一旦するが、初期化で消されてしまうケース。(どういうケースはよく分からないが)
とりあえず 点灯後無限ループしてみたところ ... start_kernel の先頭にいれた jz_backlight() で点灯した。
-- とりあえずは、Linux に制御が渡ったので 一安心。
次に setup_arch を call する所まで行くかどうかを試したが.. ダメ。
どこまで動くか jz_backlight() を入れる場所を変更しながら 動かしてみると ..
:
boot_init_stack_canary();
cgroup_init_early();
local_irq_disable();
early_boot_irqs_off();
early_init_irq_lock_class();
-- OK
lock_kernel();
tick_init();
-- OK
boot_cpu_init();
-- NG
page_address_init();
-- NG
printk(....);
setup_arch();
static void __init boot_cpu_init(void)
{
int cpu = smp_processor_id();
/* Mark the boot cpu "present", "online" etc for SMP and UP case */
set_cpu_online(cpu, true);
set_cpu_present(cpu, true);
set_cpu_possible(cpu, true);
boot_cpu_init() は、このようになっている。smp_processor_id()は、0 に展開されている。set_cpu_online() などの関数は、ただの bit 操作。最終的には set_bit() になる。
この程度のものがなぜ動かないのか?
ちょっとここで スナップショットを取っておく。動かないけれども 。
(つづき)
page_address_init() も単に データの初期化で、普通なら 動作するのが期待できるコード。で、次に最初の printk を call している。そうすると既に console の最初の初期化が call されていることになる。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: Jz47xxの話題
STATUS: Draft
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(CPU)
DATE: 09/07/2010 16:31:32
-----
BODY:
前に JZ4760 が出るらしいと書いたが、qi-hardware が管理している ingenic のコード を見ると JZ4760 に加えて JZ4810 というのが登録されている。
で、f4810_defconfig を見ていると CONFIG_JZ_FPGA=y となっている。JZ4750L と同じく FPGA で検証するための ものなのだろう。
f4760_defconfig も同じなのだが、JZ4760 は cygnus と lepus という 2 つのボードの定義がある。作成されたのは割と最近で そろそろ動くチップが出てきたということか。
JZ4760 や JZ48xx は、どうも 90nm プロセスらしい。いままで 180nm プロセスばかりで 世代は進んでも基本の性能は同じという状態だったが、ようやく高性能なものが出てくる。
周波数は 600MHz - 800MHz らしいし、DDR2 も使えるようになるのだろう。JZ47xx から JZ48xx になると なにか新しい要素が追加されるのだろう。... といっても 一般的には目新しいものではないはずだ。3D グラフィックとか CODEC とか なんかそういうものに違いない。
ちなみに、最大周波数は カーネルのコードを見てもわからない。
Current and max frequency is determined by u-boot
なんて記述がある。
将来の話はおいておいて、JZ4755 の話題。-- いままで、JZ4725B の話題ばかりだったので、ちょっと書いてみようと思う。
これは、taobao で買える。たとえば ここなら 1 個あたり 25 元 (1元=14円として 350円)。パッケージは、0.4mm ピッチの LQFP176 。個人の電子工作で扱うには厳しいが ギリギリ可能な範囲。
このチップは、Dual-Core らしいのだが、1 つは DSP 的に使う。どうやって そのもうひとつを使うのか分からないのだが、どうも qi-hardware のメーリングリストに入って ある人にリクエストすれば NDA なしでもらえるらしい。
qi-hardware が入手しているドキュメントには、
XBurst Microprocessor Core, Rev 1.0, Apr 2007, 62 pages
Jz4725B Data Sheet, Rel July 7, 2009, 37 pages
Jz4725B Programming Manual, Julz 14, 2009, 529 pages
Jz4720 Data Sheet, Rev 1, Jun 2008, 37 pages
Jz4740 Data Sheet, Jun 2007, 35 pages
Jz4740 Programming Manual, July 22, 2009, 539 pages
Jz4750 Data Sheet, Apr 2009, 40 pages
Jz4750L Data Sheet, July 17, 2009, 37 pages
Jz4750L Programming Manual, July 14, 2009, 570 pages
Jz4755 Data Sheet, July 7, 2009, 33 pages
Jz4755 Programming Manual, Jul 22, 2009, 732 pages
というのがあるそうだ。この情報は、google のキャッシュに残っていたもの。Jz4750L 単独で Data Sheet やら Programming Manual があるのが??。
それはともかく、JZ4755 は、DSP 側で DCT/IDCT やら 何やらやらせてようやく 720p + α (768p) の動画が再生できるそうだ。
まぁ 最新の PMP と比べると見劣りするわけだが、JZ4725B よりは I/O が多いし、より多目的に使えるのだと思う。
ここでは、各種インターフェイスについて JZ4725B との差をメモしておこうと思う。
- SDRAM : JZ4725B は 16bit 幅だが、16bit/32bit 幅を選択できる。
- MSC1(SD/MMC インターフェイス): JZ4725B は、1bit データ幅 で SD/MMC の性能を使い切れない。JZ4755 は 4bit データ幅。
ちなみに、SDHC の最高周波数は 50MHz だが 80MHz まで使える (SDHC UHS-I対応?)
あと、NAND FLASH と排他で使える MSC0 というのもある。(JZ4725B も同等機能 ) こちらも 最大80MHz 。
- SPI/SSI インターフェイス(最大 50MHz)。JZ4725B にはない。MSC1 と共用なので実質使えないかも。
- タッチパネルインターフェイス。JZ4725B にはない。
- サウンド出力 (カップリングコンデンサレス) -- よくわからないが、BTL 出力ができるらしい。JZ4725B には BTL はない。
- AC97/I2C 出力。JZ4725B にはない。
- カメラ入力。JZ4725B にはない。
- TV 出力。JZ4725B にはない。
- UART JZ4725B と同等の 1ch だが、JZ4725B は GPIO に使われてしまうケースが結構ある。JZ4755 は実質使える。
- CS2/CS3 : NAND FLASH/SRAM の チップセレクト 要するに NAND FLASH/SRAM を合計 4 つまで付けられる。JZ4725B は 2 つまで。
ちなみに DINGOO A320 などで使われている JZ4740 は BGA なので比較してもどうかと思う。比較するなら 同じ BGA の JZ4757 になる。-- こういうのは電子工作でどうにもできないので、あまり興味がなかったりする。
むしろ比較になるのは、同じ LQFP176 の SH7264 とかになるのかも知れない。
SH7264 にあって JZ4755 にないインターフェイス。
- CDROM インターフェイス -- SRAM インターフェイスの先に多少の回路を付ければ JZ4755 でも CDROM ぐらいは接続可能
- CAN インターフェイス
- SSI JZ4755 は実質使えないが SH7264 は使えるのかも。
- 内蔵 SRAM
- RSPI (シリアルROM からの ブート_?)
- 多ch のシリアルインターフェイス。
- Video IN -- これはカメラインターフェイスと同等?
- USB OTG -- JZ4755 は高速なデバイスを接続できないのが弱点か。
いろいろ違うのだが、重なる部分もあるような印象。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: オーバクロックとメモリ性能
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(CPU)
DATE: 09/08/2010 23:46:20
-----
BODY:
dingoo A320 で使われているのが、Jz4740。180nm プロセスルールで、仕様では、360MHz。DINGUX では、クロックを変更できて 400MHz 前後まではクロックを上げられるらしい。メモリは、SDRAM 32bit アクセス。SDRAM のクロックは、CPUのクロックの 1/3 が普通で、400MHz なら 133MHz 。
それに対して、Jz4725B は、160nm プロセスルール。 データシートではやはり 360Mhz になっている。メモリは、SDRAM 16bit アクセスしかできない。
前に書いた内容の焼き直しだが、同じクロックの場合、どれぐらい性能的に不利なのか考察してみよう。
Jz47xx の場合、キャッシュラインのサイズは Iキャッシュ/Dキャッシュ共に 32 バイトなので、通常 32バイト単位での READ/WRITE になる。
-- Linux で CONFIG_MIPS_L1_CACHE_SHIFT=5 という風に設定しているし、32 バイトなのは間違いない。
そして、Programmers Manual に CPU がどのようなアクセスをするかの記載がある。
SDRAM は、1,2,4,8-beat の burst アクセスができる。32bit アクセスなら 1 回のアクセスで済むわけだ。16 bit アクセスの場合 たぶん 2 回の 8-beat アクセスをする。ただし、2 回目は 同じ ROW なので少し速い。
CL=3 だとして、32bit アクセスの場合 32 byte の READ/WRITE は 17 クロック。16 bit だと 17 クロック+12 クロック。
そうすると 32 bit アクセスの Jz4740 に対して Jz4725B は最大 (17+12)/17 = 1.7 -- 1.70倍 遅いことになる。ただし、まったくキャッシュにヒットしない場合の性能差。
では、実際はどれぐらい違うのか?
仮に n% ヒットするとする。
100 命令実行し キャッシュがヒットした場合 1 クロックで実行できているとする。(100 - n) 個の命令は、メモリアクセスの分待たされるとする。そして、メモリアクセスは、追い出して読み込む動作とする。さらに、SDRAM のクロックは、CPU クロックの 1/3 に設定されているとする(CPU 400MHz に対して SDRAM 133MHz)。
100% なら 100 クロックで終わるところが...
32 bit アクセスの場合は、17 * 2 * 3 * (100 - n) クロック 余分に時間がかかる。 16 bit なら 29 * 2 * 3 * (100 - n) クロック。
n が 99 なら 202:274 。99.9 なら 110.2:117.4。
n が 90 しかないとすると 1120:1840 。
動画の再生のヒット率は、かなり高いとは思うが、よくは分からない。仮に 90% だとすると Jz4725B は、1.64 倍 遅いことになる。99% でも 1.36倍 。
さて、最大のクロックは プロセスルールに比例するとする。
Jz4740 の 180nm に対し Jz4725B は 160nm だから Jz4740 が 400MHz なら Jz4725B は 450 MHz 。1.13 倍 速い。
早く動かしたいソフトのヒット率が 99% ぐらいでも相殺できない。-- Jz4725B を dingoo A-320 並にするのは難しそう。
いろいろ眉唾ものの仮定を入れているので、結論も眉唾だが、必要なデータが揃えば大分分かってくるとは思う。-- ただ、そのときは結果が分かっているはず。上記の考察は結果を分析するとき役にたつ程度だろう。
他の見方をしてみよう。90% しかヒット率がなければ、32 bit アクセスでも 1120 クロックかかる。これが 99% にできると 202 クロックで済む。実に 5.5 倍も速くなるのだ。
32bit アクセスでも メモリアクセス 1 回が 102 CPU クロック。チューニングに於いては、まずメモリアクセスを減らすのが重要。
さらに言うと十分チューニングされた(動画とかエミュレータ)ソフトなら 90% しかヒット率がないということはないはず。もし、90% だったら オーバクロックに期待するより真っ当にチューニングしたほうが良い。
ただし、ブラウザとか巨大ソフトは例外。遅くともチューニングしきれないし.. そもそも動かそうとするのが間違っていると考えることにしよう。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------
AUTHOR: すz
TITLE: configのチェック
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 1
ALLOW PINGS: 3
PRIMARY CATEGORY:
CATEGORY: Jz47xx(Linux)
DATE: 09/09/2010 22:24:08
-----
BODY:
Jz4725B 用のカーネルを作るには、正しい config ファイルが必要。他の Jz47xx のボードの config は参考にするものの、自分用の config を 作っていかないといけないと考えている。
とりあえずは、f4750l_defconfig をベースにしているが、デバイス周りは全然だめだと思うし、参考にする ボード を 1 つ決めておこうと思う。
Jz4730 のものは古そうなので除外。Jz4750D は laptop みたいなものがターゲットのように見えるので除外。Jz4750 は良さそうだが、機能が多いので むしろ Jz4740 のほうが良さそう。
というわけで、Jz4740 に どういうものがあるかまずチェック。
- leo SUSPEND, UBI が disable
- lyra SUSPEND, UBI が定義されている。
- pavo SUSPEND, UBI が disable
- virgo SUSPEND が disable
どういうボードなのか理解したわけではないが、lyra を基準にしてみようと思う。
まずは、 f4750l のチェック。あとで lyra との違いをチェックしようと思う。
一般的な設定:CPU関係
CONFIG_JZ_FPGA=y -- JZ4725B は FPGA ではないから 外したいが、なにをするのに使っているかチェックした後にする。
CONFIG_CPU_HAS_PREFETCH=y -- prefetch を持っているが果たして性能が上がるのか? SDRAM は、BANK を使いこなすと アクセスをオーバラップさせてスループットを向上できるが、Jz47xx では BANK が上位ビットで 使う物理ページがランダムにならないと オーバラップできない。その条件は 使っているうちにランダムに近くなるのでクリアできそうだが。そもそも Jz47xx のメモリコントローラに オーバラップできる機能があるのか疑わしい。
それでも どうせアクセスするようなデータなら prefetch しておくのは有効かも知れない。Linux が動いた後の話になるが、外してどう性能が変わるか見てみたい。
CONFIG_HZ_100=y -- HZ=100 なのか。これも覚えておこう。
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_PM=y
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
# CONFIG_HIBERNATION is not set
このあたり、サスペンドがちゃんと動くかどうかをチェックする時のキーワード。
ところで、SIMD 命令の XMUが使う 専用のレジスタについて、カーネルは感知しないことになっているようだ。CONFIG がなにもない。-- 1 プロセスが使うことのみが前提で、それを守る仕組みもないから自己責任で使うことになる。
Linux カーネルで でコンテキスト切り替えしてくれたら、描画ライブラリでも使えるし、カーネルでのメモリコピーにも使えるのに とか思う。
ただ、フローティングポインタレジスタの制御ように、最適化しないと使わないプロセスの プロセススイッチが遅くなってしまう。
でも、そういうコードを作るには、情報が足りていない。
一般的な設定: Linux
FAT_DEFAULT_CODEPAGE=437
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_936=y
# CONFIG_NLS_CODEPAGE_932 is not set
このあたり修正しておくべき。
CONFIG_NET
NET は入れる。いれないのは論外だと思うが、例えば lyra は入っていなかったりする。
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not set
CONFIG_ROOT_NFS=y
CONFIG_NFSD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPOC=y
CONFIG_SUNRPC_GSS=y
CONFIG_RPCSEC_GSS_KRB5=y
NFS は使いたいが、V3 までで良い。V3_ACL もいらない。
NFS を root にできるようにしておく。
NFSD/LOCKD は module で良い。
# CONFIG_CIFS is not set
CIFS は、モジュールで いれておく。PC 側で共有設定すると、PC のファイルにアクセスできる。こちらの設定は、実際に使っている PC 用のものを参考にする。
次に、lyna で定義されているが、f4750l で定義されていないもの。調べかたには、diff に対して lyra 分を grep し、 "=y" を grep する観点と f4750l 分を grep し、"not set" を grep する観点の 2 つがある。
まずは、lyna で "=y" となっているもの
CONFIG_JZ4740_LYRA=y
CONFIG_SOC_JZ4740=y
CONFIG_KALLSYMS_ALL=y
CONFIG_FREEZER=y
CONFIG_PM=y
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
ここまで 一般的なもの。SUSPEND 関連はコピーする。KILLSYMS_ALL は 勝手に y になった。
CONFIG_MTD=y
CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_BLOCK2MTD=y
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_JZ4740=y
CONFIG_MTD_NAND_MULTI_PLANE=y
CONFIG_MTD_HW_RS_ECC=y
CONFIG_MTD_NAND_IDS=y
ここまで MTD 関連。Jz4750 用も見た上でいれる。
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_EVDEV=y
PSAUX は入れないが 他は入れておこう。
CONFIG_RTC_JZ=y
CONFIG_JZCHAR=y
CONFIG_JZ_TPANEL_ATA2508=y
CONFIG_WATCHDOG=y
CONFIG_JZ_WDT=y
CONFIG_FB_JZLCD_4730_4740=y
CONFIG_JZLCD_AUO_A030FL01_V1=y
CONFIG_I2S_ICODEC=y
このあたりは JZ4750 も見ていれてみる。
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_JZ4740=y
CONFIG_JZ_UDC_HOTPLUG=y
CONFIG_UDC_USE_LB_CACHE=y
USB GADGET は入れる。
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_JBD=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_DEBUG=y
CONFIG_YAFFS_FS=y
CONFIG_YAFFS_YAFFS1=y
CONFIG_YAFFS_YAFFS2=y
CONFIG_YAFFS_ECC_RS=y
CONFIG_YAFFS_AUTO_YAFFS2=y
CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK=y
CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
CONFIG_DEBUG_FS=y
EXT3 は入れる。UBIFS は モジュールにする。YAFFS2 は入れない -- できるだけ多くのエリア を UBI にする予定で、UBI の上に YAFFS2 は載らない。載るのは一般のFS か UBIFS 。
CONFIG_REED_SOLOMON=y
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
これはなんだろう?
f4750l で not set として出てくるもの。上記を除く。
# Thu Sep 9 12:49:31 2010
# CONFIG_JZ4740_LYRA is not set
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
#
# Networking options
#
(net 関係は 量が多いのでザックリ省略)
lyra は NET なしらしい。NET なしではちょっと困る。
# CONFIG_FB_JZ4750_LCD_USE_2LAYER_FRAMEBUFFER is not set
# CONFIG_FB_JZ4750_TVE is not set
# CONFIG_FB_JZ4750_SLCD is not set
# CONFIG_JZ4750_LCD_SAMSUNG_LTP400WQF01 is not set
# CONFIG_JZ4750_LCD_SAMSUNG_LTP400WQF02 is not set
# CONFIG_JZ4750_LCD_FOXCONN_PT035TN01 is not set
# CONFIG_JZ4750_LCD_INNOLUX_PT035TN01_SERIAL is not set
# CONFIG_JZ4750_LCD_TOPPOLY_TD025THEA7_RGB_DELTA is not set
# CONFIG_JZ4750_LCD_TOPPOLY_TD043MGEB1 is not set
# CONFIG_JZ4750_LCD_TRULY_TFTG320240DTSW_18BIT is not set
# CONFIG_JZ4750_LCD_TRULY_TFT_GG1P0319LTSW_W is not set
# CONFIG_JZ4750_SLCD_KGM701A3_TFT_SPFD5420A is not set
# CONFIG_JZ4750D_VGA_DISPLAY is not set
LCD は、JZ4750 用は別のものとしてあるらしい。後回し。
# CONFIG_USB_G_SERIAL is not set
あたらしい USB GADGET 。モジュールで 入れる。
-- ただ USB GADGET は 1種類しか使えないはず。そうなると G_ETH しか選ばないのだが ...
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_LZO is not set
# CONFIG_CRC16 is not set
作ってみた。myconfig-100908.gz
これについてのメモ:
- CONFIG_JZ_FPGA=y を外し忘れてた。
- CONFIG_J4750L_NS3K とかボードの定義はしたものの使ってない。-- 出来たら同じバイナリにしたいし削るかも。
- CONFIG_JZ_UDC_HOTPLUG=y は関数が足りないのでリンクできず外した。
- CONFIG_KEYBOARD_JZ=y は コンパイルエラーになる。
- CONFIG_MTD_NAND_MULTI_PLANE=y をしてるのは少数だったので外した。
- CONFIG_MTD_HW_RS_ECC=y とか ECC 関係はよくわからない。とりあえず JZ4750 の方を参考にして定義した。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
--------