【世界初】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ポートに指して電源を入れれば、起動します。