2012-02

2012-01 LPC1114 RX62N SH2A


Tommy february^6

先月の成果

  • ubuntu11.10でXen-hypervisorを動かしてみた。
  • gccでSH2AのFPUを動かしてみた。



持ち越し案件

  • USBオシロみたいな奴。
  • SH2AのFPU使いこなし。
  • cdctool用ファーム更新。 MARY MB RX62N SH2A
  • Flash書き込みルーチンは書いた。RAM転送もOK.
  • Erase出来ない
  • Verifyでエラー
    • データシートの読み間違い(別デバイス用だった)と思い込みがあった。
  • boot機能が未だ。 --- NVICがベースアドレスを変えられないのでbootは断念。
  • Cortexは関数アドレスが奇数なので、RAM転送したり、RAM上関数への関数ポインタを生成するときはかなり神経を使う。おまけに割り込み禁止忘れてたし。
  • MinGWクロスgccのビルド。



今月はいろいろ消化できそうもないかも。


今月の謎

  • Android 4.0 ICSのintel版って実用性無いのか?
    • VMWareではLANが使えない。SDカードエミュは使える。
    • intel版はまともにサポートする気あるのだろうか?
  • ---> VirtualBox上で動くICSはLANも繋がり、一応実用的だった。

もっと読むか : Android


  • VineLinuxをXen-hypervisorで動かす技。
    • これはVineLinuxのisoイメージからインストールすれば出来そうな気がするけれど、面倒くさくてまだ試していない。 ---やってみたけどhvm(Hardware Virtual Machine)は難しい。xm console出来ないので、シリアルかVNCで接続するらしい。でも繋がらない。
  • しかたがないので、実マシンにVineLinux4.2を入れて、dom-U対応カーネルに差し替えてみるつもり。
  • 問題は、いまどきの実マシンにVineLinux4.2を入れられるかどうか。これも実は難易度が高い。(SATAとか(IDE互換モードですら)認識しないかも)


  • Xenをいろいろ使ってみているけれど、かなり便利。
    • dom-Uの再起動が速い。shutdown -r して10秒後にはもうlogin出来る感じ。
    • rootパーティションが4GBの単なるファイルで済むので環境のバックアップや移動が楽。/homeとか実働データは別の仮想HDDにするか実パーティションを割り当てるとかすればデータだけはdom-0側で管理も出来る。
    • 準仮想化(pvm)は軽い。schrootとそんなに変わらないくらい。vm側にメモリーをくれてやる必要があるけれど今時のマシンは充分余裕があるので無問題。
  • なんとlive migration(乗り移りだな)とかも出来るらしい。






煙草箱サイズの超小型PC

「プログラミングを楽しむPC」BASICやアセンブラを「CPU内蔵」で搭載、x86系

>予価は42,200〜45,800円

  • たけーよ。
  • 実用性皆無だろ。
  • ついにUSBハブと同サイズのPCが出来た、といえるのかもしれない。
  • >将来のPCはUSBハブサイズに。
  • たしかに実現したけど、FreeDOSじゃ弱いな。せめてAndroid ICSのx86版くらいは載せておいてくれ。
    • --->というかXPまでのOSは動くらしいので、普通にubuntuを導入すれば良いのか。
  • x86ではないけれど、ARM搭載でわずか2000円のRaspberry Pi というコンピュータも。





Android-x86 ICS build on ubuntu11.10(x64)




ところで、NHCという仮想イメージ(VMWare/VirtualBox/物理sda1とか)の相互変換を行なってくれるとってもありがたいソフト が存在する。

  • http://www.geocities.co.jp/SiliconValley/2994/tool/nhc.html
  • これを使用して、SDカードもLANも使えるAndroid-x86 ICSのVMLiteイメージをVMWareに変換して使ってみた。
  • 残念ながらLANは使えなかった。何故だろう?
  • 例えばこの変換したイメージをubuntuなどのVMにsdbとしてマウントさせて中を見ればなにか分かるかな?


  • VMLiteのICSでは、ALT+F1も使えなかったし、Shellアプリも入っていなかった。
  • 素直にVirtualBoxを使うべきなんだろうけど、・・・ううむ。仮想化ソフトの二重インストールはやりたくなかったり。(喧嘩しそうだし)





