狠狠撸

狠狠撸Share a Scribd company logo
wata2ki
? 名前: wata2ki (watatuki)
? 元はハードウェアで画像処理をやっていましたが、現在は組
み込み屋をやっています
? 最近はJetson-TK1/TX1向けのアンオフィシャルYocto BSP
を作り、そのうえでディスクトップ環境や別ボード向けのディス
トロを動かして遊んでいます
? GitHub
? https://github.com/watatuki
? 今日は、Jetson-TK1のOSSベースのBSPを作った時
のやりかたを説明します
? L.F.(Linux Foundation)のプロジェクトで、正式名称は
Yocto Project
? https://www.yoctoproject.org/
? Linuxのディストリビューションを作るのに必要なツー
ル?データを提供
? 最終的にはpokyという名前のリファレンスディストロとして提
供される
? OpenEmbedded(http://www.openembedded.org/)コミュニティ
由来のプロジェクトで、ツールも共同開発している
? GentooLinuxがクロスビルドになったようなもの
? bitbake
? Yoctoの根幹となるツールで、クロスビルド環境を提供してくれる
? ディストリビューションの構成するソフトのコンフィグやバージョンを
Recipeで管理する
? oe-core
? bitbakeで使うレシピのセットで、glibc, x.org, waylandからQtまで、様々
なOSSを標準でビルドできるようにしてくれる
? クロスビルド用のgccもoe-coreが提供してくれる
? リファレンスBSP
? pokyが標準でサポートしているボード向けのBSP
? Qemu, x86, x86-64, beagleboneなど
? LinuxのカーネルやU-boot, OpenGL(mesa)をそのボード向けの設定でビル
ドできるようにするレシピの形で提供される
? リファレンスBSPに関しては、少なくともビルドが通ることが確認されている
(はず。。。)
? Yoctoでは、自分の作りたいディストロをlayerを組み合
わせて構築する
自分の作りたいディストロ
meta (oe-core layer)
meta-yocto (yocto layer)
meta-jetson (BSP layer)
meta-mydistro (my layer)
標準Layer
meta-windowmng (layer)
BSP Layer
ターゲットボード用のカーネルや、ファーム
ウェア等
さらに追加したいコンポーネントが入っ
たLayerを積み上げる
今回はここの話
? Jetson-TK1でwayland環境を構築したい
? コンポーネントを一つ一つビルド?インストールして動かす環
境をNVIDIAが提供しているが、継続的に使えるようYoctoに
組み込みたい
? Kernelは、Upstream Kernel
? L4Tではなくnouveau/mesaベース
? L4TはX.orgのみでwaylandをサポートしていない
? 使えるものは極力Yoctoのリリースに含まれるものを使う
? Jetson-TK1(最近はTX1も)向けのwayland環境を
NVIDIAがgithubで公開している
? https://github.com/NVIDIA/tegra-nouveau-rootfs
? Ubuntu14.04(ARM)のrootfsにパッチをあてたカーネル、nouveauや
mesaをビルド?インストールするスクリプトのセット
? westonのディスクトップシェルが動作するrootfsを作ってくれる
? ビルドが通れば…
これをベースにBSPを作成
? Yocto/OEのLayerは決まったファイルを置くだけ
? レイヤのスケルトンはyocto-layer create を使って作成
? Layerの設定が書かれたlayer.confを自動作成してくれる
? 今回は、サンプルレシピの作成は行わない
? Layerディレクトリ名前はmeta-jetson
$ yocto-layer create jetson
Please enter the layer priority you'd like to use for the layer: [default: 6] 6
Would you like to have an example recipe created? (y/n) [default: n] n
Would you like to have an example bbappend file created? (y/n) [default: n] n
New layer created in meta-jetson.
Don't forget to add it to your BBLAYERS (for details see meta-jetsonREADME).
meta-jetson
├── COPYING.MIT
├── README
└── conf
└── layer.conf
? BSPを作る場合はmachine設定を新規に作成
? ARM/x86といったアーキテクチャの設定、最適化設定などを記載する
meta-jetson
├── README.md
└── conf
├── layer.conf
└── machine
└── jetson-tk1-upstream.conf
require conf/machine/include/tune-cortexa15.inc
DEFAULTTUNE = "cortexa15hf-neon"
PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
PREFERRED_PROVIDER_virtual/kernel ?= "linux-upstream"
PREFERRED_PROVIDER_virtual/mesa ?= "mesa"
PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
SERIAL_CONSOLE = "115200 ttyS0"
KERNEL_IMAGETYPE = "zImage"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " 
bootconfig 
kernel-image 
kernel-devicetree 
linux-firmware-nvidia 
linux-firmware-rtl8168g 
kernel-modules 
libdrm-tegra 
libdrm-kms 
mesa-megadriver 
"
IMAGE_FSTYPES = "tar.bz2"
アーキテクチャ設定と、コンパイラの最適化オプション設定
TegraK1はCortex-A15なので、A15を設定
Kernelレシピを指定
Yoctoで用意されているカーネルは古いので、最新のカーネルを
使えるように独自のレシピを使うように設定
このmachine設定を選択した場合に強制的にインストールする
パッケージを指定
bootconfig : jetson-tk1でu-boot起動する設定ファイル
kernel-image : /boot にカーネル
kernel-devicetree : /boot にdtb
kernel-firmware-* : ファームウェア
kernel-modules : カーネルモジュール(nouveu等)
libdrm-* : libdrmのtegra用パッケージ
mesa-megadriver : mesaのドライバパッケージ(nouveau)
? ベースは別のカーネルレシピを流用
? TIのBSPから流用したファイルをベースに作成
? defconfigは、arch/arm/configsの下のファイル名を指定する
? カスタムコンフィグにしたい場合は、別途bbappendレシピを使って上書きすると、ディスト
ロごとにBSPレイヤを作り直さなくて済む
? Patchは必須ではないが、jetsonの場合はDTBでGPUを有効化したいので、そのため
のpatchを追加
? ベースのlinux-firmwareにnvidiaのファームウェアのパッケージがなかったので、
新規作成
? 中の構成が頻繁にかわるためappendではなくカスタムレシピを作成。
? 今回はnvidiaゆえに必要だっただけで、通常は作成しなくてよい
meta-jetson
├── README.md
├── conf
└── recipes-kernel
├── linux
├── linux-upstream
│ │ ├── defconfig
│ │ └── linux4.3_tegrak1_gpu_hdmi.patch
│ ├── linux-dtb.inc
│ ├── linux-upstream_4.7.bb
│ └── setup-defconfig.inc
└── linux-firmware
└── linux-firmware_git.bb
TIのレシピの流用品
パッチファイル(GPU有効化)
GPUとEtherファームのために作成したファームウェアレシピ
? カーネルレシピはほぼ定型文
? メンテ時は以下の個所しか変更していません
SECTION = "kernel"
DESCRIPTION = "Upstream Linux Kernel recipe."
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
KERNEL_IMAGETYPE = "zImage"
inherit kernel
require recipes-kernel/linux/linux-dtb.inc
require recipes-kernel/linux/setup-defconfig.inc
DEFAULT_PREFERENCE = "-1"
S = "${WORKDIR}/linux-4.5.2"
PR = "r2"
SRC_URI = "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.5.2.tar.xz 
file://linux4.3_tegrak1_gpu_hdmi.patch 
file://defconfig"
SRC_URI[md5sum] = "eae8f700463ea73185027caece5f1c5d"
SRC_URI[sha256sum] =
"e32339db8365f0f10b873928095da47dd3e8a40f8ea5edd5501320d4ff30209f"
KERNEL_DEVICETREE = "tegra124-jetson-tk1.dtb"
カーネルのソースを指定
gitにするとcloneがとんでもなく遅いので、tar.xzを使うようにしてい
るが、gitでとってくることも可能
カスタムカーネルを使用したい場合は、自宅のgitを指すようにする
Gitの場合は、
SRC_URI = “git://192.168.1.1/linux-omap.git;protocol=git”
SRCREV = "02a84e66b30a9c9e1c00112892f0226a71098753“
というように、SRC_URIを書いて、md5/shaハッシュではなくリビジョ
ンを指定する
カーネルレシピでは、解凍先のディレクトリを指定しないといけない
必要なdtbを指定。
SUMMARY = "libdrm Tegra K1 append recipe"
EXTRA_OECONF += " --enable-tegra-experimental-api 
"
PACKAGES =+ " ${PN}-tegra "
RRECOMMENDS_${PN}-drivers += " ${PN}-tegra "
FILES_${PN}-tegra = "${libdir}/libdrm_tegra.so.*"
? libdrmが必要だが、デフォルトのレシピではTegra用のビルドがされない
? libdrmのメインラインにTegraK1の対応が取り込まれているので、configureの設定を変更
してビルドされるようにする
? そのままではrpm(ipk/deb)パッケージが作られないので、その設定も追加する
meta-jetson
├── README.md
├── conf
├── recipes-graphics
│ ├── drm
│ │ └── libdrm_%.bbappend
│ ├── mesa
│ │ ├── mesa.inc
│ │ ├── mesa_11.0.9.bb
│ │ └── mesa_11.0.9.bbappend
│ └── wayland
│ ├── weston
│ └── weston_1.9.0.bbappend
└── recipes-kernel
EXTRA_OECONFにtegra用のconfigure
オプションを追加
bbappendレシピを作成
libdrm_tegraのパッケージを作るための記述
SUMMARY = "mesa nouveau append recipe"
PACKAGECONFIG_append = " gallium "
DIR3_FEATURES = "dri3proto presentproto "
DIR3_FEATURES += " ${@bb.utils.contains('DISTRO_FEATURES', 'x11',
'libxshmfence', '', d)} "
PACKAGECONFIG[dri3] = "--enable-dri3, --disable-dri3, ${DIR3_FEATURES} "
GALLIUMDRIVERS = "nouveau"
DRIDRIVERS_append = ",nouveau"
? mesaもlibdrmと同様にnouveauを有効化しないといけない
? Mesaはnouveauの不具合対応が頻繁に行われるため、bbレシピも追加
? 実際は、コピーしてきてバージョンをかえただけ
? バージョンを変えただけだとビルドが通らない場合があるので、その時は内容も修正
? Tegra対応は分離したいので、nouveauを有効化する部分のみbbappendに切り出し
meta-jetson
├── README.md
├── conf
├── recipes-graphics
│ ├── drm
│ │ └── libdrm_%.bbappend
│ ├── mesa
│ │ ├── mesa.inc
│ │ ├── mesa_11.0.9.bb
│ │ └── mesa_11.0.9.bbappend
│ └── wayland
│ ├── weston
│ └── weston_1.9.0.bbappend
└── recipes-kernel
Mesaのベースレシピとbbappendレシピを追加
bbappendの内容は、nouveauを有効化するための記述のみ
galliumの有効化記述もあるが、nouveauを使うために連鎖的に有
効化が必要になっただけ
FILESEXTRAPATHS_prepend := "${THISDIR}/weston:"
SRC_URI += "file://0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch 
file://0002-compositor-drm-Add-support-for-Tegra-Jetson-TK1.patch 
file://0003-Add-glFinish-to-DRM-backend-to-avoid-tearing.patch 
"
? nvidiaのwestonは、westonにパッチをあてているため、Yoctoのレシピで同じ
ようにパッチをあてる
? libdrm-tegraのためのパッチなので、nvidia以外では必要ないことも
? このパッチがwestonのバージョン依存で当たらなくなるため、ポーティングが結構
めんどくさい
meta-jetson
├── README.md
├── conf
├── recipes-graphics
│ ├── drm
│ │ └── libdrm_%.bbappend
│ ├── mesa
│ │ ├── mesa.inc
│ │ ├── mesa_11.0.9.bb
│ │ └── mesa_11.0.9.bbappend
│ └── wayland
│ ├── weston
│ └── weston_1.9.0.bbappend
└── recipes-kernel
Mesaのベースレシピとbbappendレシピを追加
bbappendの内容は、パッチディレクトリの指定と、パッチあての指
定のみ
#MACHINE ?= "beaglebone"
#MACHINE ?= "genericx86"
#MACHINE ?= "genericx86-64"
#MACHINE ?= "mpc8315e-rdb"
#MACHINE ?= "edgerouter"
#
# This sets the default machine to be qemux86 if no other
machine is selected:
MACHINE ??= "jetson-tk1-upstream“
? 作ったBSPレイヤの使い方は簡単
? bblayers.confに作ったbspレイヤを参照する設定を追加
? local.confのMACHINE設定をstep2で作ったbspのconfファイルの名
前にする
meta-jetson
├── README.md
└── conf
├── layer.conf
└── machine
└── jetson-tk1-upstream.conf
あとはいつものようにbuildするだけ!!
? Yocto用のbspレイヤを作ってみた
? 今回はリファレンスボード用のbspを作成した
? 実際にこの実例が生きるのは、カスタムボード用のbspを作る場合
? 想定ユースケース
? カスタムボード用に移植したカーネルを組み込みたい
? 専用のファームウェアを組み込みたい
? 今回の実例はこちら参照
? https://github.com/watatuki/meta-jetson
? 今回は省略しましたが、/bootの下にブートローダのコンフィグを組み込む
ようなレシピも実例にはあります
中華パッド用のカスタムbspとかいかがでしょうか?

