読者です 読者をやめる 読者になる 読者になる

Tizen 移植(porting) 入門 〜Tizen on pandaboard ES〜 part3

まえがき

(※)色々と間違いが有りそうです、お気づきの点がありましたら是非ご指摘をお願いしますm(_ _)m

f:id:moguriso:20121208092106j:plain:leftTizen 移植(porting) 入門 〜Tizen on pandaboard ES〜 part2 - N9/Tizenったりの続き。あんまりTizen関係ないことばっかりやってる気がしますが。。。

  • summary
    • 貰い物のTizen(1.0) on Pandaboard(ES)を動かした
    • omap用のkernelモードドライバをビルド
    • Panda用kernelのビルド
    • omap用SGXドライバのビルド(前回)
    • kernelモードドライバのinsmod(書いてない)
      • insmod失敗
    • kernel version, kernel config修正, rebuild(〃)
    • omapdrmドライバがstagingで諸々変わっててundefined reference simbolになる(〃)
    • 取り敢えずこのVer使ってると言ってるBBS見つけた(〃)
    • git cloneしたが全容量1.3GB。デカすぎ...orz(←いまここ)

(※)本当はSGXドライバのDRM連携モジュール(pvr-omap4-kernel/sgx/services4/3rdparty/dc_omapdrm_linux)を今のstagingにあるomap_drmに合わせて直すべきなんですが、platform_deviceになってたりして、ドラスティックに変わってるので真面目にやるとフルフルで2〜3日掛かりそうなので挫折しました。。。

TI Ubuntuのgitリポジトリをダウンロード

$ git clone http://dev.omapzoom.org/pub/scm/integration/kernel-ubuntu.git/

/tmpに何か無い的なエラーが出るものの、取り敢えず落ちては来ます。冒頭の通り、1.3GBもありなおかつ転送が遅いので2時間以上掛かりました。落ちてきたら、checkoutします。tagsも指定が有ったみたいなので、tagsもつけて

$ git checkout -b ti-ubuntu-3.1-1282 ti-ubuntu-3.1-1282.10

コンフィグファイルは、omap4_defconfigがあるみたいです、、、が、この前使ってたコンフィグと差分がいっぱいあるので取り敢えず前使ってたこちらを使います。あのあと、結局rebuildしたkernelを使ってbootする必要があったので、下記のconfigを有効にしました。

CONFIG_CGROUPS=y
CONFIG_PREEMPT=y
CONFIG_DEVTMPFS=y
CONFIG_DRM=y
CONFIG_FB_OMAP2=y
CONFIG_STAGING=y
CONFIG_DRM_OMAP=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_FSCACHE=y

前回は、GBSにchrootして作業していましたが、どうもオカシナ挙動をしたりするので、結局母艦側でクロスコンパイラを利用してコンパイルしています。取り敢えず使っているのは有名なCodeSourcery*1

.configを直接編集して

ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make oldconfig

するか、

ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make menuconfig

で適当に。。

Ubuntu kernelのbuild

uboot経由で起動するので、uImageを生成する必要があります。uImageはzImageからmkimageコマンドで生成します。mkimageコマンドはubootをrebuildすれば作られますが、どっかからバイナリを取ってきたほうが楽です。適当にパスの通ったディレクトリに入れておくと、さらに楽です。

ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make -j8 uImage

で、一気にuImageまで生成してくれます。ビルド結果はこんなかんじ。

Image Name: Linux-3.1.0-74864-g24e61ca
Created: Sat Dec 8 11:47:26 2012
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3734308 Bytes = 3646.79 kB = 3.56 MB
Load Address: 0x80008000
Entry Point: 0x80008000
Image arch/arm/boot/uImage is ready

ファイルは./arch/arm/boot/uImageに生成されます。

SGXドライバのbuild

前回は素の方を使っていましたが、DRM関係のpatchが入っていたので、今回はubuntu側の方を利用するようにしました。

$ git clone git://git.linaro.org/ubuntu/pvr-omap4.git

cloneしたディレクトリの、pvr-omap4/debian/dkms/patchesにヘッダ関連のパッチがあります。取り敢えずpvr-omap4/sgx/ディレクトリに移動して、下記のコマンドを実行します。

$ patch -p1 < ../debian/dkms/patches/adding-omap_drv-omap_drm-workaround.patch
patching file services4/srvkm/include/linux/omap_drm.h
patching file services4/srvkm/include/linux/omap_drv.h

これだとbuildが通らなかったので、何箇所かincludeヘッダを誤魔化したり、ビルドオプションを弄ったり*2しています。大したことはしていないので、この修正もpatchにしました。

$ patch -p1 < ~/om.patch
patching file eurasiacon/build/linux2/config/core.mk
patching file services4/srvkm/env/linux/Kbuild.mk
patching file services4/system/omap4/syslocal.h

エラーが出なければ、ドライバをbuildします。

$ cd eurasiacon/build/linux2/omap4430_linux
$ ARCH=arm KERNELDIR=~/work/panda/1208/kernel-ubuntu/ CROSS_COMPILE=arm-none-linux-gnueabi- make -j8 BUILD="release"

KERNELDIRには先程buildしたkernelのパスを指定して下さい。

./pvr-omap4/sgx/services4/srvkm/include/linux/omap_drv.h:28: fatal error: plat/drm.h: No such file or directory
compilation terminated.

エラーが出た...orz

SGXドライバのロード、テストアプリ実行→失敗...orz

前に試していたこちらならbuild出来た模様...

ロードまでは出来たものの、問題山積。。。

  • xeglinfoなどのサンプルが動かない
  • omap_pvr_drv.soのロードに失敗
    • pvr_drv.soも失敗→X Serverのsigniture(?)が新しかったり古かったり。X ServerのVersionUp必要?(→メンドイ)
    • xf86-video-omapのbuildを試すも必要なパッケージが多すぎて断念
  • libdrm.so libdrm_omap.soが無い
    • libdrmのパッケージをconfigureするときにexperimental-omap的なオプションを追加すればビルドは可能だった。でもやっぱりsigniture側の問題かうまくは動かない
  • ドライバは認識しているが、CoreRevがとれてない
    • 起動時やpvrsrvinit時に頻繁にkernelがエラーを吐いてる。多分CoreRevとlibのVerが一致してない性
    • 多分SGXの初期化も出来てない、、、

*1:昔は登録無しで落とせた気がするんですが、登録必須になった模様です??

*2:妥当性は確認してません