faith's blog

気まぐれ日記

【世界初】Jetson TK1でTizenを動かす【たぶん】

おはようございます、faithです。

先日、記事にしましたが、世界初!(たぶん)Jetson TK1でTizen-IVI 3.0-M3-June2014が動きました。

今日は、u-bootに引き続き、 Jetson TK1でTizen-IVI 3.0-M3-June2014を動かす方法について紹介します。

bootloaderはu-bootを使用します(その為に、先にu-bootの記事を書いたのです)

KernelはThierry Redding さんのを使用します。

TizenはWindowSystemがwayland/westonなので、DRMに対応していないと駄目なので、L4Tのカーネルでは動きません。

u-bootについては、先ほど書いた記事を参照。

Kernelについては、kmscubeの記事を参照。

rootfsはUSBの1stパーティションに置くので、 boot.scrを修正して、root=/dev/sda1に変更してください。

では、Tizenのビルド(パッケージビルド、rootfsの作成)、SDへの書き込みについて説明します。

ちょっと長いですが、ご了承下さい。

基本は、Wikiに書かれているIntel向けのビルド方法と同じです。

Tizenのソースコードとpre-built rpmをダウンロード

作業用ディレクトリの作成

$ mkdir ~/tizen_work
$ export TIZEN_WORK=~/tizen_work
$ mkdir -p ${TIZEN_WORK}/gbs/3.0-devel
$ export GBS_WORK=${TIZEN_WORK}/gbs
$ mkdir -p ${TIZEN_WORK}/mic
$ export MIC_WORK=${TIZEN_WORK}/mic

pre-built rpmをダウンロード

$ mkdir -p ${GBS_WORK}/3.0-devel/pre-built/armv7l
$ cd ${GBS_WORK}/3.0-devel/pre-built/armv7l
$ git clone review.tizen.org:/pre-built/toolchain-arm
$ pushd toolchain-arm
$ git checkout tizen
$ popd
$ lftp -e "mirror arm m3-june2014; bye" http://download.tizen.org/releases/milestone/tizen/ivi-3.0.m14.2/tizen-3.0.m14.2-ivi_20140724.4/repos/

ソースコードのダウンロード

libdrm, mesa, westonをtegra用に修正する必要があるため、 ソースコードをダウンロードしてリビルドします。

$ mkdir -p ${GBS_WORK}/3.0-devel/platform/upstream

$ git clone review.tizen.org:/platform/upstream/libdrm.git
$ pushd libdrm
$ git checkout 739af7c5b39b2cab52472aa7b8f37a1f18d8e1a5
$ popd

$ git clone review.tizen.org:/platform/upstream/mesa.git
$ pushd mesa
$ git checkout 677942b9df39fd37863920bc426d4f2c22c744e3
$ popd

$ git clone review.tizen.org:/platform/upstream/weston.git
$ pushd weston
$ git checkout ef889d839bd5d21d43c5502ee0dd34f95274a085
$ popd

設定ファイルの作成

build.confをダウンロード

$ wget http://download.tizen.org/releases/milestone/tizen/ivi-3.0.m14.2/tizen-3.0.m14.2-ivi_20140724.4/repos/arm/packages/repodata/b2c5ee761eb091eadab5da0791409364eca446a04aa0197c6a2ea9023a83ac71-build.conf.gz
$ gunzip b2c5ee761eb091eadab5da0791409364eca446a04aa0197c6a2ea9023a83ac71-build.conf.gz
$ mv b2c5ee761eb091eadab5da0791409364eca446a04aa0197c6a2ea9023a83ac71-build.conf build.conf

build.confを修正

tegra用のマクロを定義します。

修正例

--- build.conf.org  2014-07-31 21:47:51.636850521 +0900
+++ build.conf  2014-07-30 22:09:05.336529098 +0900
@@ -46,6 +46,12 @@
 %_with_wayland 1
 :Macros
 
+### Tegra
+%define _with_tegra 1
+Macros:
+%_with_tegra 1
+:Macros
+
 ############################# emulator repository ############################
 
 %if "%_repository" == "emulator"

.gbs.confを作成

ダウンロードした、pre-built rpmをrepositoryとして指定します。

[general]
tmpdir=/var/tmp/
profile = profile.tizen3.0_ivi
buildroot = ../GBS-ROOT/
work_dir = .

[repo.toolchain_armv7l]
url=${work_dir}/pre-built/armv7l/toolchain-arm

[repo.m3-june2014]
url=${work_dir}/pre-built/armv7l/m3-june2014

[profile.tizen3.0_ivi]
repos=repo.toolchain_armv7l,repo.m3-june2014
buildconf=build.conf

ソースコードの修正

修正内容は、githubに上げてあります。

libdrmの修正

ベースをThiery Reddingさんのgit repositoryからdrm.gitに変更し、specを修正します。

$ cd ${GBS_WORK}/3.0-devel/platform/upstream/libdrm
$ tar cf packaging.tar packaging

$ git remote add thierryreding git://gitorious.org/thierryreding/drm.git
$ git fetch thierryreding
$ git checkout thierryreding/master
$ git tag upstream/2.4.54

$ tar xf packaging.tar

$ wget https://raw.githubusercontent.com/faith0x7dc/patches/master/jetson-tk1/tizen-ivi/libdrm/001-add-tegra-support.patch
$ patch -p0 < 001-add-tegra-support.patch

mesaの修正

ベースをfreedesktopのmesa.gitに変更し、specを修正します。

$ cd ${GBS_WORK}/3.0-devel/platform/upstream/mesa
$ tar cf packaging.tar packaging

$ git remote add freedesktop git://anongit.freedesktop.org/mesa/mesa
$ git fetch freedesktop
$ git checkout freedesktop/master
$ git tag upstream/10.3.0