More Related Content

What's hot (20)

尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
Etsuji Nakai
?
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Go Maeda
?
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
?
公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项
公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项
公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项
Atsushi Mitsu
?
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
Yoshinori Nakanishi
?
贰迟丑别谤苍别迟の受信処理
贰迟丑别谤苍别迟の受信処理贰迟丑别谤苍别迟の受信処理
贰迟丑别谤苍别迟の受信処理
Takuya ASADA
?
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
?
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
?
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
?
そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?
Atsushi Mitsu
?
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
NTT DATA Technology & Innovation
?
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
?
鲍蝉产接続するアフ?リを开発した时に试行错误した事
鲍蝉产接続するアフ?リを开発した时に试行错误した事鲍蝉产接続するアフ?リを开発した时に试行错误した事
鲍蝉产接続するアフ?リを开発した时に试行错误した事
Masataka Kono
?
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
Kohei Tokunaga
?
颈苍颈迟谤补尘蹿蝉について
颈苍颈迟谤补尘蹿蝉について颈苍颈迟谤补尘蹿蝉について
颈苍颈迟谤补尘蹿蝉について
Kazuhiro Nishiyama
?
継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin
Mei Nakamura
?
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチをOSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
i_yudai
?
惭测厂蚕尝レプリケーションあれやこれや
惭测厂蚕尝レプリケーションあれやこれや惭测厂蚕尝レプリケーションあれやこれや
惭测厂蚕尝レプリケーションあれやこれや
yoku0825
?
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
?
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
Etsuji Nakai
?
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Go Maeda
?
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
?
公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项
公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项
公司システムに厂贰尝颈苍耻虫を适用するときの検讨事项
Atsushi Mitsu
?
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
Yoshinori Nakanishi
?
贰迟丑别谤苍别迟の受信処理
贰迟丑别谤苍别迟の受信処理贰迟丑别谤苍别迟の受信処理
贰迟丑别谤苍别迟の受信処理
Takuya ASADA
?
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
?
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
?
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
?
そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?
Atsushi Mitsu
?
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
NTT DATA Technology & Innovation
?
鲍蝉产接続するアフ?リを开発した时に试行错误した事
鲍蝉产接続するアフ?リを开発した时に试行错误した事鲍蝉产接続するアフ?リを开発した时に试行错误した事
鲍蝉产接続するアフ?リを开発した时に试行错误した事
Masataka Kono
?
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
Kohei Tokunaga
?
颈苍颈迟谤补尘蹿蝉について
颈苍颈迟谤补尘蹿蝉について颈苍颈迟谤补尘蹿蝉について
颈苍颈迟谤补尘蹿蝉について
Kazuhiro Nishiyama
?
継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin
Mei Nakamura
?
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチをOSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
i_yudai
?
惭测厂蚕尝レプリケーションあれやこれや
惭测厂蚕尝レプリケーションあれやこれや惭测厂蚕尝レプリケーションあれやこれや
惭测厂蚕尝レプリケーションあれやこれや
yoku0825
?
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
?

