テーマ: Orange Pi PCを使ってみる
開催日時 2015年11月27日(金曜日)18:30 ~ 19:30
場所: | 東京体育館第四会議室 |
---|
なお今後の開催日時は以下を予定しています。
- 12/11(金曜日) 18:30-19:30
(場所はいずれも東京体育館第四会議室です)
概要
9月の月例会でChopstxをCortex-A7に移植するという話が小島さんから発表されました。この会でRaspberry Pi 2は、(目的によっては良い製品ですが)自由ソフトウェア運動の観点では残念ながら、ブートローダ、(カーネルやブートローダを作るに必要な)技術情報、一部の必須のドライバの点において「プロプライエタリ・プラットフォーム」と言わざるをえない、と論議されました。
関連して、FSIJでは、かつてKurobox/ProのCPUのバグを突き止めたり、玄柴の配布を発売当時(主に会員に)斡旋したりしてきました。最近ではwandboardとFreescaleのCPUはいいのではないか、と議論しています。
今回はCortex-A7ということでハードルが高いのですが、Orange Pi PCとAllwinner H3が、完璧からは程遠いですが、比較優位として、まぁマシなプラットフォームでしょう、という話をします。
JTAG debuggerをつないで4つのコアをデバッグしてみる、また、間に合えば、Chopstxを動かすデモが見られるでしょう。
話題提供
- g新部 裕
まだ充分ではなく残念な点
- Allwinner H3の技術情報開示は必ずしも充分ではない。
- linux-sunxi.org に解明された情報、マニュアルなどはある。
- u-bootのsource codeがある。
- Linux 3.4のsource codeがある。
- bootの仕組みも(必ずしもベンダから積極的に開示されているわけではないが)解明されている。
- 回路図の取得にはユーザ登録が必要。
- Allwinner H3のMMCのハードウェアは高速な転送モード(UHS)をサポートしていない模様。
良い点
- www.orangepi.org からたどると有用な情報にたどり着ける。
- 上記から、すぐ使える u-boot, Linux kernel, Debian のimageが提供されている。
- JTAG debuggerをつなげて動かすことができる。
- Allwinnerからは(他の半導体ベンダのように)意地悪をするという感じはない。
注意点
- Cortex-M3などを使っていると半導体ベンダからのマニュアルにドライバを書くのに充分な情報とサンプルコードが提供される、と思いがち。
- Cortex-A7のSoCでは、それは期待しても無駄。u-boot, Linux kernelがsourceであれば御の字。マニュアルは詳細は記述されずレジスタのアドレスと概念図程度である(それでもあればマシ)。
- Cortex-M3などを使っているとJTAG debuggerは当たり前と考えるが、そもそもCortex-A7のSoCではデフォルトで使えなくなっているものもある。
- Cortex-A7(など)のSoCでは、ベンダ(の周辺)がブートローダ、カーネルなどを提供するからユーザは黙って使えという向きもある。ユーザが別のカーネルを用意することは前提とされてなかったり。
Orange Pi PCのJTAG接続
手持ちのOlimexのARM-USB-TINYをつないでOpenOCD 0.9.0で動きました。
Allwinner H3の設定で PA0, PA1, PA2, PA3をJTAGに使う(デフォルトはMMCと重なっている)。 PA0:JTAG_MS, PA1:JTAG_CK, PA2:JTAG_DO, PA3:JTAG_DI の役割。
接続は下記のとおり。
Orange Pi PC extention pins Vcc3V3 1 2 3 4 5 6 7 8 GND 9 10 JTAG_CK 11 12 JTAG_MS 13 14 JTAG_DI 15 16 17 18 19 20 21 22 JTAG_DO ... ARM-USB-TINY pins 1 2 Vapp 3 4 GND Target DI 5 6 JTAG_MS 7 8 JTAG_CK 9 10 11 12 Target DO 13 14 ...
接続の様子。

scriptは sun8iw7.cfg として下記のとおり:
# Orange Pi PC telnet_port 4444 gdb_port 3333 adapter_khz 300 if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { set _CHIPNAME sun8iw7 } if { [info exists DAP_TAPID] } { set _DAP_TAPID $DAP_TAPID } else { set _DAP_TAPID 0x5ba00477 } jtag newtap $_CHIPNAME dap -expected-id $_DAP_TAPID -irlen 4 -ircapture 0x01 -irmask 0x0f set _TARGETNAME0 $_CHIPNAME.cpu0 set _TARGETNAME1 $_CHIPNAME.cpu1 set _TARGETNAME2 $_CHIPNAME.cpu2 set _TARGETNAME3 $_CHIPNAME.cpu3 target create $_TARGETNAME0 cortex_a -chain-position $_CHIPNAME.dap -coreid 0 target create $_TARGETNAME1 cortex_a -chain-position $_CHIPNAME.dap -coreid 1 target create $_TARGETNAME2 cortex_a -chain-position $_CHIPNAME.dap -coreid 2 target create $_TARGETNAME3 cortex_a -chain-position $_CHIPNAME.dap -coreid 3 target smp $_TARGETNAME0 $_TARGETNAME1 $_TARGETNAME2 $_TARGETNAME3 $_TARGETNAME0 configure -event gdb-attach { cortex_a dbginit } $_TARGETNAME1 configure -event gdb-attach { cortex_a dbginit } $_TARGETNAME2 configure -event gdb-attach { cortex_a dbginit } $_TARGETNAME3 configure -event gdb-attach { cortex_a dbginit }
コマンド起動は、こうします。
$ openocd -f interface/ftdi/olimex-jtag-tiny.cfg -f sun8iw7.cfg