MIPS CI20一覧

PowerVR SGX*** のカーネルドライバのソースコード

結構触っていない期間が長くなってしまいましたが MIPS Creator CI20 の最近の様子はどうだろうと思って調べてみました。http://elinux.org/MIPS_Creator_CI20 にアクセスしてみたら、実は既にこのボードって3世代くらいになっているようです。形的には最新の世代の正方形に近いものがいいなぁと思ってます。しかし未だに日本の発売はなさそうで、残念。

今の最新では Debian 8 の環境開発が進んでいるようで、SGXドライバが使えないという話は昔の話となりつつあるような感じです。そして自分が使っていたシステムイメージなどは CI20_Distros_Legacy のページに行ってしまっていました。
そしてこのページには Debian 8 Jessie 部分で、”Graphics acceleration will not work (the powervr drivers currently don’t work with xorg 1.16).” なんて記載が残ってました。現行のページでは release note にもそんな話は見当たらないので、そこそこ使えたりするんじゃないでしょうか。そのうち時間できたら試してみるかもしれません。

その一方で驚いたのが CI20_Dev_Zone のページです。こちらは通常は覗くことがないかもしれません。自分もたまたま発見したのですが、このページの後半で Linux Kernel のビルドに関しての説明があるあたりで驚きました。
 それが “Building GPU Kernel Module from sources” という部分です。 PowerVR の SGX のドライバは今まではバイナリ提供でソース類を明かさなかったのですが、コレを見るとカーネル部分のドライバソースも公開されているようです。これらに関してはこちらの CI20-SGX_kernel_moduleのページのようです。ここでは 3.0.8 でも 3.18 カーネルでも対応してるっぽいです。

 ちょっと興味があったので中身を開けてみたら、 pvrsrv のソースっぽいものがあったり、各PowerVR のチップ(sgx530, sgx535, sgx543, sgx544, sgx540)といったもののレジスタのヘッダがあったりととてもおもしろい気がします。このあたりのチップは他の組込ボードでも使われているケースがあるので、割と使えるものな気がしています。

OpenGL も動くグラフィックスドライバがソースコード付きの公開というのは自分は初めて見た気がします。これはとても興味深いですね。(ただしOpenGLの解釈部分などはここじゃないようですが)


MIPS Creator CI20 で OpenGL 使えるようになった

以前に試したときには OpenGL 2.1 がまともに使えなかったのですが、 2015/01/15 に公開されたベータバージョンのイメージからは使用可能になったようです。

以前のものは OpenGL 2.1 対応といいつつもなぜかそれ以降の拡張も使用可能であるとAPIの結果は返ってきたのですが、今回改めて確認してみると正しい範囲になったような感じです。

基本的には OpenGL 2.1 の必須+浮動小数テクスチャへの書き込みサポート&MSAAのレンダーターゲットを使用可能といった範囲になっているようです。以前使えるように見えたインスタンシングやジオメトリシェーダーが使えなくなってしまった点は残念な気がします。

イメージを適用する

