コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2015年12月11日 >>> 2015年11月28日
link もっと後

2015年12月11日

Androidは巨大な壁

自作エミュレータ、ARM9とはいえ、一応ARMをエミュレーションしているわけだし、いつかAndroidも動かせるだろうか?と思って、試しにAOSPをビルドしてみました。

生成されたイメージファイルを見てみると、アプリも何も入れていないのにsystem.imgが1.6GBもあります。

ちなみにVersatile PBのNANDは最大でも64MBですので、全くお話になりませんでした。eMMCに期待ですかね…。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2015/12/12 01:23)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年12月10日

光で測る

レーザー距離計(メーカーのサイトへのリンク)を買ってみました。BOSCHのGLM 50Cです。Amazonで1万5000円でした。もっと安い機種もありますが、どうせならスマホとつながった方が面白いだろうと思いBluetooth対応機種を選びました。

メタルの巻き尺と比べると、

  • 断然早い、1秒で計測
  • 自分から見えるところならどこでも測れる
  • 天井などの手が届かない高さも測れる
  • 角度計、水平器の代用もできる
  • 測定値を書き写す必要がない

測定値は本体に記録され、Bluetoothでスマホに飛ばして写真上に値を書き写すこともできます(要、専用アプリ)。

引っ越しや、新たに家具を買う時に非常に便利そうです。活躍の機会は遠いと思いますけどね…。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2015/12/12 01:01)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年12月9日

Flash ROMのエミュレーション

自作エミュレータ(リンク)にFlash ROMのエミュレーションを実装しました。

未実装だらけですが、mkfsしてmountするくらいなら、とりあえず動いています。今はリセットすると中身が消えますが、ファイルに読み書きするように変更したら、ストレージとして使えそうです。

バースト書き込みモードがあって高速と思われるIntelのNOR Flashをエミュレーションしていますが、速度的には残念な感じです。

flashへの書き込み速度
$ dd if=/dev/zero of=/dev/mtdblock0 bs=262144 count=10
10+0 records in
10+0 records out
2621440 bytes (2.5MB) copied, 17.980000 seconds, 142.4KB/s

ただ、これはエミュレータ自体が遅いのも原因ではあります。

ramfsへの書き込み速度
$ dd if=/dev/zero of=/tmp/aaa bs=262144 count=10
10+0 records in
10+0 records out
2621440 bytes (2.5MB) copied, 0.830000 seconds, 3MB/s

最速でもこれくらいにしかならないはずです。

作ってみて感じたこと

Flash ROMをエミュレーションしていて思ったのは、単純なだけに書き込みに関してはかなり非効率的なデバイスだということです。

Flash ROMは独立したコマンド線を持ちません。CPUはコマンドもデータも混ぜてバスにWriteします。WriteされたデータはFlash ROM側の状態によってコマンドと解釈されたり、データと解釈されたりする仕組みです。

書き込みの際は、出来る限りデータだけ送る方が効率が良いですが、Flashの場合は仕様上コマンドWriteやステータスReadを必ず挟まなければならないため、効率が悪いです。

Flashの宿命として部分的な書き換えが出来ませんので、書き換えの際は必ずErase -> Writeが行われます。Eraseは256KBなどの大きな単位なのに、書き込みは最大でも128バイトしか書けません。これも効率が悪い原因でしょう。

将来への展望

次に何か足すとしたら、eMMCにチャレンジしてみようと思います。ストレージ専用のI/Fならば断然効率が違う…はずです。たぶん。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2015/12/10 01:44)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年12月5日

Device Treeを試したらハマった

ARM Linuxのブート方法は3種類あって、一番古い方式はもう使われていません。自作エミュレータの内蔵ブートローダで使っているのは2番目に新しい、ATAGSと呼ばれる方式です。

最新の流行はDevice Treeを使う方式らしいので、内蔵ブートローダを改造して試してみました。が、なぜかカーネルが異常なアドレスにアクセスして死にます。アドレスを調べても、仕様書にないレジスタです。

発動条件を調べるとDevice Treeを有効(CONFIG_MACH_VERSATILE_DTを有効にする)にして、Device Treeを使ってブートするとハマるようです。

Linuxカーネルのコードを見てもATAGSで起動したときと、Device Treeで起動したときに実行されるコードがなぜか違うし、どういう意味なんだこれ…。

怪しいレジスタアドレス

Linuxカーネルのコードに出てくるレジスタ名で調べていたら、どうもmach-integratorにあるコードと同じレジスタアドレスを使っているように見えます。

下記がIntegratorのレジスタアドレス定義です。

arch/arm/mach-integrator/hardware.h

#‎define IRQ_STATUS 0
#define IRQ_RAW_STATUS 0x04
#define IRQ_ENABLE 0x08
#define IRQ_ENABLE_SET 0x08
#define IRQ_ENABLE_CLEAR 0x0C

#define INT_SOFT_SET 0x10
#define INT_SOFT_CLEAR 0x14