多元宇宙

TED

  • ちょっと面白かった。
  • 宇宙の寿命は10の10乗の120乗(年)もあるのに、どうして人間はわずか140億年と言うビッグバン後の若き宇宙に存在しているのだろうか。
  • 答えはビデオで。
  • TEDの講演ビデオはどれもなかなか面白いので、見ていて飽きない。





Atom D2700搭載マザーボード(ASRock)

8480円らしい。


  • IDEに関しては外付け3.5inch USBケースで、たまにIDE/SATA両対応のがあるのでそれを確保しておくべき。(レガシーな人たち用)
  • Floppyは、もう救済策がない。今も5inch Floppyのサルベージ需要があって、少し困っているところ。
  • 3.5inch FloppyならUSB外付けを確保しておくとか。


  • Atomみたいなローパワーなシステムこそ、普通にレガシー要らないような気がするんだが、
  • もしかしたら古いPen4とかAthlon時代の産業用マザーの置き換えでレガシーポート需要があるのだろうか?(だったらIDEも要りそうだけど)
  • 大体、RS-232Cって何に使ってるんだろうか?
    • ChaNさんのAVRライター。(これは一時期重宝していた。USB-シリアルだとだめだ)
    • モデム?いまどきモデムはないだろうし、あっても大抵USB。
    • まさかのTTY接続?300bpsとか
    • よほどのことがないかぎりUSB-シリアル変換で事足りる。
  • パラレルは、まさか太古のプリンター使うわけないよね。(ドライバーもなさそうだし)
    • ByteBlasterとか
    • CaetlaとかPS2メモカ吸いとか?


問題は、WindowsXPやそれ以前のOS用のデバイスドライバーが入手しにくいことらしい。

  • では、一体何故レガシーポートを載せるのか意味が分からない。





VineLinux4.2 on ububtu11.10

  • Vine単体では、実G41マザーにインストールして動いた。(SATAはIDEモード)
  • けれども、ubuntuからhvmやpvmで起動する方法がわからん。(bootがないとか怒られる)
    • pygrubの設定はしてみた。
  • もしかして、kernelは仮想HDDの外側に置いてそれを指定するのか?


  • ネット検索で引っかかるXENの解説ページはXEN3.0とか古いのが多い。(たとえばpygrubの位置とか違うし)

知りたいのは、

  • hvmやpvm用のxm-configの書き方というかtemplate
  • 実働しているLinuxをxen上にもってくる正しいやり方。(phy指定とddコピーしたfileの双方)
  • 実働しているLinuxがVineみたいにレガシーだった場合のカーネルの差し替え方。
  • あるいはhvmでの動かし方。

intel VT-xをサポートしているCPUって、新し目のCore2のハイエンドかSandyBridgeでないとだめみたいだ。

  • 古いCore2ではcpuinfoにvmx(VT-x)が出てこないでござる。
  • VT-xがあるやつは、特権Ring-0よりも強いVMXrootというモードを持っていて*1、VMモニタはそこを使っている。
  • VT-xがサポートされていないと、Windows7ProfessionalでのXPモードも使えなかった。
  • しかし、今ではその条件は緩和されているらしい。http://northwood.blog60.fc2.com/blog-entry-3659.html
  • VMWarePlayerの場合は特権Ring-0のCPU動作を高速なソフトウェアCPUエミュレータで実行する(!)らしいので元からVT-xは要らないようだ。

intel VT-x対応CPU表 発見: http://www.pc-koubou.jp/info/win7_vt.php





VineLinux4.2 on ububtu11.10 解決編

  • VineLinux4.2をインストールするためには、G41マザーとかIDE互換モードのSATA設定とか必要無かった。
virt-install \
 --hvm \
 --name=vine4 \
 --ram=512 \
 --vcpus=1 \
 --file=/mydir/domains/vine4/disk.img \
 --file-size=4 \
 --nonsparse \
 --network=network:default \
 --network=bridge:xenbr0 \
 --cdrom=/mydir/Vine42-i386.iso \
 --os-type=linux \
 --os-variant=generic24 \
 --vnc \
 --keymap=us
  • これだけで良いみたい。

