ODROID-U2を使ってみた

10月末くらいに購入していて、BeagleBone Blackとかを弄っているうちに死蔵扱いとなっていたODROID-U2にようやく火を入れました。

ODROID-U2は Cortex-A9 4コア 1.7GHz + Mali-400 という構成で、なんと私が使っているスマホに入っているSamsungチップ Exynos4412 を搭載しています。

ODROID-U2は本家のHardkernelから購入しました。$89.00です!! ついでにシステムコンソールを見るために、USB-UART Module Kitも購入しました。1.8Vですが、FT232RLにレベル変換を咬ました自作のがあるので購入しなくても良かったのですが、コネクタの事を考えると購入した方が手っ取り早いかなと。ドライバは自動的には入らないので、SILICON LABSのページからドライバを取得してインストールします。

それと、電源ですが、5V/2Aなのは良いとしてコネクタが外径2.5mm, 内径0.8mmという日本では馴染みのない経なのでこれも同サイトから購入しようとしたのですが、$9.00もするんです。それも日本のコネクタに合わせるのに変換が必要で不格好なのがやだなと思ったのと、ODROID-U2専用になってしまうというのがモヤモヤ感満載だったので何とか別で探す事に。でもね、なかなか無いのですよこれが。ようやく探しあてたのがshopUという店にあったUSB電源ケーブルです。USB-ACアダプタは持っていたのですが、ま~今後何かと使うだろうと5V/4AのACアダプタ(外径5.5mm, 内径2.1mm)とコネクタ形状を合わせるために変換ケーブルを同じ店で買いました。

ODROID-U2は購入検討の段階でGPU(Mali)のドライバがLinuxに対応している事を突き止めていたので、BeagleBone Blackよりは苦労しないのではないかと期待しながらポチリました。韓国→中国→日本の経路で送られてきましたが、中国あたりで1週間くらい停滞していて本当に届くのか心配になりましたが無事に送られてきました。

RIMG0536.jpg RIMG0537.jpg

ヒートシンクが矢鱈とデカイのは…それなりの理由がありました…。まっ、早い話、熱くなるんですね。1.7GHzってやはりそういう世界なのでしょう。333MHz,1コアでWin95を動かしていた時代が懐かしい。

USB-キーボード、マウス、HDMI変換器、microSD(16GB SDHC class10)は BeagleBole Black の時のを使い回しです。

問題のbootloaderとkernelとrootfs(Ubuntu)ですが、ODROID Forum に出ていたドライバと諸々をSDカード・イメージにしてくれた人(robroyhallさん)がいてそれをそのまま使わしてもらいました……リンクが切れてますね。こちらから入手可能です。Ubuntu-desktopはPreciseを使いたかったので、Ubuntu-12.11_FullyLoaded-U2-HDMI.20131001.img.xz をDLしてきました。このバージョン番号はLinaroの番号ですね。

SDカード・イメージは解凍して Win32DiskImager でmicroSDカードへ書き込めばできあがりです。解凍したイメージファイルが7GB強あります。8GBのカードだとぴったしなのかな? 8GBでは直ぐに足りなくなりそうな気がしますが…。領域はGParted utilityを使って使うカードに合わせてねって書いてありますしね。

ODROID-U2に周辺機器を繋いで、システムコンソールはPCで受けTeraTermで表示します。シリアルポートの設定は115200bps, 8N1です。で、ODROID-U2の電源をONにします。実際は電源SWはないので、ACアダプターを繋いでいる電源タップのSWをONにしました。SW付き電源タップは便利ですね。

RIMG0539.jpg

システムコンソールからU-boot→Linux kernel→kernel modele等のログが流れ、入力待ちになります。システムコンソール側はrootで自動ログインされてますね。GUI側はユーザID=linaroでパスワード入力待ちです。この初期パスワードは "linaro" なので入力してログインしたのが上の写真です。アルマジロの様な物体がいますが、これはUbuntu 12.04のコードネーム "Precise Pangolin" で、センザコウという動物です。ちなみに、使用しているLCDは LCD-10000VH です。小さいけど見やすい大きさのモニターが欲しかったのでつい買ってしまいました。

プリインストールされているブラウザがFirefoxとChromiumの2つあったので、両方でWebGLのデモページを閲覧してみました。FirefoxはWebGLを有効にしてやらないと閲覧できないのです。Chromiumはデフォルトで有効になっています。この性能は…こんなものなのかな…。それとも、ハードウェア・アクセラレートが出来てないのかな…。OpenGL ES の具合は glmark2-es2 を使えば分かりそうですが、まだ調べていません。

簡単に一通りの情報を見てみました。
長いログは途中省略してますが、一応4コアを認識はしているみたいです。Maliも動かしてる形跡があります。SDカードは領域拡張してないので、7GB強になってます。