Similar to Yocto bspを作ってみた (20)

Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
Nobuhiro Iwamatsu
?
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Akira Yoshiyama
?
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
Takahiro Himura
?
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境
Kazuhiro Nishiyama
?
第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西
Masahide Yamamoto
?
尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く
尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く
尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く
Tetsuyuki Kobayashi
?
辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた
辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた
辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた
Kazuhiro Nishiyama
?
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
Kouhei Maeda
?
Capistrano
CapistranoCapistrano
Capistrano
Yasuharu Fukuda
?
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
Etsuji Nakai
?
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
?
20170124 linux basic_1
20170124 linux basic_120170124 linux basic_1
20170124 linux basic_1
YUSUKE MORIZUMI
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
Firefox OS + Raspberry Pi
Firefox OS + Raspberry PiFirefox OS + Raspberry Pi
Firefox OS + Raspberry Pi
EnsekiTT
?
Dockerイメーシ?構築 実践テクニック
Dockerイメーシ?構築 実践テクニックDockerイメーシ?構築 実践テクニック
Dockerイメーシ?構築 実践テクニック
Emma Haruka Iwao
?
Mincs 日本語版
Mincs 日本語版Mincs 日本語版
Mincs 日本語版
Masami Hiramatsu
?
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
?
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
Nobuhiro Iwamatsu
?
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Akira Yoshiyama
?
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境
Kazuhiro Nishiyama
?
第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西
Masahide Yamamoto
?
尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く
尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く
尝颈苍耻虫のユーザーランドを颈苍颈迟から全てまるごと驳辞濒补苍驳で书く
Tetsuyuki Kobayashi
?
辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた
辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた
辩别尘耻の谤颈蝉肠惫64に顿别产颈补苍を入れてみた
Kazuhiro Nishiyama
?
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
Etsuji Nakai
?
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
Firefox OS + Raspberry Pi
Firefox OS + Raspberry PiFirefox OS + Raspberry Pi
Firefox OS + Raspberry Pi
EnsekiTT
?
Dockerイメーシ?構築 実践テクニック
Dockerイメーシ?構築 実践テクニックDockerイメーシ?構築 実践テクニック
Dockerイメーシ?構築 実践テクニック
Emma Haruka Iwao
?
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
?