イメージ作成

  • disk.imgはubuntuインストールの時に作った適当な奴をコピーしたけれど、ddで作ってもOK。
$ dd if=/dev/zero of=disk.img bs=4096k count=0 seek=1024
  • Vine42-i386.iso は、VineLinux配布サイトから落としてくる。


前準備

  • インストール前に必要なパッケージ。
    # apt-get install virtinst virt-viewer vnc4server
  • vnc4serverは、手元のLinux GUIでやる時は不要。リモートの(というかモニタを繋いでいない)Linuxでやるときには入れておく。
  • リモートのLinuxをWindowsからGUI接続する。(手元のLinuxマシンなら不要)
    $ vncserver
     ここで一時的なパスワード8文字を入れる。
  • すると、Linuxマシンの IPアドレス(例えば192.168.0.2)の後ろに:1 とかを付けたvncserverが立ち上がるので、そのアドレス
    192.168.0.2:1
  • に対して、WindowsからVNC Clientで接続する。パスワードはvncserver起動で与えたパスワードを使う。

そして、virt-install ・・・ 上記 ・・・を実行。

  • LinuxのコンソールがGUIに変わって、おなじみのVineLinuxインストーラーが起動する。
  • GUIでやるのは面倒くさいので、boot: のところで linux text と打ち込む。
  • あとは普通にインストール。
  • 再起動すると、VNC内でテキストモードのVineLinuxが起動。
  • 普通に外部LANも接続出来た。


まとめ。

  • ubuntu11.10のXenは便利だし、標準パッケージで付いてくるのでインストールも楽。
  • 完全仮想化dom-Uを作るのはネットからVineLinuxなどのisoファイルを落としてきて、virt-installするだけでいい。簡単。
  • vncビューワーはあらかじめインストールだけしておけば、virt-installが勝手に立ち上げてくれる。(GUIの場合)
  • GUIでないリモートマシン上のubuntuならば、ssh経由でvncserverを立ち上げて、WindowsのVNCでubuntuに接続して、そこからvirt-install出来る。


残った疑問

  • hvmをpvmに移行するやりかた。





uCLinuxについて調べ中。

  • ソースは? たぶん http://www.uclinux.org/ でいいのかな。
  • H8/300のページによると、最低要るのが 1MB ROM + 1MB RAM もしくは 2MB RAM らしい。
  • だけど、httpdとか考えてるなら16Mとか32M要るらしい。
  • ちなみにInterface 2012-03は購入済み。

kernel2.6ではuCLinuxが統合されている???

なんでMMUなしのLinuxがいいんだろう?とか疑問を持っていたけれど、InterfaceによるとMMUのオーバーヘッド が無い分速いということらしい。うーむ。

まあ、USBホスト付きのマイコンボードとかEthernetサポートしたいとかいう場合は、わざわざUSBホスト書いたりRTOS+TCP/IPスタック買って来るよりも普通にLinuxでいいじゃんというのは有りだと思った。





uCLinux とりあえず、走らせてみればいいんじゃない。

  • べつにわざわざ高価な基板を買ってこなくてもすぐに試せる。
  • 本家のこのページから、gdb(+patch)とkernelとuserlandをDLする。
  • 適当に用意した32bitなLinux(もちろんVMWare上でも充分)に展開。
  • patch適用後、configure,makeしてgdb linux-2.0.xxx を起動し、
    target sim
    load
    run
  • たったこれだけ。ものの3分で試せる。

わかったこと。

  • Kernel-2.0系では、
    • gdbに与えるメモリーは2MB。kernel codeは500kB,dataは200kB程。
    • フリーエリアは1.3MBほど。
  • Kernel-2.4系では、
    • gdbに与えるメモリーは4MB。kernel codeは800kB,dataは200kB程。
    • フリーエリアは3MBほど。

結論として、やっぱりRAMは2MBくらいは最低必要(2MBでhttpdとかは論外なのでもっと積むこと)。あと、ユーザーランドやファイルシステムはSDカードかなんか に入れておけばGB単位で安価に済みそう。