# uname -a
Linux linaro-ubuntu-desktop 3.0.75-robroyhall-odroidu2 #1 SMP PREEMPT Sat Sep 14 21:11:09 PDT 2013 armv7l armv7l armv7l GNU/Linux

# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 0 (v7l)
processor : 0
BogoMIPS : 1992.29

Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0

Hardware : ODROIDU2
Revision : 0000
Serial : 0000000000000000


# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 ext4 6047300 5237132 502976 92% /
udev devtmpfs 993856 4 993852 1% /dev
tmpfs tmpfs 995056 8 995048 1% /tmp
tmpfs tmpfs 199012 840 198172 1% /run
none tmpfs 5120 0 5120 0% /run/lock
none tmpfs 995056 176 994880 1% /run/shm
/dev/mmcblk0p1 vfat 129039 13853 115186 11% /media/boot

# lsmod
Module Size Used by
cpufreq_ondemand 6667 1
fuse 62100 2
nbd 8507 0
joydev 8730 0
smsc95xx 12949 0
usbnet 15589 1 smsc95xx
usbhid 35136 0
nfsd 247896 11
exportfs 3472 1 nfsd


# dmesg
[ 0.000000] Kernel command line: console=tty1 console=ttySAC1,115200n8 fb_x_res=1920 fb_y_res=1080 hdmi_phy_res=1080 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro mem=2047M

[ 0.045000] CPU: Testing write buffer coherency: ok
[ 0.045000] CPU0: thread -1, cpu 0, socket 10, mpidr 80000a00
[ 0.045000] L310 cache controller enabled
[ 0.045000] l2x0: 16 ways, CACHE_ID 0x4100c4c8, AUX_CTRL 0x7e470001, Cache size: 1048576 B
[ 0.045000] CPU1: Booted secondary processor
[ 0.045000] CPU1: thread -1, cpu 1, socket 10, mpidr 80000a01
[ 0.045000] CPU2: Booted secondary processor
[ 0.045000] CPU2: thread -1, cpu 2, socket 10, mpidr 80000a02
[ 0.045000] CPU3: Booted secondary processor
[ 0.045000] CPU3: thread -1, cpu 3, socket 10, mpidr 80000a03
[ 0.045000] Brought up 4 CPUs

[ 3.199141] Mali: init_mali_clock mali_clock c066ef6c
[ 3.204231] Mali<1>: = regulator_enable -> use cnt: 1
[ 3.210078] Mali<1>: = regulator_get_voltage: 1050000
[ 3.216534] Mali: Mali device driver loaded

[ 3.629970] DRM: mali_platform_drm_probe()
[ 3.633213] mali_drm_init(), driver name: mali_drm, version 0.1
[ 3.639304] DRM: mali_driver_load()
[ 3.642553] [drm] Initialized mali_drm 0.1.0 20100520 on minor 0

Welcome to Linaro 12.11 (GNU/Linux 3.0.75-robroyhall-odroidu2 armv7l)

BeagleBone Blackの件もあるので、少しずつ触っていく事にします。

tag : ODROID-U2

ARM用コンパイラの対応アーキテクチャ

ARMは多数のアーキテクチャがあります。Cortex-Mシリーズだけでも 3(+2)種類です。なので、これらをサポートするコンパイラもそれぞれに対応していたり(していなかったり)します。現在自分が使っているコンパイラは何に対応しているのでしょうか? GCC系はコンパイル時のオプションや構成によって変化するので、何気に気になったので少し調査しました(といってもオプションで表示しただけ)。

Cortex-Mシリーズの比較はARM社の何処かのページに資料があったのですが、忘れてしまいました。同様の事がwikiに上がっていました。

arm_cortex_mx.png


今使っているコンパイラはLauchpadの物です。

$ /cygdrive/d/tools/Lauchpad/4_7-2013q3-20130916/bin/arm-none-eabi-gcc.exe --version
arm-none-eabi-gcc.exe (GNU Tools for ARM Embedded Processors) 4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 202601]
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ /cygdrive/d/tools/Lauchpad/4_7-2013q3-20130916/bin/arm-none-eabi-gcc.exe -print-multi-lib
.;
thumb;@mthumb
fpu;@mfloat-abi=hard
armv6-m;@mthumb@march=armv6s-m
armv7-m;@mthumb@march=armv7-m
armv7e-m;@mthumb@march=armv7e-m
armv7-ar/thumb;@mthumb@march=armv7
armv7e-m/softfp;@mthumb@march=armv7e-m@mfloat-abi=softfp@mfpu=fpv4-sp-d16
armv7e-m/fpu;@mthumb@march=armv7e-m@mfloat-abi=hard@mfpu=fpv4-sp-d16
armv7-ar/thumb/softfp;@mthumb@march=armv7@mfloat-abi=softfp@mfpu=vfpv3-d16
armv7-ar/thumb/fpu;@mthumb@march=armv7@mfloat-abi=hard@mfpu=vfpv3-d16