More from wata2ki (8)

鹿児岛らぐハイブリッド开催への道
鹿児岛らぐハイブリッド开催への道鹿児岛らぐハイブリッド开催への道
鹿児岛らぐハイブリッド开催への道
wata2ki
?
尝颈苍耻虫の2038年问题を调べてみた
尝颈苍耻虫の2038年问题を调べてみた尝颈苍耻虫の2038年问题を调べてみた
尝颈苍耻虫の2038年问题を调べてみた
wata2ki
?
驰辞肠迟辞尝罢厂について调べてみた
驰辞肠迟辞尝罢厂について调べてみた驰辞肠迟辞尝罢厂について调べてみた
驰辞肠迟辞尝罢厂について调べてみた
wata2ki
?
しょしんしゃのためのhello world
しょしんしゃのためのhello worldしょしんしゃのためのhello world
しょしんしゃのためのhello world
wata2ki
?
尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 
尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 
尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 
wata2ki
?
Fireduck
FireduckFireduck
Fireduck
wata2ki
?
パッチを投稿してみた话
パッチを投稿してみた话パッチを投稿してみた话
パッチを投稿してみた话
wata2ki
?
Linux kernelのbspとupstream
Linux kernelのbspとupstreamLinux kernelのbspとupstream
Linux kernelのbspとupstream
wata2ki
?
鹿児岛らぐハイブリッド开催への道
鹿児岛らぐハイブリッド开催への道鹿児岛らぐハイブリッド开催への道
鹿児岛らぐハイブリッド开催への道
wata2ki
?
尝颈苍耻虫の2038年问题を调べてみた
尝颈苍耻虫の2038年问题を调べてみた尝颈苍耻虫の2038年问题を调べてみた
尝颈苍耻虫の2038年问题を调べてみた
wata2ki
?
驰辞肠迟辞尝罢厂について调べてみた
驰辞肠迟辞尝罢厂について调べてみた驰辞肠迟辞尝罢厂について调べてみた
驰辞肠迟辞尝罢厂について调べてみた
wata2ki
?
しょしんしゃのためのhello world
しょしんしゃのためのhello worldしょしんしゃのためのhello world
しょしんしゃのためのhello world
wata2ki
?
尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 
尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 
尝颈苍耻虫の蝉别尘补辫丑辞谤别と尘耻迟别虫を见る 
wata2ki
?
パッチを投稿してみた话
パッチを投稿してみた话パッチを投稿してみた话
パッチを投稿してみた话
wata2ki
?
Linux kernelのbspとupstream
Linux kernelのbspとupstreamLinux kernelのbspとupstream
Linux kernelのbspとupstream
wata2ki
?