試してしてみた感想。

  • これ、gdbのsimで充分だわ。
  • gdbには、CPU simulatorが含まれているので、各種CPU用のイメージで試せる。
  • ハードウェア作ったりメモリーの配線したりしないでいい。
  • (必要なら)メモリーはいくらでも増やせる。(ホストPCの許容範囲内でだけど今のPCは普通に2Gとか4G。そもそも4GもがARMの上限だし。)
  • 最大のメリットが、いつでもgdbデバッグ出来る

だってgdbの中で動いてるんだもの。





PC9801の5インチフロッピーを読む

  • ドライブはPC98のTEACのものをそのまま互換機に接続。
  • 実は5FDのケーブルを掘り出すのに苦労した。
  • WindowsXPでは、自分でフォーマットしたフロッピーはちゃんと使えるのだけれど、
  • PC9801で書いた昔のフロッピーを入れても無限リトライを繰り返すばかり。
  • 適当な吸出しソフトでもだめだった。
  • 自分でフォーマットしたフロッピーのプロパティでは1.20MB(2HC、512B x 15セクタ/トラック)になっている。
  • ところが、PC9801のフロッピーは1.25MB(2HD、1024B x 8セクタ/トラック)なのだった。


しかたなく互換機にWindows98をインストール。Pentium4(intel 865G)だったけれど、Windows98用のドライバーCD を探し出すのも苦労した。

  • 読める、読めるぞ。(by ロムスカ)
  • やっぱりWin95/98/Me系列でないとPC9801の5インチ2HDは読めないようだ。
  • intel 865GにインストールしたWindows98はかなり不安定で、ちょっとなにかすると止まったりブルースクリーンになったりする。各種ドライバーインストール中にも5回くらいリセットかけた。
  • WindowsXPでは、そんなときはCTRL+ALT+DELなのだが、Windows98ではCTRL+ALT_DELは問答無用で再起動になる。
  • よくこんなOS(Win98のこと)を使いこなした時代があったなぁ・・・と感慨にふける。


  • VMWarePlayer上で飼っている(といっても全く使っていない)Win98はそんなに不安定ではない。せいぜいインストール中に1回フリーズする程度だ。
  • 5インチ媒体は何百枚も持ってたけどほとんど捨てたなぁ・・・CP/M-80のコレクションも相当あったんだが。