CodeSourcery版は以下のようになっていました。
ARMv7E-Mはサポートされていないので、少ないですね。

$ /cygdrive/d/tools/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI_201203_56/bin/arm-none-eabi-gcc.exe --version
arm-none-eabi-gcc.exe (Sourcery CodeBench Lite 2012.03-56) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ /cygdrive/d/tools/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI_201203_56/bin/arm-none-eabi-gcc.exe -print-multi-lib
.;
thumb;@mthumb
armv6-m;@mthumb@march=armv6-m
thumb2;@mthumb@march=armv7@mfix-cortex-m3-ldrd


Lauchpadの物のGCCへの設定オプションがインストールしたフォルダのreadmeに書いてありました。GCCのオプション内容だけ見ていると複雑そうに見えますが、下表を参考にすると一目瞭然ですね。親切心が伝わるreadmeだと思います。

--------------------------------------------------------------------
| ARM Core | Command Line Options | multilib |
|----------|--------------------------------------------|----------|
|Cortex-M0+| -mthumb -mcpu=cortex-m0plus | armv6-m |
|Cortex-M0 | -mthumb -mcpu=cortex-m0 | |
|Cortex-M1 | -mthumb -mcpu=cortex-m1 | |
| |--------------------------------------------| |
| | -mthumb -march=armv6-m | |
|----------|--------------------------------------------|----------|
|Cortex-M3 | -mthumb -mcpu=cortex-m3 | armv7-m |
| |--------------------------------------------| |
| | -mthumb -march=armv7-m | |
|----------|--------------------------------------------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 | armv7e-m |
|(No FP) |--------------------------------------------| |
| | -mthumb -march=armv7e-m | |
|----------|--------------------------------------------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=softfp | armv7e-m |
|(Soft FP) | -mfpu=fpv4-sp-d16 | /softfp |
| |--------------------------------------------| |
| | -mthumb -march=armv7e-m -mfloat-abi=softfp | |
| | -mfpu=fpv4-sp-d16 | |
|----------|--------------------------------------------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=hard | armv7e-m |
|(Hard FP) | -mfpu=fpv4-sp-d16 | /fpu |
| |--------------------------------------------| |
| | -mthumb -march=armv7e-m -mfloat-abi=hard | |
| | -mfpu=fpv4-sp-d16 | |
|----------|--------------------------------------------|----------|
|Cortex-R4 | [-mthumb] -march=armv7-r | armv7-ar |
|Cortex-R5 | | /thumb |
|Cortex-R7 | | |
|(No FP) | | |
|----------|--------------------------------------------|----------|
|Cortex-R4 | [-mthumb] -march=armv7-r -mfloat-abi=softfp| armv7-ar |
|Cortex-R5 | -mfpu=vfpv3-d16 | /thumb |
|Cortex-R7 | | /softfp |
|(Soft FP) | | |
|----------|--------------------------------------------|----------|
|Cortex-R4 | [-mthumb] -march=armv7-r -mfloat-abi=hard | armv7-ar |
|Cortex-R5 | -mfpu=vfpv3-d16 | /thumb |
|Cortex-R7 | | /fpu |
|(Hard FP) | | |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a | armv7-ar |
|(No FP) | | /thumb |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=softfp| armv7-ar |
|(Soft FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /softfp |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=hard | armv7-ar |
|(Hard FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /fpu |
--------------------------------------------------------------------

BeagleBone Black の OpenGL ES対応(Linux版) その1

先ずはじめに"その1"としたのは、まだ動作確認までできてないからです。とりあえず物は作れますが、今日は気力が尽きました…。

BeagleBone Black は XAM3359AZCZ という Core: Cortex-A8, GPU:PowerVR SGX 3D GFX(SGX530) とその他諸々を含んだプロセッサを積んでいます。GPUはOpenGL ES 1.1/2.0 のハードウェアアクセラレーションを可能としています。これは面白そうだと思ったのがそもそもの購入の動機なのです。が、結構ハマりにハマってます。

そもそも、ハマる要因となっているのが GPU 周りの実装はベンダー任せな所です。GPUのマニュアルなんて社外秘なんでしょう。見たことがありません。例え見られたとしてもドライバを作る何て相当な知識が必要です。Androidは4.2からOpenGL ESのハードウェアアクセラレーションが必須になっていたと思います。BeagleBone BlackのAndroid版も例外なくハードウェアアクセラレーションしています。しかし、私はAndroidに興味が無くLinuxのWindow上でOpenGLを使いたい…もっと言えば、ハードウェアアクセラレーションされた環境でWebGLを使いたいのです。自分で勝手にハードルをおもいっきし上げまくってます。

前述した様にGPU周りはベンダー(TI)任せなので、ベンダーからドライバが出てくるのを待つしかありません。ベンダー側も OpenGL ES 対応をうたっているので何もしないという訳にはいかずチョロチョロとドライバを出してくれます。ま~TIはましな方かな。

TIはつい最近、AM335xに対応したSDKを出してきました。以前から対応はしていたのですが、正式対応とは言い難かったのです。今回のドライバ(gfxsdk 4_10_00_01)は…ま~前回よりはましといった内容になってます。ただし、対応kernelは3.2.xなんですね。これは微妙。BeagleBone Blackのユーザ再度の開発はkernel 3.8.x以降で進んでます。RobertCNelsonさんがハッキングされてるのをベースにしてる訳で、有名所はeewikiでしょうか。

kernel 3.2.x と 3.8.x で大きな違いがあるの? と思われるでしょう。ま~これがあるんです。実際には 3.7.x の後半で DTB (Device Tree Blob)という考えが取り込まれていて、Linux kernelを実行する前の段階でこれに必要なデータを準備しておく必要があるのです。組み込み系では主にkernelコンパイル時にデータを作成してkernelを呼び出すU-bootでRAM上への配置を行いkernelに場所を教える。といったことをすることになります。このようにした背景に Linus Torvalds さんが怒り狂ったというのがあるとかないとか…。

国内外の掲示板を見てもBeagleBone BlackのGPUドライバ(SGXドライバ)がkernel 3.8以降に対応していない点が幾度も議論されています。TIへの問い合わせ殺到状態だったのです。BeagleBone Blackが発売(2013年4月22日)されてから半年、ようやく動きが出てきました。TIの中の人の良心なのか何かは分かりませんが、3.8以降に対応してくれるような動きが出てきたのです。こちらの質問の回答にTIの中の人(Prathap Srinivasさん)がパッチを公開されました。自分にとってこれは願ったりかなったりです。早速試して見ました……。

ベースはeewikiの内容です。それに Texas Instruments Wiki の Graphics SDK Quick installation and user guide の内容を入れ込みました。


***********************************
2013/11/04 時点ではバイナリを作っただけで動作の確認はしていません。
***********************************


先ずは、必要そうな物をDLしておきます。あっ、ちなみにクロスコンパイルはIntel Core i7 の Windows上にVMwareをインストールし、その上で Ubuntu 12.04 を走らせています。


$ mkdir bbb_sgx
$ cd ./bbb_sgx/
$ mkdir sgx_patch
$ cd ./sgx_patch
$ wget http://e2e.ti.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/00-791-01-00-01-04-39-47/sgx_5F00_kernel_5F00_patches.tar.gz
$ tar zxvf ./sgx_5F00_kernel_5F00_patches.tar.gz
$ wget http://e2e.ti.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/00-791-01-00-01-04-53-12/Change_2D00_for_2D00_interfacing_2D00_with_2D00_SGX_2D00_DT_2D00_node.patch.tar.gz
$ tar zxvf ./Change_2D00_for_2D00_interfacing_2D00_with_2D00_SGX_2D00_DT_2D00_node.patch.tar.gz

本丸の Graphics SDK はTIのページからDLしますが、ユーザ登録が必要です。そこから Graphics_SDK_setuplinux_4_10_00_01.bin をDLしました。

必要な環境を構築します。


$ sudo apt-get install ia32-libs
$ wget -c https://launchpad.net/linaro-toolchain-binaries/trunk/2013.07/+download/gcc-linaro-arm-linux-gnueabihf-4.8-2013.07-1_linux.tar.xz
$ tar xJf gcc-linaro-arm-linux-gnueabihf-4.8-2013.07-1_linux.tar.xz
$ export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf-4.8-2013.07-1_linux/bin/arm-linux-gnueabihf-

$ ${CC}gcc --version
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1-4.8-2013.07-1 - Linaro GCC 2013.07) 4.8.2 20130624 (prerelease)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Linux kernel作成直前まではeewikiの通りです。
kernelのソースコードにDTB系のパッチをあてる必要があるのですが、kernelのソースコードの取得からコンパイルまで自動で行うスクリプトを使用するので、このスクリプトにパッチをあてる形になります。具体的には、kernelのソースコードにパッチをあてているファイルは patch.sh に集約されているので、これに継ぎ足します。(※)の部分で継ぎ足し用に自分で作ったパッチを適用しています。

何故パッチを作ったのか。それは、Prathap Srinivasさんが作ってくれたパッチがどのバージョンのkernelに対するパッチなのかさっぱり分からなく、3.8.13-bone28 ではパッチの修正が必要で、何回もこの行程を実行したからです。修正済みパッチ(v3.8.13-bone28用)を置いておきます。


$ git clone git://git.denx.de/u-boot.git
$ cd ./u-boot/
$ git checkout v2013.07 -b tmp
$ wget https://raw.github.com/eewiki/u-boot-patches/master/v2013.07/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
$ patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
$ make ARCH=arm CROSS_COMPILE=${CC} distclean
$ make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_config
$ make ARCH=arm CROSS_COMPILE=${CC}

$ cd ../

$ wget -c https://raw.github.com/RobertCNelson/tools/master/pkgs/dtc.sh
$ chmod +x dtc.sh
$ ./dtc.sh

$ git clone git://github.com/RobertCNelson/linux-dev.git
$ cd ./linux-dev/
$ git checkout origin/am33x-v3.8 -b tmp
$ patch -p1 < ../bbb_sgx_patch-v3.8/sgx.patch (※)

$ sudo apt-get update
$ sudo apt-get install device-tree-compiler lzma lzop

$ ./build_kernel.sh

$ cd ../

ここからが本番で Graphics SDK を使って必要なカーネルモジュール等を生成します。


$ ./Graphics_SDK_setuplinux_4_10_00_01.bin

これを実行すると、GUI-windowが開きます。ライセンス等の確認と展開場所の選択をし、展開する種別を選択します。AM335xはes8.x系で自分はそれ以外の環境は必要ないので何かあった時用にSDKをプラスして展開しました。


$ cd ./Graphics_SDK_4_10_00_01/
$ patch -p1 < ../bbb_sgx_patch-v3.8/Change-for-interfacing-with-SGX-DT-node.patch

各種環境設定です。何を設定してもうまくいかず、途方に暮れた残骸です。
Graphics SDK Quick installation and user guide に書かれている内容も間違っていて、結果的に展開されたファイルの1つである Rules.make ファイルに記載されている内容が反映される構成になっていました。上記の環境設定も無駄ではないですが、Rules.makeを自分の環境に合わせて編集する方が楽です。


$ export HOME=/home/jujurou/BeagleBoneBlack/bbb_sgx/
$ export CSTOOL_DIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/
$ export CSTOOL_PREFIX=arm-linux-gnueabihf-
$ export KERNEL_INSTALL_DIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/linux-dev/KERNEL
$ export TARGETFS_INSTALL_DIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/sgx_target_rootfs
$ export GRAPHICS_INSTALL_DIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/Graphics_SDK_4_10_00_01
$ export ARCH=arm
$ export SDK_INSTALL_DIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/
$ export LINUX_DEVKIT_PATH=/home/jujurou/BeagleBoneBlack/bbb_sgx/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/
$ export CROSS_COMPILE=/home/jujurou/BeagleBoneBlack/bbb_sgx/linux-dev/dl/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-
$ export LINUXKERNEL_INSTALL_DIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/linux-dev/KERNEL
$ export DESTDIR=/home/jujurou/BeagleBoneBlack/bbb_sgx/sgx_target_rootfs

コンパイルと仮インストールです。


$ make BUILD=release OMAPES=8.x FBDEV=yes SUPPORT_XORG=1 PM_RUNTIME=1 all
$ sudo make BUILD=release OMAPES=8.x FBDEV=yes SUPPORT_XORG=1 PM_RUNTIME=1 install

ここでは自分の見落としから来た次のエラーで悩みました。


make[4]: *** No rule to make target `/home/jujurou/BeagleBoneBlack/bbb_sgx/Graphics_SDK_4_10_00_01/GFX_Linux_KM/services4/3rdparty/linux_drm/drm_sman.o', needed by `/home/jujurou/BeagleBoneBlack/bbb_sgx/Graphics_SDK_4_10_00_01/GFX_Linux_KM/services4/3rdparty/linux_drm/drm.o'. Stop.

なんじゃこりゃ。って内容です。
TI E2E Community でも同様の質問をされている人がいました。その回答を見て納得です。
分かってしまえば簡単な事で、es8.x用にコンパイルする人は GFX_Linux_KM/services4/3rdparty/linux_drm/Kbuild を編集してdrm_sman.o を drm_prime.o に置き換える事になってました。ちゃんと Texas Instruments Wiki にも載ってます。


If you are not able to build Graphics SDK with SUPPORT_XORG=1 & are getting the drm related errors -
Edit GFX_Linux_KM/services4/3rdparty/linux_drm/Kbuild to remove drm_sman.o from the list for 3.3 kernel.
For 3.4 till 3.8 kernel, edit GFX_Linux_KM/services4/3rdparty/linux_drm/Kbuild to remove drm_sman.o and add drm_prime.o to list
Also if you are getting a warning with 3.4 & above kernels - pci_bus_read_config_dword() undefined, then define a dummy function in GFX_Linux_KM/services4/3rdparty/linux_drm/pvr_drm_stubs.c of the graphics SDK release package & build. This should help in getting rid of the warning
For 3.2 & below kernels(till 2.6.37) no modification required & the default Kbuild provided in release package should work without any changes.

make all の方のエラーが取れて喜んでいたのもつかの間、make install でどうしても取れないエラーが発生してしまいました。demoなんて入れる予定は無いからコメントアウトしてもいい気もしますが、何処かに影響が出ないか調べている間に本日の作業としてはタイムアウトになりました。


exporting necessary variables and installing...
########################################################
Please ensure that PSP Linux kernel is re-built atleast once,
Please refer online guide for further details.
########################################################
creating directories...
copying startup files...
cp: cannot stat `/Graphics_SDK_4_10_00_01/targetfs/335x_xorg-demo': No such file or directory
make: *** [install_km] Error 1

コメントアウトでOKだと思います。make all の段階で必要なカーネルモジュール(*.ko)と開発用のライブラリは生成されているので、これらを適所に配置すればOKかと思います。


で、うかつだったのが、ここまできて最後にDTB用のパッチをあてている事に気がついたという事です。kernelモジュール生成の時に既にDTBを生成しているので、この時点でDTBの元データができても意味がありません。これは…次回へ持ち越しと言うことで。

宿題が多くなってしまいました…。
実際に画面が出るのはいつになることやら…。

tag : BeagleBoneBlack

tag : OpenGL

BeagleBone Blackを使う

最近、Linux on ARM に興味を持ち、いろいろと構成を知りたくなりました。特にLinuxの構成がどのようになっているのか、ドライバの作り方等々。既に Raspberry Pi を持っていますが、これ1種類では Raspberry Pi 固有なのかどうかの判断が付きにくいので、かねてより他の安価なボードを買おうか迷っていました。そんな矢先、秋月電子通商で BeagleBone Black を売っているのを知り、購入してみました。

これ、購入して初めて知ったのですが、Raspberry Piに比べてWEB上での情報が格段に少ないです。特に日本語のサイトとなると数えられるくらいです……。これは面白いと思いました。私の目的が「Linuxの構成を知る」事にあるので、余分な情報が少なければ少ないほど自分で試行錯誤を繰り返し、資料を読みあさる必要があるからです。Raspberry Pi の時(主にLinuxアプリの使用方法を検討)とは異なり、Bootからrootfsの構成、Linuxドライバを含む下回りをメインに見ていこうと思います。もちろん、随時 Raspberry Pi と見比べて Linux固有なのか、ボード依存なのかといった判断をしながらです。

Raspberry Pi と BeagleBone Black との最大の違いは、前者はSDブートのみ、後者はNAND-Flashブート(on Board)とSDブートの両対応といった点です。BeagleBone Blackは2つのROM領域とブート方法があるが故にWEB上の情報を読む時に「どっちの事だ?」と考え込むことがあります。実に面白いです。

いろいろと御託を並べましたが、先ずは普通に起動する所まで持って行きます。Raspberry Pi では一切お目にかかっていない X-Window の起動を第1ステップとして設定しました。挑戦しながらの記事なので、間違いが散在する可能性が十分にありますが、課程を楽しむといった点で記録を残したいと思います。


私が購入したのは 「BeagleBone Black Rev.A5C」です。これには出荷時に NAND-Flash に Angstrom Linux が入れられていて、モニター(microHDMI)、キーボード、マウス、電源を繋げばLinuxマシンのできあがりです。なので、先ずは Angstrom Linux のお顔を拝見……と思ったのですが、思わぬ自体に。なんと microHDMI と USB の口が接近しすぎて両方を同時に刺す事ができません!?

1379858116338.jpg

PC専用モニターを持っていないので、液晶TVを代わりに使おうとして、HDMIのコネクタ変換(A→D)をかましたのが原因です。いきなりの衝撃的事実で意気消沈しそうでしたがそこは頭を切り換えて、変換機をもっとスマートな物を購入するとして、今できる事をする事にしました。

やりたい事は Ubuntu をSDカードで起動させて X-Window の画面を拝む事です。まっ、上記した様に変換機が届くまで拝む事はできませんが、準備だけはしてみましょう。

CircuitCo Wiki Support の Installing LXDE を参考に LXDE版12.04.2 LTSをインストールします。

ARM HF Linux にあるイメージファイルを取ってきてSDに書き込むのです。

ubuntu-precise-12.04.2-armhf-3.8.13-bone20.img.xz をDLして解凍します。解凍にはLhazを使いましたが、xz形式を解凍できるソフトであれば何でも可です。解凍したファイルを Win32DiskImager を使って microSDカード に書き込みます。1.78 GBあるので結構時間がかかります。
※指定するドライブには十分に注意してください。

書き終えた microSDカード を BeagleBone Black に挿入します。
本当はここでモニターとキーボード、マウスを繋ぐ所ですが、先に記載したようにコネクタが干渉して全部を繋ぐことができないので、大きな賭に出てみます。SSHが起動する事を前提にLANケーブルを繋いで S2-SWを押下したまま電源コネクタを接続します。

USER LED(4つ並んでいる)が点滅し起動した感じがしたら(私は1分くらい待ちました)S2-SWを放します。で、ルータで割り振っている BeagleBone Black のIPアドレスを調べます(接続前後で比べて増えた物だと思います)。そのIPアドレスを使ってターミナルからSSH接続します。ターミナルには TeraTerm を使いました。

User: ubuntu
Password: ubuntu

上記内容でログインした所、SSH接続できたので、賭に勝ったみたいです。

$ sudo apt-get update
$ sudo apt-get -y install lxde lxde-core lxde-icon-theme

通信速度にもよりますが、15分くらいで終了します。

$ sudo shutdown -h now

一度終了させて電源を抜いて S2-SW を押下しながら電源を刺すと X-window で起動している……はずです。

試しに、microHDMI端子にTVを繋いで表示してみたところ、ログイン画面が写りました。LXDE版12.04.2 LTSのログイン画面っぽいのでここまでは成功でしょう。

20130923_160504.jpg


せっかくSSHで接続しているので、状態確認です。

各容量を確認。

$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 ext4 1811704 797216 920792 47% /
devtmpfs devtmpfs 253768 4 253764 1% /dev
none tmpfs 50784 244 50540 1% /run
none tmpfs 5120 0 5120 0% /run/lock
none tmpfs 253912 0 253912 0% /run/shm
/dev/mmcblk0p1 vfat 1004 472 532 48% /boot/uboot


mmcblk0p1 と mmcblk0p2 をあわせても2GBくらいしか領域を確保されていません。4GBの microSDカード を使用しているので残り2GBがもったいないです。何とか領域の拡大ができないか調べてみたら、fdiskコマンドでパーティションの拡張ができる様です。

$ fdisk /dev/mmcblk0

Command (m for help): p ← 内容確認

Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80000000

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 4095 1024 1 FAT12
/dev/mmcblk0p2 4096 3751935 1873920 83 Linux

Command (m for help): d ← パーティション削除(表面上の話しです)
Partition number (1-4): 2

Command (m for help): n ← パーティション作成(拡張)
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (4096-7744511, default 4096):
Using default value 4096
Last sector, +sectors or +size{K,M,G} (4096-7744511, default 7744511):
Using default value 7744511

Command (m for help): w ← 設定した内容を保存
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.


パーティションの拡張設定はできたのですが、システムに反映されていないので再起動します。microSDカードから起動するので、S2-SWを押下しながら以下のコマンドを実行。

$ sudo reboot

再びSSH接続してパーティションが拡大されているか確認します。

$ sudo fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80000000

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 4095 1024 1 FAT12
/dev/mmcblk0p2 4096 7744511 3870208 83 Linux

Command (m for help): q


$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 ext4 1811704 797324 920684 47% /
devtmpfs devtmpfs 253768 4 253764 1% /dev
none tmpfs 50784 244 50540 1% /run
none tmpfs 5120 0 5120 0% /run/lock
none tmpfs 253912 0 253912 0% /run/shm
/dev/mmcblk0p1 vfat 1004 472 532 48% /boot/uboot


パーティションは拡大されている。しかし、ファイルシステム上のサイズが変更されていないみたい。調べてみると resize2fs というコマンドで行う様だが…、入ってないです~。apt-cache search で調べてると、system-config-lvm に入っているらしい、でもこれってGUI側も入っているみたいなんだよな~、と思いつつインストール。

$ sudo apt-get install system-config-lvm

$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 967552 blocks long.

$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 ext4 3778576 829248 2779472 23% /
devtmpfs devtmpfs 253768 4 253764 1% /dev
none tmpfs 50784 244 50540 1% /run
none tmpfs 5120 0 5120 0% /run/lock
none tmpfs 253912 0 253912 0% /run/shm
/dev/mmcblk0p1 vfat 1004 472 532 48% /boot/uboot


無事にファイルシステムとしても4GBを認識しました。

早くHDMIの変換機来ないかな~。

tag : BeagleBoneBlack

評価ボードのお試し(SK-FM3-48PMC-USBSTICK)

富士通のFM3評価ボード SK-FM3-48PMC-USBSTICK を入手しました。富士通製のARMの安価な評価ボードが今までなく……Interface 2012年6月号の付録ってのがありましたが、本体のみの安価な評価ボードと言うのはなかったのです。まだ、一般発売はしていないっポイですが、某所で先行発売していたのを購入しました。

RIMG0470.jpg

評価ボードに付いてきたCDにはインストーラが入っていて、開発環境を整えるのにはこれらを実行する必要があるみたいです。ただ、前もって調べていた富士通HPにあるセットアップガイドにはなにやら色々と無視しろ的な事が書いてあり、チョッと恐ろしい気もしました。

私が興味を持っていたのはJTAGデバッガの方で、回路図を見る限り、FT2232D直結です。しかもEEPROMを付けていないので、素のVID,PIDを使っていると言うことになると思うのですが、予想通り素のままで使うようです。これで何が問題かというと、他の用途で素のFT2232Dを使おうとした場合にここでインストールしたドライバが使用されてしまうと言うことです。セットアップガイド(ここにセットアップガイドと回路図のPDFあり)にはmini-USBドライバーインストールの章で「「ファイルが必要」と表示された場合は、以下を参照先に指定してください」とあります。これって、ネットに繋いでいたら勝手に落として来ますよ~的な意味合いで、素のFT232Dを使っている限り、FTD2XX.dllを使用する事になるんです。試しにボロPCにインストールしてみると、やはりそうでした。

正に問題はこの部分です、私が普段使っているOpenOCDはバイナリを配布しているのもあり、libusbのドライバを使う事を前提にコンパイルしているのですが、これを使うと認識してくれなくなります。認識させるにはドライバを入れ替えてやれば良いのですが、今後の事も考えると、素のFT2232Dのドライバは入れ替えたくないのが本音です。完全に富士通オンリーの環境を使っているなら良いでしょうが、いろんなマイコンやデバイスを使ってますからね。その点、STmicroやNXPは自前のデバッガを使っているので良いですね。というか、安価評価ボードとしては後発のUSBSTICKがこのありさまというのは考え物です。


と、長~~いグチはここまでとして、自分の環境に合わせた設定をしてみることにしました。

デバッグ基板側のUSBをPCに繋いでドライバが自動認識、インストールされるのを待ちます。例によって zadig を使って、「Interface 0」の方をWinUSB(libusb-1.0)ドライバと入れ替えます。「Interface 1」側はそのまま放置しましたが、COMとして認識しているので、ひょっとするとデバッグで使えるかもしれません。基板上ではこのポートがMB9AF312KのUARTに繋がってます。

SK-FM3-48PMC-USBSTICK_debug_borad.png

デバッグ基板は回路図を見る限り oocdlinks と同じ構成になってます。oocdlinksの回路図と何回も見比べましたから同じでしょう。ということで、OpenOCDに使うインターフェイスのcfgは oocdlink.cfg を参考に作成します。肝心のターゲットのcfgですが、付属のCDに入っていたのをほぼそのままコピってきました。若干、内容が古かったので修正したのと、いらない部分を削ったくらいです。

これらのcfgファイルを使って、OpenOCD経由で繋いでみるとあっさりと繋がりました。簡単なコマンドをtelnetで試して、事前に作成していたMB9AF312Kのプロトタイプ・プログラムを書き込もうとした時………問題が発生しました。書き込めないんです。

cfgファイルとか見直したりしたのですが、問題なさそうで、いろいろとすったもんだで確認して最終的にたどり着いたのがOpenOCD内部のFlash書き込みルーチンです。この部分は以前もチョッと見たことあって怪しさこの上ない構成だと思っていたのですが、やはりバグってました。それもどのFM3チップでも発生しそうなバグが。手持ちのチップ(MB9BF506N, MB9BF618T)で発生しなかったのは、"仕様外の領域にもRAMがあった"から何ですね。もう少しく書くと、Flash書き込みルーチンでワーク用のメモリの8byte分手前の領域を使っちゃってたんですね。手持ちのチップでは "たまたま" RAMっぽく振る舞ってくれる領域らしく、逆にMB9AF312Kは仕様の通りで仕様外の領域には書き込みが出来ないんです。キッチリしてます。

原因は分かったので、サクッと修正して書き込みしました。
作成したOpenOCDとパッチは【物置】に置いています。


Flash周りを見直すに当たって、MB9AF312K以外の仕様書を見ていて気がついたのですが、いつの間にかFlashの書き込みコマンドが MB9AFxxx と MB9BFxxx とで違いがなくなっています。なので、今回のcfgでは CHIPNAME に "AF" 品であるにも関わらず "mb9bfxx2" を選択しています。ワーク・フラッシュ領域が付いてきたあたりから、メイン・フラッシュ領域のコマンドが従来の BF品 相当で、ワーク・フラッシュ領域のコマンドが AF品 相当になったようです。

SK-FM3-48PMC-USBSTICK は小型な評価ボードなので、手軽にお試しが出来そうなので、いろいろと試してみようと思います。

tag : FM3評価ボード

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
05 | 2020/06 | 07
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ Linux RaspberryPi 三段化 6P43P-E 全段差動プッシュプル トランジスタ式ミニワッター 6P43P TRminiWatterPart4 MPD FON2405E イーサネットコンバータ OpenOCD DAC buildroot FM3ペリフェラル BeagleBoneBlack map windows Bluetooth ODROID-U2 library FM3評価ボード mingw OpenGL シングル bitbake KiCad 計測 プリアンプ Edison VMware FM4 ミニワッター 6N6P TL-WR700N 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter