みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

lxd入門

はじめに コンテナ技術としてはDockerが有名だが、こちらはアプリケーションコンテナとなっている。 LXDはシステムコンテナという位置づけになっているが、これらがどう違っているのかわからなかった。 DockerとLXDの大きな違いはセッションのライフサイクル…

USB per-port power switching対応ハブガチャを引いてみた

はじめに USBハブにはper-port power switching(PPPS)という機能に対応しているものがある。 これはポート毎に給電を制御するものであって、これが使えるとそのハブに接続されたUSB機器の電源をPCから制御することができる。 USBハブのポートが供給する電力…

Raspberry Pi Pico SDKでのFlashからのブートについて調べた

はじめに 私のベアメタルの心の師匠であるdwelch67さんが、さっそく何か作っていたのでパクる勉強するべく中身を眺めていた。 リンカスクリプトの下記の部分のLENGTH = 0xFCが引っかかったので調べてみた。 MEMORY { flash : ORIGIN = 0x10000000, LENGTH = …

Raspbery Pi Pico Ubuntu20.04上にSDK環境構築

はじめに ラズベリーパイPico(RPi Pico)が入手できた。 開発環境としてラズパイ4が必要とされているが実際のところそうでもなさそうなのでUbuntu 20.04に開発環境(SDK)を構築しLチカを動かしてみる。 pico_setup.shについて C/C++の開発環境を構築するために…

CMakeでGoogleTest(gtest_add_tests vs gtest_discover_tests)

はじめに CMakeにはCTestというテストランナーがある。 CTestはテスト用の実行ファイル(テストバイナリ)が1つのテストとして認識される。 GoogleTest(GTest)のようなテストフレームワークの場合、1つのテストバイナリに複数のテストケースが含まれることが常…

CMake C++でユニットテスト入門(初級編)

はじめに C++でコードを書く時にユニットテストも書きたい。 CMakeにはテストを実行するための仕組みがある。 CTest CTestはいわゆるテストランナーで、CMakeがサポートするテストランナーの中では一番シンプルなもの。 指定されたものを実行するだけのシン…

PlatfromIOでArduino UNO + 2.4 TFT LCD Shield(ILI9341)を動かす

はじめに SPI接続のILI9341のLCDが欲しくてこれを買ったがSPIではなく届いてみると8ビットパラレルのモジュールだったので絶望した。 きっとポチッとしたときは眠たかったんだと思う。 しかし買ってしまったものは仕方ないので動かしてみることにした。 Plat…

YoctoProject CVE Checkについて調べる

はじめに bitbakeではビルドするパッケージの脆弱性をCVEによってチェックを行う機能がある。 使い方 local.confに下記を追加する。 INHERIT += "cve-check" すると、各パッケージのタスクにdo_cve_checkが追加される。 bitbakeを実行すると、このタスクが実…

Docker入門

はじめに Dockerに入門してみる。 作業環境はUbuntu 20.04 環境設定 aptでも提供されているが、Install Docker Engine on Ubuntuの手順でインストールしたほうがトラブルは少なそう。 apt版のアンインストール $ sudo apt purge docker docker-engine docker…

Giant BoardをYoctoに対応する

はじめに Giant BoardをDebian GNU/Linux 9 (stretch)で動かす動かしたGiant BoardをYoctoProjectに対応する。 ここでは新規ボード向けにYoctoProjectのレイヤを作る最小限の手順を紹介する。 新規ボードのレイヤを作る YoctoProjectが未対応のボードに対応…

kdb入門

はじめに カーネルデバッガが便利だという噂は聞いたことがあったが、実際使ったことがなかった。 kdbをすこしだけ試してみたのでメモ。 kdb vs kgdb Linuxのカーネルデバッガを調べるとかならずkdbとkgdbが引っかかる。 これらは別物で、どちらが良い悪いは…

pandocのpdf出力にwkhtmltopdfを使ってみる

はじめに pandocでマークダウンをPDF化する(LaTexなし)でwkhtmltopdfの存在を知った。 この記事ではWindows環境での話だったので、Ubuntu20.04で同様のことができないか確認した。 wkhtmltopdfのインストール Stableなリリースはここで確認できる。 執筆時点…

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 [-…

BBBでu-bootのスタンドアロンアプリを試す

はじめに u-bootのスタンドアロンアプリのサンプルを動かす。 ターゲットはBeagleBone Black(BBB) ただ、BBBを使うといろいろと罠がある。 動いてるu-bootが違う SDカードにMLOを含めてu-bootやカーネルを入れたはずなのに、UARTコンソールで表示されるu-boo…

YoctoProjectのライフサイクル

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

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

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

DarlingをUbuntu 18.04で試す

はじめに ちょっと前にツイッターでLinux上で動くmacOSのエミュレータDarlingというやつの情報が流れてきた。 wineのmacOS版みたいな感じのようだ。興味が湧いたので自分でも試してみる。 環境はUbuntu 18.04。 依存パッケージのインストール sudo apt insta…

CMakeLists 覚書 (2020年版)

はじめに 以前にもCMakeLists.txtの書き方をまとめたが内容が古くなったので改めて調べ直した。当時の理解が甘かったところやCMakeが3になってできることなども対応した。 Ubuntu 20.04では3.16に対応しているため、そのバージョンで使用できる機能を紹介す…

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のキーボード・マウスを接続したが、 全く反応しなかった。 原因 イメージに必要なドライバがインストールされていないことが原因だった。 下記のコマンドでカーネルコンフィグを確認したところ必要…

Giant BoardをDebian GNU/Linux 9 (stretch)で動かす

Giant Boardが届いた。 このボードにはCortext-A5コアのATSAMA5D27-D1G-CUが搭載されている。 MICROCHIPによると、こういうものらしい。 The SAMA5 series are high-performance, ultra-low power ARM Cortex-A5 core based MPU devices. They support multi…

Bashスクリプトで複数のテーブルを組み合わせて使用する

はじめに タイトルいったい何のことか伝わらないと思うので。 いわゆる2次元配列っぽいことをしたいというか、要素数の異なる複数のテーブルを多重ループで回す感じ。 2次元配列が近いと思って調べたけど、自分のやりたいこととうまく合致しないかな。と。 b…

PlatformIO Digisparkを動かす

はじめに ShigezoneでDigisparkを購入したのPlatformIOで動かしてみる。 書き込みの時にコツがいるのでメモっておく。 プロジェクトの作成 作業用ディレクトリを次のように作成する。 $ mkdir -p ~/pio/digispark $ cd ~/pio/digispark このボードのCPUはATT…

ASF傘下に入ったNuttXをビルド

はじめに NuttXはASFのIncubatorプロジェクトへ採択され、リポジトリがBitBucketからGitHubに変更された。 今後はプルリクエストなどもGitHubで受け付ける。 ソースコードを取得 GitHubからソースコードを取得するには次のようにする。 $ git clone https://…