Yocto bspを作ってみた

  • 2. ? 名前: wata2ki (watatuki) ? 元はハードウェアで画像処理をやっていましたが、現在は組 み込み屋をやっています ? 最近はJetson-TK1/TX1向けのアンオフィシャルYocto BSP を作り、そのうえでディスクトップ環境や別ボード向けのディス トロを動かして遊んでいます ? GitHub ? https://github.com/watatuki
  • 4. ? L.F.(Linux Foundation)のプロジェクトで、正式名称は Yocto Project ? https://www.yoctoproject.org/ ? Linuxのディストリビューションを作るのに必要なツー ル?データを提供 ? 最終的にはpokyという名前のリファレンスディストロとして提 供される ? OpenEmbedded(http://www.openembedded.org/)コミュニティ 由来のプロジェクトで、ツールも共同開発している ? GentooLinuxがクロスビルドになったようなもの
  • 5. ? bitbake ? Yoctoの根幹となるツールで、クロスビルド環境を提供してくれる ? ディストリビューションの構成するソフトのコンフィグやバージョンを Recipeで管理する ? oe-core ? bitbakeで使うレシピのセットで、glibc, x.org, waylandからQtまで、様々 なOSSを標準でビルドできるようにしてくれる ? クロスビルド用のgccもoe-coreが提供してくれる ? リファレンスBSP ? pokyが標準でサポートしているボード向けのBSP ? Qemu, x86, x86-64, beagleboneなど ? LinuxのカーネルやU-boot, OpenGL(mesa)をそのボード向けの設定でビル ドできるようにするレシピの形で提供される ? リファレンスBSPに関しては、少なくともビルドが通ることが確認されている (はず。。。)
  • 6. ? Yoctoでは、自分の作りたいディストロをlayerを組み合 わせて構築する 自分の作りたいディストロ meta (oe-core layer) meta-yocto (yocto layer) meta-jetson (BSP layer) meta-mydistro (my layer) 標準Layer meta-windowmng (layer) BSP Layer ターゲットボード用のカーネルや、ファーム ウェア等 さらに追加したいコンポーネントが入っ たLayerを積み上げる 今回はここの話
  • 7. ? Jetson-TK1でwayland環境を構築したい ? コンポーネントを一つ一つビルド?インストールして動かす環 境をNVIDIAが提供しているが、継続的に使えるようYoctoに 組み込みたい ? Kernelは、Upstream Kernel ? L4Tではなくnouveau/mesaベース ? L4TはX.orgのみでwaylandをサポートしていない ? 使えるものは極力Yoctoのリリースに含まれるものを使う
  • 8. ? Jetson-TK1(最近はTX1も)向けのwayland環境を NVIDIAがgithubで公開している ? https://github.com/NVIDIA/tegra-nouveau-rootfs ? Ubuntu14.04(ARM)のrootfsにパッチをあてたカーネル、nouveauや mesaをビルド?インストールするスクリプトのセット ? westonのディスクトップシェルが動作するrootfsを作ってくれる ? ビルドが通れば… これをベースにBSPを作成
  • 9. ? Yocto/OEのLayerは決まったファイルを置くだけ ? レイヤのスケルトンはyocto-layer create を使って作成 ? Layerの設定が書かれたlayer.confを自動作成してくれる ? 今回は、サンプルレシピの作成は行わない ? Layerディレクトリ名前はmeta-jetson $ yocto-layer create jetson Please enter the layer priority you'd like to use for the layer: [default: 6] 6 Would you like to have an example recipe created? (y/n) [default: n] n Would you like to have an example bbappend file created? (y/n) [default: n] n New layer created in meta-jetson. Don't forget to add it to your BBLAYERS (for details see meta-jetsonREADME). meta-jetson ├── COPYING.MIT ├── README └── conf └── layer.conf
  • 10. ? BSPを作る場合はmachine設定を新規に作成 ? ARM/x86といったアーキテクチャの設定、最適化設定などを記載する meta-jetson ├── README.md └── conf ├── layer.conf └── machine └── jetson-tk1-upstream.conf require conf/machine/include/tune-cortexa15.inc DEFAULTTUNE = "cortexa15hf-neon" PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg" PREFERRED_PROVIDER_virtual/kernel ?= "linux-upstream" PREFERRED_PROVIDER_virtual/mesa ?= "mesa" PREFERRED_PROVIDER_virtual/libgl ?= "mesa" SERIAL_CONSOLE = "115200 ttyS0" KERNEL_IMAGETYPE = "zImage" MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " bootconfig kernel-image kernel-devicetree linux-firmware-nvidia linux-firmware-rtl8168g kernel-modules libdrm-tegra libdrm-kms mesa-megadriver " IMAGE_FSTYPES = "tar.bz2" アーキテクチャ設定と、コンパイラの最適化オプション設定 TegraK1はCortex-A15なので、A15を設定 Kernelレシピを指定 Yoctoで用意されているカーネルは古いので、最新のカーネルを 使えるように独自のレシピを使うように設定 このmachine設定を選択した場合に強制的にインストールする パッケージを指定 bootconfig : jetson-tk1でu-boot起動する設定ファイル kernel-image : /boot にカーネル kernel-devicetree : /boot にdtb kernel-firmware-* : ファームウェア kernel-modules : カーネルモジュール(nouveu等) libdrm-* : libdrmのtegra用パッケージ mesa-megadriver : mesaのドライバパッケージ(nouveau)
  • 11. ? ベースは別のカーネルレシピを流用 ? TIのBSPから流用したファイルをベースに作成 ? defconfigは、arch/arm/configsの下のファイル名を指定する ? カスタムコンフィグにしたい場合は、別途bbappendレシピを使って上書きすると、ディスト ロごとにBSPレイヤを作り直さなくて済む ? Patchは必須ではないが、jetsonの場合はDTBでGPUを有効化したいので、そのため のpatchを追加 ? ベースのlinux-firmwareにnvidiaのファームウェアのパッケージがなかったので、 新規作成 ? 中の構成が頻繁にかわるためappendではなくカスタムレシピを作成。 ? 今回はnvidiaゆえに必要だっただけで、通常は作成しなくてよい meta-jetson ├── README.md ├── conf └── recipes-kernel ├── linux ├── linux-upstream │ │ ├── defconfig │ │ └── linux4.3_tegrak1_gpu_hdmi.patch │ ├── linux-dtb.inc │ ├── linux-upstream_4.7.bb │ └── setup-defconfig.inc └── linux-firmware └── linux-firmware_git.bb TIのレシピの流用品 パッチファイル(GPU有効化) GPUとEtherファームのために作成したファームウェアレシピ
  • 12. ? カーネルレシピはほぼ定型文 ? メンテ時は以下の個所しか変更していません SECTION = "kernel" DESCRIPTION = "Upstream Linux Kernel recipe." LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7" KERNEL_IMAGETYPE = "zImage" inherit kernel require recipes-kernel/linux/linux-dtb.inc require recipes-kernel/linux/setup-defconfig.inc DEFAULT_PREFERENCE = "-1" S = "${WORKDIR}/linux-4.5.2" PR = "r2" SRC_URI = "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.5.2.tar.xz file://linux4.3_tegrak1_gpu_hdmi.patch file://defconfig" SRC_URI[md5sum] = "eae8f700463ea73185027caece5f1c5d" SRC_URI[sha256sum] = "e32339db8365f0f10b873928095da47dd3e8a40f8ea5edd5501320d4ff30209f" KERNEL_DEVICETREE = "tegra124-jetson-tk1.dtb" カーネルのソースを指定 gitにするとcloneがとんでもなく遅いので、tar.xzを使うようにしてい るが、gitでとってくることも可能 カスタムカーネルを使用したい場合は、自宅のgitを指すようにする Gitの場合は、 SRC_URI = “git://192.168.1.1/linux-omap.git;protocol=git” SRCREV = "02a84e66b30a9c9e1c00112892f0226a71098753“ というように、SRC_URIを書いて、md5/shaハッシュではなくリビジョ ンを指定する カーネルレシピでは、解凍先のディレクトリを指定しないといけない 必要なdtbを指定。
  • 13. SUMMARY = "libdrm Tegra K1 append recipe" EXTRA_OECONF += " --enable-tegra-experimental-api " PACKAGES =+ " ${PN}-tegra " RRECOMMENDS_${PN}-drivers += " ${PN}-tegra " FILES_${PN}-tegra = "${libdir}/libdrm_tegra.so.*" ? libdrmが必要だが、デフォルトのレシピではTegra用のビルドがされない ? libdrmのメインラインにTegraK1の対応が取り込まれているので、configureの設定を変更 してビルドされるようにする ? そのままではrpm(ipk/deb)パッケージが作られないので、その設定も追加する meta-jetson ├── README.md ├── conf ├── recipes-graphics │ ├── drm │ │ └── libdrm_%.bbappend │ ├── mesa │ │ ├── mesa.inc │ │ ├── mesa_11.0.9.bb │ │ └── mesa_11.0.9.bbappend │ └── wayland │ ├── weston │ └── weston_1.9.0.bbappend └── recipes-kernel EXTRA_OECONFにtegra用のconfigure オプションを追加 bbappendレシピを作成 libdrm_tegraのパッケージを作るための記述
  • 14. SUMMARY = "mesa nouveau append recipe" PACKAGECONFIG_append = " gallium " DIR3_FEATURES = "dri3proto presentproto " DIR3_FEATURES += " ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxshmfence', '', d)} " PACKAGECONFIG[dri3] = "--enable-dri3, --disable-dri3, ${DIR3_FEATURES} " GALLIUMDRIVERS = "nouveau" DRIDRIVERS_append = ",nouveau" ? mesaもlibdrmと同様にnouveauを有効化しないといけない ? Mesaはnouveauの不具合対応が頻繁に行われるため、bbレシピも追加 ? 実際は、コピーしてきてバージョンをかえただけ ? バージョンを変えただけだとビルドが通らない場合があるので、その時は内容も修正 ? Tegra対応は分離したいので、nouveauを有効化する部分のみbbappendに切り出し meta-jetson ├── README.md ├── conf ├── recipes-graphics │ ├── drm │ │ └── libdrm_%.bbappend │ ├── mesa │ │ ├── mesa.inc │ │ ├── mesa_11.0.9.bb │ │ └── mesa_11.0.9.bbappend │ └── wayland │ ├── weston │ └── weston_1.9.0.bbappend └── recipes-kernel Mesaのベースレシピとbbappendレシピを追加 bbappendの内容は、nouveauを有効化するための記述のみ galliumの有効化記述もあるが、nouveauを使うために連鎖的に有 効化が必要になっただけ
  • 15. FILESEXTRAPATHS_prepend := "${THISDIR}/weston:" SRC_URI += "file://0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch file://0002-compositor-drm-Add-support-for-Tegra-Jetson-TK1.patch file://0003-Add-glFinish-to-DRM-backend-to-avoid-tearing.patch " ? nvidiaのwestonは、westonにパッチをあてているため、Yoctoのレシピで同じ ようにパッチをあてる ? libdrm-tegraのためのパッチなので、nvidia以外では必要ないことも ? このパッチがwestonのバージョン依存で当たらなくなるため、ポーティングが結構 めんどくさい meta-jetson ├── README.md ├── conf ├── recipes-graphics │ ├── drm │ │ └── libdrm_%.bbappend │ ├── mesa │ │ ├── mesa.inc │ │ ├── mesa_11.0.9.bb │ │ └── mesa_11.0.9.bbappend │ └── wayland │ ├── weston │ └── weston_1.9.0.bbappend └── recipes-kernel Mesaのベースレシピとbbappendレシピを追加 bbappendの内容は、パッチディレクトリの指定と、パッチあての指 定のみ
  • 16. #MACHINE ?= "beaglebone" #MACHINE ?= "genericx86" #MACHINE ?= "genericx86-64" #MACHINE ?= "mpc8315e-rdb" #MACHINE ?= "edgerouter" # # This sets the default machine to be qemux86 if no other machine is selected: MACHINE ??= "jetson-tk1-upstream“ ? 作ったBSPレイヤの使い方は簡単 ? bblayers.confに作ったbspレイヤを参照する設定を追加 ? local.confのMACHINE設定をstep2で作ったbspのconfファイルの名 前にする meta-jetson ├── README.md └── conf ├── layer.conf └── machine └── jetson-tk1-upstream.conf あとはいつものようにbuildするだけ!!
  • 17. ? Yocto用のbspレイヤを作ってみた ? 今回はリファレンスボード用のbspを作成した ? 実際にこの実例が生きるのは、カスタムボード用のbspを作る場合 ? 想定ユースケース ? カスタムボード用に移植したカーネルを組み込みたい ? 専用のファームウェアを組み込みたい ? 今回の実例はこちら参照 ? https://github.com/watatuki/meta-jetson ? 今回は省略しましたが、/bootの下にブートローダのコンフィグを組み込む ようなレシピも実例にはあります 中華パッド用のカスタムbspとかいかがでしょうか?