$ tar xf packaging.tar

$ wget https://raw.githubusercontent.com/faith0x7dc/patches/master/jetson-tk1/tizen-ivi/mesa/001-add-tegra-support.patch
$ patch -p0 < 001-add-tegra-support.patch

westonの修正

tegra対応の修正を加えます。

$ cd ${GBS_WORK}/3.0-devel/platform/upstream/weston
$ https://raw.githubusercontent.com/faith0x7dc/patches/master/jetson-tk1/tizen-ivi/weston/001-add-tegra-support.patch
$ patch -p0 < 001-add-tegra-support.patch

ビルド

gbsコマンドを使用して、ソースコードからrpmを作ります。

$ cd ${GBS_WORK}/3.0-devel
$ gbs -v -d lb -A armv7l -D build.conf --clean --exclude=libtool,libffi48,glibc,gcc,gcc48 platform/upstream/libdrm
$ gbs -v -d lb -A armv7l -D build.conf --clean --exclude=libtool,libffi48,glibc,gcc,gcc48 platform/upstream/mesa
$ gbs -v -d lb -A armv7l -D build.conf --clean --exclude=libtool,libffi48,glibc,gcc,gcc48 platform/upstream/weston

repositoryの作成

シンボリックリンクを張る

$ sudo mkdir /var/www/tizen
$ sudo chmod 777 /var/www/tizen
$ cd /var/www/tizen
$ ln -s ${GBS_WORK}/3.0-devel/pre-built/armv7l/m3-june2014/packages/armv7l
$ ln -s ${GBS_WORK}/3.0-devel/pre-built/armv7l/m3-june2014/debug
$ ln -s ${GBS_WORK}/3.0-devel/pre-built/armv7l/m3-june2014/packages/noarch
$ ln -s ${GBS_WORK}/GBS-ROOT/local/repos/tizen3.0_ivi/armv7l/RPMS

xmlをダウンロード

$ mkdir xmls
$ cd xmls
$ wget http://download.tizen.org/releases/milestone/tizen/ivi-3.0.m14.2/tizen-3.0.m14.2-ivi_20140724.4/repos/arm/packages/repodata/group.xml
$ wget http://download.tizen.org/releases/milestone/tizen/ivi-3.0.m14.2/tizen-3.0.m14.2-ivi_20140724.4/repos/arm/packages/repodata/patterns.xml

patterns.xmlの修正

ダウンロードしたものは、intel用(armのディレクトリにあるのに、intel用になっています)なので、 そのままだと、rootfs作成に失敗します。

以下のパッケージをpatterns.xmlから削除します。

  • libva-intel-driver
  • gstreamer-vaapi
  • openavb

repositoryを作成

$ cd /var/www/tizen
$ createrepo -v -g xmls/group.xml .
$ modifyrepo xmls/patterns.xml repodata

rootfsの作成

kickstarterファイルのダウンロード

armのディレクトリにあるのに、中身はintelと同じです。 (故に、milestoneリリースのimageはintel版しかありません)

とりあえず、ローカルにコピーして修正することにします。

$ cd ${MIC_WORK}
$ wget http://download.tizen.org/releases/milestone/tizen/ivi-3.0.m14.2/tizen-3.0.m14.2-ivi_20140724.4/builddata/images/arm/image-configurations/ivi-mbr-i586.ks
$ mv ivi-mbr-i586.ks ivi-armv7l.ks

kickstarterファイルの修正

repository指定箇所のパスを修正します。 (IPアドレスは適宜変更)

また、以下のパッケージはintelでしか使えないようになっているので、コメントアウトします。

  • kernel-x86-ivi
  • setup-extlinux
  • setup-ivi-clone
--- ivi-armv7l.ks.orig  2014-07-24 23:17:03.000000000 +0900
+++ ivi-armv7l.ks   2014-07-30 23:01:16.212540920 +0900
@@ -20,7 +20,7 @@
 
 installerfw_plugins "bootloader,fstab"
 
-repo --name=ivi --baseurl=https://download.tizen.org/snapshots/tizen/ivi-3.0.m14.2/@BUILD_ID@/repos/atom/packages/ 
+repo --name=ivi --baseurl=http://192.168.0.30/tizen.ivi/armv7l-partial --ssl_verify=no
 
 %packages
 
@@ -33,11 +33,13 @@
 @Console Tools
 @IVI Applications
 
-kernel-x86-ivi
+#kernel-x86-ivi
 
 ivi-repos
-setup-extlinux
-setup-ivi-clone
+#setup-extlinux
+#setup-ivi-clone
+
+weston-clients
 %end

rootfsの作成

micコマンドを使用してrootfsを作成します。

$ mkdir cache logs out
$ mic -v -d create fs -k cache -o out --release=test --logfile=logs/test.log ivi-armv7l.ks

rootfsの修正

micで作成したrootfsはそのままでは動きません。

カーネルモジュールのコピーと、一部ファイルの作成が必要です。

カーネルモジュールのコピー

Thierry Redding さんのカーネルをビルドし、カーネルモジュールを/lib/modules以下にコピーします。

/etc/mtabを作成

/etc/mtabは通常、/proc/self/mountsへのシンボリックリンクになっている必要がありますが、 micで作成したrootfsはそうなっていません。

その為、手動でシンボリックリンクを作成します。

$ cd /path/to/rootfs/etc
$ sudo ln -s /proc/self/mounts mtab

ksファイルには、その処理が記述されているんですが、なぜかちゃんと動いていないようです。 (intel版のpre-built imageではちゃんとリンクが張られている)

後は、rootfsをUSBメモリに書き込んで、ボードのUSBポートに指して電源を入れれば、起動します。