Xen: centos4.8 on ubuntu11.10

  • 完全仮想化したVineLinux4.2をpvmに移行(準仮想化)する試みは失敗した。
  • というのも、kernelのパッケージファイル作成がうまく行かないからだ。
    • kernel2.6.16のソースパッケージを拾ってきて rpm -bb rpm/SPECS/*.spec を実行してはみるのだが、
    • ビルドの途中で、*.i386.*というファイルが無い!と抜かす。
    • そこに行ってみると、i586とi686はあるのだがi386というファイルは無かった。
    • よくわからないけれど、今更直す気はさらさらない。 ---というかrpmのversion依存地獄はもう手がつけられないので。
    • 素のカーネルtarballをDLしてきてビルドする勇気もなかったりする。




・・・

  • なので、VineLinuxに近いCentOSをpvmで入れて、ユーザーランドだけVine4.2に置き換えようという無謀な計画を立ててみた。
  • ついでにCentosのdom-Uも手に入るし。

(1)まず、CentOSのisoファイルをどっかから拾ってくる。

 CentOS-4.8-i386-binDVD.iso 

(2)それをcloopでapacheの公開ディレクトリのどっかにマウントする。

# mkdir /var/www/html/cdrom
# mount -o loop CentOS-4.8-i386-binDVD.iso /var/www/html/cdrom

(3)ddで4GBの仮想HDDを作る。

dd if=/dev/zero of=/mydir/xen/domains/centos/disk.img bs=4096k count=0 seek=1024

(4)virt-installを実行する。

virt-install \
--paravirt \
--name=centos4 \
--ram=512 \
--vcpus=1 \
--file=/mydir/xen/domains/centos/disk.img \
--network=network:default \
--network=bridge:xenbr0 \
--location=http://192.168.1.1/cdrom/ \
--keymap=us
  • 192.168.1.1というのはこのubuntuのipアドレスだけど、CentOSのdvdをマウントしたファイル(isoではなくてdvdマウントされた全ファイル)が見れるhttp公開サーバーならどこでもOK。
  • localhostだと失敗する(vm側の127.0.0.1になって、ubuntu側を参照してくれない)
  • あとは普通にlinux text と入れて、textインストールを実行する。
  • とにかく、Xenのvirt-installは速い。pvmだろうがhvmだろうがあっという間だし。
  • vmのリブートも速いので満足

もう実マシンでのLinuxインストールには戻れないと思った。


  • CentOS4.8だと、何もしないでpvmインストール出来たのは良かったけれど、Linuxカーネルはちょっと古かった。
    vmlinuz-2.6.9-89.ELxenU
  • まあいいか。






これはひどい:柏市周辺在住のアイドルユニット『Hot Spots』のオーディションが中止に!

  • http://rocketnews24.com/2012/02/07/180169/
  • ホットスポットといえば福山雅治のNHK番組最後の楽園。多様な生物が集中して棲息する場所のことだったんだよ。3月10日までは。
  • いつから放射能用語に変わったんだよまったく。

すべて東電のせいでこうなってしまった。

これはもっとひどい:虚構新聞より

新ユニット「GKB47」がついにデビュー!

  • http://kyoko-np.net/2012012501.html
  • 政府のネーミングセンス悪すぎ。
  • というかゲートキーパー=門番だろ。
  • ゲートウェイサーバーのDNS名かお前は?
  • さらにベーシックが理解不能だ。ゴキブリは関係ないとしても。

ほんとにこんなユニットがデビューしたら嫌だな。集まりそうだけど。





HDDかと思った?残念!オーディオアンプでしたーっ!






Xen: VineLinux4.2 on ubuntu11.10 リベンジ

  • 完全仮想化したVineLinux4.2をpvmに移行(準仮想化)する試みの続き。
  • kernelのパッケージファイル作成がうまく行かない。
    • kernel2.6.16のソースパッケージを拾ってきて rpm -bb rpm/SPECS/*.spec を実行してはみるのだが、
    • ビルドの途中で、*.i386.*というファイルが無い!と抜かす。
  • これは、こうすれば解決
    $ rpm -bb --target i686 rpm/SPECS/kernel-2.6-vl.spec
  • そして、rpm/BUILD/kernel-2.6.16/linux-2.6.16/以下を見る。
  • XEN関係のconfigが一切見当たらない。
  • ということは、CentOSの2.6.9のビルドはXENのパッチを独自に当てたものだったのか。


  • ちなみに、CentOSの2.6.9-XENカーネルをVineに入れてブートしてみたのだが、
    • hvmだとgrubがvmlinuzを認識しない。(gzipフォーマットはだめなのか?)
    • pvmだとpyGrubがうまいこと起動してくれるのだが、/dev/以下のspecialファイルを作ってくれない。(STATIC devfsだと抜かす)
    • /dev/を空にしてもだめだった。たぶん/lib/以下のどっかも持ってこないとだめなんだろうなぁ・・・(/lib/modules/は当然持ってきている)


  • centosのvmディスクからvineのvmディスクにファイルを移す技も覚えた。
    • これは、別のubuntuのvmのconfigファイルのdiskセクションにxvdbやxvdcを追加して、別のvmをマウントすればいい。
      disk = ['file:/mydir/xen/domains/oneiric/disk.img,xvda,w'
      ,'file:/mydir/xen/domains/centos/disk.img,xvdb,w'
      ,'file:/mydir/xen/domains/vine4/disk.img,xvdc,w']
    • こんな感じだ。
    • あとはubuntuのvmを起動して、適当なディレクトリにマウントするだけだ。

VineLinux4.2のカーネルパッケージビルド。

  • XENに対応していそうなrpmを取ってくる。
  • 適当にVineLinuxのftpサイトから取得するか、/etc/apt/source.listを一時的に4.2 --> 5.2へと書き換えて
    # apt-get update
    # apt-get install module-init-tools
    $ apt-get source kernel
    $ rpm -bb --target i686 rpm/SPECS/kernel-2.6-vl.spec
  • 終わったら、source.listを4.2に戻しておくのを忘れないようにする。

しかし、この方法でもmodule-init-toolsがインストールされていませんというおかしなエラーを吐かれてビルドが途中で止まる。






Xen: VineLinux4.2 on ubuntu11.10 暗礁に乗り上げた

[手順概要]:Vine Linux 4をDomainUで実行させる方法については、以下のページが妙に詳しい。

■ FC6パッケージの利用方式

  • 上記ページのとおりに、FC6を使うやり方を試してみた。
  • FC6のdvdからのXen dom-U(pvm)インストールは全く問題なく出来た。(CentOSと同じ手順にて成功)
  • そこで得られたvmlinuzと、いくつかのrpmインストールを上記ページのとおりにVine4.2に移してみたところ、
  • pvmの起動はOK。
  • kudzuはsegmentation faultで死ぬが先へ進む。
  • Linux起動の最後のフェーズで無限に待ちになってログインプロンプトまで来ない。
  • pvmのdom-U起動はFC6やCentOSに比べてかなり(1/10くらい)遅い。最終フェーズでさらに遅くなる感じ。理由は不明

迷宮入りか?


知らなかったんだけど2007年にxensourceはcitrixに買収されてしまったらしい。

  • そのせいか、上記ページのxensourceで公開されている(という)カーネルが入手できない。
  • FC6で試すしかない。
  • 3回くらいVine42をクリーンインストールしてやり直しても症状は変わらない。
  • Vine42にある HAL layer がいけないのだろか?
  • linuxカーネルって、一枚岩かつ供給元(kernel.org)が同じなので(ディス鳥間で)割と差し替えが利くと思っていたがそうでもないのね。
  • 起動シーケンスでデバイス登録したり/dev/以下にスペシャルファイル置いたりはユーザーランドにも絡むのかな。

そろそろ飽きてきた






Linuxテキストエディタ:64bit版utf8対応jed-ja

  • jed-jaというのはVineLinux4.2のパッケージに入っているmicro-emacs的なテキストエディタのこと。
  • 最近のLinuxに入っているjedパッケージはutf-8限定になっていて、eucやsjisが扱えない。
  • 逆にjed-jaではutf-8が扱えない。
  • なので、jed-ja(というかslang-1.4.6)にutf-8を追加してみるテスト。

しめしめ。うまくいった。

  • 3年前くらいにutf8対応をやろうとしたときは、到底無理、と思っていた。
  • でも、今回はすんなりうまくできた。
  • slangはstatic-linkになるので、先にslangからmake installする必要がある。
  • ターゲットはx64で作ってみたが、普通にconfigureできるので、i386でもarmでもOKなはず。


ダウンロードはこちら

  • jed内部的にはeuc扱いのままなので、eucになくてunicodeで追加されたような漢字は化けてしまう。--昔のサクラエディタと同じような現象。
  • ふつうにソースをエディットする分には大丈夫だと思う。










Xen: VineLinux4.2 on ubuntu11.10 xensourceから取得したカーネル

探せばあるもんだ。

いわれたとおりにやってみた。

  • 途中でxm consoleが切れる。vncviewerで見ると、仮想hdd側に同名カーネルがないというエラー。
  • 仮想HDD側にもちゃんとコピーして再度トライ。

成功した。

VineLinux4.2 on ubuntu11.10 xensourceから取得したカーネル xen-3.0.3_0-install-x86_32p.tgz でのpvm起動に成功!

よくやった。

そして、現実のVineLinux4.2をpvmに移行する実験も成功した。

まとめはこちら: Xen-hypervisor






RAM Vectorという変な実装をやってみたり。

  • M68000とかH8とかでは、ROM上のベクターを変更できないとブートローダーが書けない。
  • というか書いてもアプリ側が割り込みを使用できなくて困る。
  • しかたがないので、ROM上のベクターから一旦RAMにジャンプして、もいっかいROMに戻ってくるような変な実装をするのだ。
  • そして、ブートローダーで起動したアプリの(仮想的な)Vectorテーブルを見て、そのテーブルの飛び先に飛ぶように、RAM上のjump命令を再編集するのだ。
  • これをやると、割り込み応答が2 jump程遅くなってしまう。
  • そして、ARMだと絶対番地指定jumpがないので、そもそも実装できない。--レジスタを壊さずに飛べない。
  • こんなことさせずにハードウェアでNVICくらいちゃんと実装しといてほしい。





<前の月次の月>


*1 というかVMXroot,VMXnon-rootが特権RINGと独立に設定できるらしいので