#define FIQ_STATUS 0x20
#define FIQ_RAW_STATUS 0x24
#define FIQ_ENABLE 0x28
#define FIQ_ENABLE_SET 0x28
#define FIQ_ENABLE_CLEAR 0x2C

で、下記がDevice Treeで起動したときのVersatile PB/ABのレジスタアドレス定義です。コピペだと思えるくらいに似ています。

drivers/irqchip/irq-versatile-fpga.c

#define IRQ_STATUS 0x00
#define IRQ_RAW_STATUS 0x04
#define IRQ_ENABLE_SET 0x08
#define IRQ_ENABLE_CLEAR 0x0c
#define INT_SOFT_SET 0x10
#define INT_SOFT_CLEAR 0x14
#define FIQ_STATUS 0x20
#define FIQ_RAW_STATUS 0x24
#define FIQ_ENABLE 0x28
#define FIQ_ENABLE_SET 0x28
#define FIQ_ENABLE_CLEAR 0x2C

#define PIC_ENABLES 0x20 /* set interrupt pass through bits */

こちらが正しいレジスタアドレス定義です。ATAGSで起動した場合はこちらのアドレスが使われます。

arch/arm/mach-versatile/include/mach/platform.h

#define SIC_IRQ_STATUS                  0
#define SIC_IRQ_RAW_STATUS              0x04
#define SIC_IRQ_ENABLE                  0x08
#define SIC_IRQ_ENABLE_SET              0x08
#define SIC_IRQ_ENABLE_CLEAR            0x0C
#define SIC_INT_SOFT_SET                0x10
#define SIC_INT_SOFT_CLEAR              0x14
#define SIC_INT_PIC_ENABLE              0x20    /* read status of pass through mask */
#define SIC_INT_PIC_ENABLES             0x20    /* set interrupt pass through bits */
#define SIC_INT_PIC_ENABLEC             0x24    /* Clear interrupt pass through bits */

私もそんなに詳しいわけではありませんが、Versatile AB/PB (DUI0225D) とIntegrator CP (DUI0159B) は全く別のボードだと思うので、恐らくDevice Treeに対応した人が間違えたのでしょうね…。

バグってるっぽい

気になったのでqemuで試してみましたが、やはりエラーが出ます。もしかして動作確認してないのかなあ??

しかしqemuさんは強い子でして、明らかに未定義領域にwriteされたのに警告を出すのみで、とにかく先に突き進んでくれます。それで結果的に動くからスゴイですよね…。

QEMUでversatile dt (device tree) を試してみた
$ qemu-system-arm -kernel linux-4.1.13/arch/arm/boot/zImage \
 -dtb linux-4.1.13/arch/arm/boot/dts/versatile-pb.dtb \
 -M versatilepb \
 -append 'console=ttyAMA0' \
 -nographic -serial mon:stdio

Uncompressing Linux... done, booting the kernel.
vpb_sic_write: Bad register offset 0x2c★★★エラー出てる★★★
Booting Linux on physical CPU 0x0
Linux version 4.1.13 (katsuhiro@vbox) (gcc version 4.9.2 (GCC) ) #4 Sun Dec 6 01:46:36 JST 2015
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00093177
CPU: VIVT data cache, VIVT instruction cache
Machine model: ARM Versatile PB

★を付けたところ(vpb_sic_write〜 と出ている部分)がqemuの警告です。

編集者:すずき(2015/12/06 03:11)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年11月29日

Facebookにも意外と書いていた

Facebookでの2013〜2014年辺りの書き込みを、この日記にも転記しておきました。

大した数ではないだろうと甘く見ていたら意外と数が多くて、結局50個近くのエントリを作る羽目になりました。うーん、疲れた……。

編集者:すずき(2015/12/01 01:09)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年11月28日

さようならnottv

ドコモ、NOTTV/モバキャスを2016年6月に終了 周波数は返還 - ITmedia Mobileを読んで。

ニュース見てnottvの開始時期いつだっけ?と思って調べたら2011年でしたから、約5年で終わってしまったんですね。

テレビ放送は放送局の都合で番組が流れるだけですが、VoDなら見たい番組をすぐに見ることができるわけで。どちらも有料なら、テレビ放送は選ばないですよね…。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2015/12/27 19:44)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2015年12月11日 >>> 2015年11月28日
link もっと後

管理用メニュー

link 記事を新規作成

<2015>
<<<12>>>
--12345
6789101112
13141516171819
20212223242526
2728293031--

最近のコメント5件

  • link 21年9月20日
    すずきさん (11/19 01:04)
    「It was my pleasure.」
  • link 21年9月20日
    whtさん (11/17 23:41)
    「This blog solves my ...」
  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」

最近の記事3件

  • link 23年4月10日
    すずき (11/15 23:48)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 24年11月6日
    すずき (11/15 23:47)
    「[Ubuntu 24.04 LTS on ThinkPad X1 Carbon Gen 12] 目次: Linux会社ではTh...」
  • link 24年11月11日
    すずき (11/15 23:26)
    「[Pythonのテストフレームワーク] 目次: Python最近Pythonを触ることが増えたのでテストについて調べようと思い...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 11/19 01:04