みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

yocto

YoctoのSDKでOut-of-treeのカーネルモジュールをビルドする

はじめに bitbake meta-toolchainや-c populate_sdkで作成したSDKを使用してOut-of-treeのカーネルモジュール(ドライバ)をビルドする時に少しハマったのでメモしておく。 SDKにカーネルソースを含める 作成されたSDKに確実にカーネルのソースコードを含める…

meta-clangの使い方

はじめに meta-clangの使い方を調べた。 meta-clangはbitbakeでのパッケージのビルドやSDKでgccの代わりにclangを使えるようにするためのレイヤ。 meta-clangを使う 既存のビルド環境にmeta-clangを組み込むには下記のようにする。 $ git clone https://gith…

meta-qt6を試す

はじめに Qt 6 in OpenEmbedded and Yoctoが気になったので試してみる。 ここを見る限りまだdevっぽい。 meta-qt6を覗いてみる layer.conf ...(snip)... LAYERDEPENDS_qt6-layer = "core" LAYERSERIES_COMPAT_qt6-layer = "zeus dunfell gatesgarth" ...(sni…

recipetoolでバイナリパッケージを作る

はじめに recipetoolでバイナリパッケージを作ってみる。 ちなみに今回は作ることが目的のため、作ったものの動作確認はしていない。 reciptool オプションの確認 $ recipetool create --help NOTE: Starting bitbake server... usage: recipetool create [-…

YoctoProjectのライフサイクル

はじめに YoctoProjectのリリースバージョンを確認するにはReleasesのページを参照する。 その際にSupport LevelがEOLになっているものは既にサポートが切れていると言えそう。 1つ気になったのはDunfell(3.1)のSupport Levelを見るとLong Term Supportとな…

YoctoProject 自分のレイヤから既存のbbclassの挙動を上書きする

はじめに 例えば既存のbbclassにデバッグ用のログを追加したり独自の改造を実験したい場合でも、 既存のレイヤのソースコードに手を加えるのは避けたい。 そのような場合、ちょっとした工夫で自分のレイヤから既存のbbclassの挙動を上書きすることができる。…

Kasのコンフィグファイルを提供してみる

はじめに なにか適当なレイヤをでっち上げて、kasのコンフィグファイルを作ってみる。 サンプルのレイヤとしてラズパイ向けにハローワールドプログラムを追加したレイヤを作成する。 環境の作成 ソース取得 ラズパイ環境のビルドのためのレイヤをダウンロー…

Yocto meta-raspberrypi環境の作成にkasを使ってみる

はじめに meta-raspberrypiのQuick Startを眺めていると、Quick Start with kasという項目ががあった。 kasというコマンドに見覚えがなかったので調べてみると、下記のようにあった。 This tool provides an easy mechanism to setup bitbake based projects…

Yocto meta-raspberrypi環境の書き込みにbmaptoolを使ってみる

meta-raspberrypiでbitbakeして作成されるイメージがいつの間にかrpi-sdimgからwic.bz2になっている。 イメージを書き込む手順もddやEtcherからbmaptoolになっている。 dunfellのブランチを使用して、最近の手順で試しにラズパイ4を動かしてみる。 構築手順 …

YoctoのSDKでスタティックライブラリしか提供していないパッケージを使う

はじめに meta-oeなどには様々なライブラリのパッケージが提供されている。 その中には依存関係のあるパッケージのビルド時にだけ使用する、*.aしか提供しないパッケージも存在する。 SDKを使用してアプリケーションを開発する際にそのようなパッケージの提…

Yocto環境でLogitech Unifyingデバイスが動かない場合

はじめに Jetson NanoにYocto環境を作ってLogtech Unifyingのキーボード・マウスを接続したが、 全く反応しなかった。 原因 イメージに必要なドライバがインストールされていないことが原因だった。 下記のコマンドでカーネルコンフィグを確認したところ必要…

Yocto Project 3.0(Zeus)でラズベリーパイ4を動かす

はじめに 技適が通り、やっと国内で流通し始めたラズベリーパイ4が手に入ったので、Yocto Projectで動かしてみる。 発熱がすごいらしいのでファン付きのケースも同時に購入した。 構築手順 ソース取得 依存関係がいつの間にか改善されている。最小限の構成で…

ラズベリーパイ3でYocto Project 3.0(Zeus)を試す

はじめに Yocto Project 3.0(Zeus)がリリースされていたのでラズベリーパイ3で動かす。 構築手順 ソース取得 $ mkdir -p rpi-zeus/layers $ cd rpi-zeus/layers $ git clone git://git.yoctoproject.org/poky.git -b zeus $ git clone git://git.yoctoproje…

ざっくりとALSAとPulseAudioの関係(の続きのようなもの)

はじめに 以前に書いた2015-04-04 ざっくりとALSAとPulseAudioの関係が未だにアクセスがあるようなのでちょっと振り返ってみる。 基本的な理解としては、 最終的に音を鳴らすのはデバイス デバイスを叩くためにデバイスドライバ(カーネルランド) サウンド関…

Yocto環境 callgrindでコールグラフを作成する

はじめに Linuxのユーザー空間のアプリをデバッグする際に、関数が実際にどのように呼び出されているのかを見たいことがある。 valgrindにはcallgrindというツールがあり、これを使うとコールグラフを生成することができる。 ターゲットにRPi3 Model Bを使用…

ラズベリーパイ3 warriorのglimagesinkがエラー

2019/10/09 追記 はじめに warrior(2.7)でcore-image-baseを作ってgstreamerで遊ぼうとしたら、次のコマンドでエラーが発生した。 $ export GST_GL_WINDOW=dispmanx ; export GST_GL_API=gles2 ; export GST_GL_PLATFORM=egl $ gst-launch-1.0 v4l2src devic…

yoctoでもRust

はじめに 最近流行りのRust。meta-rustを使えばyocto環境でもRustアプリケーションを使えるようにできる。 meta-rustネタとしてはこちらに先を越されたが、試したブランチがsumo、rockoと古めなのと観点がRust開発者よりなので、本記事ではすこしyocto的に見…

yoctoでjetson nanoを動かす

はじめに meta-tegraがjetson nanoに対応したので、yoctoで動かしてみる。 いくつか注意点 readmeに重要な注意点がいくつか書いてある。 jetpackは必要 cuda10を使用する関係でgccは7系固定 Jetson-TX1についても書いてあるけど関係ないので無視。 そして最…

Yocto gdbserverでリモートデバッグ

はじめに gdbserverによるリモートデバッグ環境を今まで真面目に作ったことがなかったので調べてみた。 詳細な手順はここで紹介されている。 ターゲットはラズベリーパイ3。 この方法は、ターゲットにインストールされている既存のアプリケーションのデバッ…

meta-raspberrypyの環境でlinux5.0のdevice-tree-overlaysがビルドできない問題の調査(3/15追記)

はじめに ただしこっちのカーネルでもoverlaysがビルドエラーを起こすので、それは調査する必要がある。 ので調査した。 ログを観察する タスクごとのログファイルはtmp/work/raspberrypi3-poky-linux-gnueabi/linux-raspberrypi/1_5.0.0+gitAUTOINC+00794df…

raspberrypi3 yoctoでLinuxカーネル5.0を試す(ラズパイカーネル編)

はじめに RPiのカーネルはこっちで管理されているが、まだ5.0-rc8なのでバニラカーネルを試すことにした。 もう-rc8が取れてたので、こっちも動かしてみる。 基本的な方針は前回と変わらずに下記のようにする。 meta-raspberrypiのカーネルとはバージョンが…

yocto SSH越しでbitbake virtual/kernel -c menuconfigが失敗する場合の対処

はじめに ubuntuを使っていて、SSH越しにbitbake virtual/kernel -c menuconfigや-c devshellをすると、次のエラーが出て失敗する事がある。 ERROR: linux-raspberrypi-1_5.0.0+gitAUTOINC+00794df915-r0 do_menuconfig: Unable to spawn terminal auto: Exe…

Yoctoターゲットのセルフコンパイル環境でカーネルモジュールをビルド

はじめに Yoctoのセルフコンパイル環境でout-of-treeのカーネルモジュールをビルドする。 普通にビルドしようとエラーが発生するのでその回避方法をメモしておく。 hello-mod 今回はrecipe-skeleton/recipes-kernelにあるhello-modをラズベリーパイ3上でビル…

yoctoでkodiをつくる

メディアセンターのディストリビューションをつくってみる。 環境構築 ラズベリーパイ3向けの環境。いつものやつ。 sumo(2.5)をベースにすると後述のCMAのエラーが発生するため、thud(2.6)をベースにする。 ソース取得 $ mkdir -p rpi-kodi/layers $ cd rpi-…

ラズベリーパイ3 Yoctoでdebパッケージを使用する

Yoctoでは、デフォルトでrpmを使用してレシピごとのパッケージを作成し、 OSイメージを作成する段階で、それらをインストールすることでソフトをインストールしている。 core-image-minimalやcore-image-base、rpi-basic-imageの最小構成のイメージでは、 パ…

ラズベリーパイ3でthudを試す

yoctoの最新版がやっとリリースされた。バージョンは2.6で、コードネームは「Thud」. 早速、ラズベリーパイ3で動かして見る。 環境構築 いつものやつ。 INITはsystemdで。 ソース取得 $ mkdir -p rpi-thud/layers $ cd rpi-thud/layers $ git clone git://gi…

yoctoでセルフコンパイル環境を作成する

yoctoではクロスコンパイル用のSDKを簡単に作成することができる。 実はセルフコンパイル環境もさほど難しくなく作成できるが、こちらはあまり知られていない気がする。 クロスコンパイルできる環境があれば、PCのほうがリソースはリッチなのでコンパイル時…

raspberrypi3 model b+ USBブート

ラズベリーパイ3 Model B+は、初期状態でUSBブートが可能になっている。 もともとのラズベリーパイ3(Model B)では、 OTPという一度だけ書き込みができる特殊なメモリの設定を変更することでUSBブートができるらしいのだが、 間違った設定をすると文鎮化する…

avahi-autoipdでDHCPサーバが無い場所でもIP通信

USB-Ethernet変換を使って、ラズパイなどのボードと1対1で接続するようなケースでは、 DHCPサーバをいちいち用意するのが面倒。 そういう場合でも、SSHでログインなどしたかったりするのでTCP/IPで通信したい。 そこでavahi-autoipdを使うとIPアドレスを解決…

Flask-Bootstrap + Ajax(jQuery) + RPi.GPIOでLEDを制御してみる

ここ何回かにわたって、pythonでFlask-BootstrapやAjaxのお話をしてきた。 Flaskでpythonのウェブアプリケーションを作る Flask-Bootstrapを使ってみる Flask-BootstrapでjQuery Flask-BootstrapでAJAX(jQuery) なぜ急にFlaskでAjaxだったのか。実は今回のこ…