基本的には配布サイト(http://www.elinux.org/CI20_Distros) から該当イメージをダウンロードし、SDカードに dd コマンドを使って書き込んで、 MIPS Creator CI20 に差し込んで eMMC の内容を更新という手順で OK です。
 ただなるべくなら eMMC を常用したくないので SDカードからの起動および通常使用としたいところです。そこで入手したイメージから起動SDを作る方法を示したいと思います。

起動SDを作るためには、以前の記事内容(MIPS Creator CI20 を SDカード起動にする)を参考にします。
この説明の課程で出てくる uImage をどのように作るかが今回は問題になりますが、 rootfs2015-01-15_16_49_47.tar の中に含まれている /boot/vmlinux.img をその uImage の代用とします。それ以外は同様で、以下のコマンドのようにしてSDカードを構成します。

# ./make-flash-card-ci20-sd.sh /dev/sdX vmlinux.img rootfs2015-01-15_16_49_47.tar

問題なければ、書き込んだSDカードで起動できると思います。 SDXC の 64GB のものを使用しましたが、速度は出ませんがうまく動いているようです。

コンパイラ

今回の 20150115 版のカーネルおよびイメージでうまく動くことが確認できたので、クロスコンパイラを作り直すことにしました。
MIPS Creator CI20 用の環境としてクロスコンパイラは整備されていないようだったので、 Ubuntu 用, MinGW 32bit/64bit 用として3種類のアーカイブを用意することにしました。
こちらのページで配布していますので、必要な方はこちらからどうぞ。


クロスコンパイラ (MIPSCreatorCI20 / Jetson TK1)

生成したクロスコンパイラのアーカイブを置いておきます。
不具合等があるかもしれませんので、使用する際には自己責任でお願いします。
シンボリックの解決の問題で、 tar アーカイブを展開する際にエラーメッセージが出るかもしれませんが、問題ないかと思っております。

Jetson TK1

Ubuntu 上のクロスコンパイラはメーカーが公式に用意してくれているため、生成していません。

MIPS Creator CI20

補足

これらのコンパイラは crosstool-py というツールを用いて、Ubuntu 上で作成しております。
また MinGW 版は Windows7 SP1 にて動作確認を行っております。


あけましておめでとうございます

2015年明けましておめでとうございます。今年も本ブログをよろしくお願いいたします。
折角なので、福袋的なものを用意してみました。 MIPS Creator CI20 用、Jetson TK1 用のクロスコンパイラのアーカイブです。
Ubuntu で作成しましたが、 Ubuntu 用と Windows MinGW (32bit) 用の2種類準備してみました。


Download Jetson TK1 GCC 4.8 for Linux (465MB)
Download Jetson TK1 GCC 4.8 for MinGW (582MB)
Download MIPS CI20 GCC 4.8 for Linux (279MB)
Download MIPS CI20 GCC 4.8 for MinGW (376MB)

新ファイルイメージ公開のため、クロスコンパイラの作り直しを行いました。こちらのほうをご参照ください「クロスコンパイラ (MIPSCreatorCI20 / Jetson TK1)

不具合等残っているかもしれませんが、よろしければご利用くださいませ。


CI20でOpenGL 2.1 使えないかも

MIPS Creator CI20 で OpenGL 2.1 のサポートとあるのですが、手元で試している限りではうまく動きません。各OpenGLの関数はポインタがとれているので動きそうなのですが、肝心のシェーダーのコンパイルで SIGSEGV が発生してしまいます。
そのときの様子が以下のようになります。

glXGetProcAddress による方法や、直接関数宣言させる GL_GLEXT_PROTOTYPES など試してみましたが、症状は変化せずでした。
GLEWによる拡張のサポートを見ると、 OpenGL 3.3 機能の一部まで extension があるので、使えたら面白いのになと思うだけに残念です。


MIPS Creator CI20 を SDカード起動にする

MIPS Creator CI20 には eMMC があり、ここからデフォルトでは Debian が起動するようになっています。しかしご存じの通り書き換え回数問題があるため、出来るだけ SDカードなど交換がきく外部ストレージからブートさせたいと思います。
今回、それがうまく出来たので手順を記事化しようと思いました。

必要なもの

  1. UbuntuなどのLinux環境。仮想マシンでも可。
  2. 上記の環境で使えるカードリーダー。SDカードの書き込みを行います
  3. MIPS用のクロスコンパイラ

手順

Ubuntuで作業することを想定しています。まずは必要なツールをインストールします。

https://github.com/ZubairLK/ci20_other_files のリポジトリをクローンして、作成のためのスクリプト等を取得します。

この中に、工場出荷状態のカーネル(uImage_ci20_production_20140625)も含んでいるので、まずはこちらを利用させてもらいます。
そして、elinux.org から取得できる rootfs-20140625.tar をダウンロードしておきます。

そろったら、dev以下にアクセスするので root で作業します。とはいっても便利なスクリプトなのでやることは以下のように簡単な手順です。
環境変数ではクロスコンパイラのプレフィックスやパスを設定しています。

うまくいけば書き込みが成功します。エラーが出た場合には足りないものをインストールなどして下さい。

MIPS Creator CI20 に書き込んだSDカードをセットして、ジャンパーピンをSDカードからのブートに切り替えて下さい。
この状態でリセットして起動させると SDカードから起動してくると思います。物によるとは思いますが、結構遅いです・・・。

起動してディスク容量などを確認してみると以下のように明らかな差異を確認できました。
sdboot-debian-ci20


MIPS Creator CI20が発売になったらしい

とうとう強化版Raspberry PI といえる MIPS Creator CI20 が発売になったようです。残念ながら日本への発送はまだ出来ないようですが。
お値段としても、1万以下になりそうですし、これはなかなか強力な選択肢となりそうです。

http://blog.imgtec.com/powervr/mips-creator-ci20-development-board-now-available

入手性がぼちぼちよくなっていきそうなので、先日のクロスコンパイラの需要も高まってくれるとちょっと嬉しいなと思います。

CI20 での glShaderSource の問題

手元の環境で OpenGL の API を使った場合に glShaderSource 実行で不正終了してしまうという問題に出遭っています。 EGL と GLES 2.0 で初期化して、同じ関数呼び出した場合には問題なかったものです。こういった症状と PowerVR SGX540 というモバイル向けチップという点から、 OpenGL への対応はドライバでやれてないのかなと思っていました。しかしながら、上記のスペックシートを見ると、 OpenGL 2.1 への対応が記載してあります。ハードでは対応しているということですので、再度チェックしてみようと思います。


ようやくクロスコンパイラ出来た

ここ最近ひたすらクロスコンパイラの準備に励んでいた理由の1つに、Imagination Technologies の Creator CI20 が手元に届いたから、というのがありました。そしてようやくですが Linaro の環境を真似して、 Creator CI20 用の環境を準備してみました。うまく動かない部分もあるかもしれませんが、ひとまずは下記に示すように Windows 環境での開発が出来そうなところまで到達出来たと思います。

ci20-on-eclipse

eclipseの基本的な設定は、Jetson TK1のときと同様の手順で行ってあります。1点違うのは今回は .gdbinit ファイルを作成したことです。この gdbinit ファイルの中では、 CI20 から取り出した include, lib らなどの場所、いわゆるsysrootの設定が記載してあります。

これらのビルド済みツールチェインを以下の場所で公開してみます。また使用しているCI20用のsysrootらについてもこのツールチェインの中に含めてみました。
eclipse らで使用する際には、このsysrootを指すように gdbinit を設定してください。

Download for MIPS Creator CI20 Toolchains(Pre-Built)


Download (ci20_mipsel-unknown-linug-gnu_mingw32.tar.xz)
上記の場所にファイルをおいてあります。


新ファイルイメージ公開が公開されたため、クロスコンパイラの作り直しを行いました。こちらのほうをご参照ください「クロスコンパイラ (MIPSCreatorCI20 / Jetson TK1)

不具合とかあっても対処できませんので、利用は自己責任でお願いします。

蛇足的メモ

結局 crosstool-ng の中でカナディアンクロスでコンパイラを作成しました。これでもクロスの gdb 作成過程で expat のライブラリが見つからないとかでエラーになる始末で、最終的にはあきらめました。結果、MinGW の環境で gdb だけはクロスターゲットのものを make して同梱する形にしました。強引な感じで心配ですが、とりあえず動いているようなので様子見です。

カナディアンクロスの際には単に build, host, target を指定するだけでは終わらず、ビルドホストからhost, target の両クロスコンパイラがまずは必要になるようです。そのため linux -> mips, linux -> mingw32 といったツールチェイン&コンパイラを作成してから作業しました。今回の場合では linux -> mingw32 のクロスコンパイラを基盤に使用していくことになったので、これもまた crosstool-ng にて生成させることにしました。

外部ツールに頼ってしまっていますが、ようやくやりたいことが実現したので満足です。より詳細な内容は今回の手順の中身を追っていけば把握できるでしょうし、そのうちこの中身を手作業で追いかけてみたいなとは思います。