みつきんのメモ

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

2021-01-01から1年間の記事一覧

Yocto Zephyrアプリケーションのコンフィグを変更する

はじめに YoctoでビルドするZephyrアプリケーションのコンフィグを設定する方法を調べた。 micro:bitの5x5 LEDを有効化する。 最終的にはmeta-armの修正が必要となった。 作業環境はYocto Zephyrに独自のアプリケーションを追加してみるを使用する。 環境変…

Yocto Zephyrのアプリケーションをqemu + gdbでデバッグ

はじめに Yocto ProjectでビルドしたZephyrのアプリケーション(elf)をqemuとgdbでデバッグしてみる。 環境 下記で作成した環境をベースに作業する Yocto BBC micro:bit V1向けのZephyrを試してみる Yocto Zephyrに独自のアプリケーションを追加してみる gdb-…

Yocto Zephyrに独自のアプリケーションを追加してみる

はじめに Yocto ProjectでビルドするZephyrに独自のアプリケーションを追加してみる。 環境構築 この環境をベースに作業する。 環境変数設定 bitbake関連のツールを使用するために環境変数の読み込みは行う。 $ source poky/oe-init-build-env build レイヤ…

Yocto BBC micro:bit V1向けのZephyrを試してみる

はじめに YoctoでZephyrをビルドできるっぽいことは知っていたが、試したことがなかったのでやってみる。 使用するバージョンはhardknott 構築手順 ソース取得 下記のコマンドでソースを取得する。 $ mkdir -p mb-hardknott && cd mb-hardknott $ git clone …

emacs markdown-modeで表を作成する

はじめに 筆者はemacsでmarkdownを書く時にはmarkdown-modeのパッケージをインストールして、gfm-modeを使用する。 .emacs/init.elは多分こんな感じ。 ;; Markdown mode (use-package markdown-mode :ensure t :init (add-to-list 'auto-mode-alist '("\\.md…

Yocto Project 3.3(Hardknott)で日本語入力

はじめに Yocto Project 3.3(Hardknott)でラズベリーパイ4を動かすの環境をベースに、Hardknottで日本語入力環境を作成してみる。 かなり古いがyoctoで日本語入力も参考にする。 作業環境の準備 meta-oeをビルド環境に設定する。 $ cd rpi-hardknott $ sourc…

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

はじめに Yocto Project 3.3がリリースされていた。 リリースされた事自体は知っていたが、meta-raspberrypiをビルドする際に、bitbake-layers layerindex-fetchがうまく動かなかったので、しばらく様子を見ていた。 具体的には下記のようなこと。 OpenEmbed…

Yocto Chromiumをビルドする時に何回やってもリンカでSegmentation faultする時の対応

はじめに YoctoでChromiumをビルドする時に下記のようにエラーで終了する。 ... (snip) ... nterface.o | ninja: build stopped: subcommand failed. | WARNING: exit code 1 from a shell command. | ERROR: Task (/home/mickey/work/yocto/rpi-gatesgarth/…

Yocto リードオンリーなルートファイルシステムを構築する

はじめに 組み込みシステムの場合、製品として使用するようなケースではルートファイルシステムをリードオンリーとして、 本体が持つデータを書き換えられないようにすることがある。 Yoctoでは簡単に実現することができる。 実機でやったほうが楽しいのでラ…

Raspberry Pi Pico タイマーでLチカ

はじめに Raspberry Pi Pico(Pico)は4つの64ビットタイマーを持っている。それぞれ割り込みを発生させることができる。 ここまででSysTickやその割り込みを使ってLチカをしてきたが、すべてビジーループでタイミングを測っていた。 今回はWFIを使ってスリー…

Yocto UEFIセキュアブート

はじめに Yoctoでx86_64向けのボードを動かす。その際にUEFIセキュアブートも有効にしてみたいと考えた。そこで、meta-efi-secure-bootというレイヤを見つけた。 実機はROCK Pi X V1.4を使用する。 UEFIセキュアブート UEFIセキュアブートは秘密鍵を使用して…

Yocto bitbake-layers layerindex-fetch

はじめに bitbake-layersコマンドの便利なサブコマンドを見つけた(認識した)。 レイヤ間の依存関係 bitbakeで取り扱うレイヤではlayer.confに下記のようにLAYERDEPENDSを記述することで、依存関係を定義することができる。 LAYERDEPENDS_gnome-layer = "core…

Yocto meta-gnomeでpolkitのエラー

はじめに デフォルトの設定でmeta-gnomeをビルドするとエラーが発生する。 エラーの内容 gnome-control-centerとsystmedがそれぞれで/usr/share/polkit-1/rules.dをインストールしようとしてコンフリクトしている。 Error: Transaction test error: file /us…

Raspberry Pi Pico Systick割り込みを使ってLチカをFlashに書く

はじめに 前回作ったプログラムをFlashから実行できるようにしてみる。 RESUSについて追記(2021/3/10) Flash対応 Makefile diff -Narubp blink_ram_int_systick/Makefile blink_flash_int_systick/Makefile --- blink_ram_int_systick/Makefile 2021-02-27 1…

Raspberry Pi Pico Systick割り込みを使ってLチカをする

はじめに SysTick割り込みを使用してLチカをする。 2021-02-26 Raspberry Pi Pico Systickを使ってLチカを正確にするのコードをベースに作業する。 SysTick割り込み SysTick割り込みはm0+のコアで用意されている割り込みで、この割り込みが発生するとベクタ…

Raspberry Pi Pico Systickを使ってLチカを正確にする

はじめに 「PicoでベアメタルのLチカ(RAMバージョン) その2」として。 これまで作ってきたLチカは、適当な値をforでビジーループするだけだったので、タイミングはいい加減だった。 Cortex-M0+ではコアにSysTickを持っていて、これは難しい設定することもな…

Raspberry Pi Pico J-LlinkでOpenOCD

はじめに J-Link EDUが手元にあるので、OpenOCDでPicoのデバッグができないか試してみた。 接続 下記のように接続する。 Pico ARM-JTAG-SWD SWDIO SWDIO(7) SWDCLK SWDCLK(9) GND GND(4,6,8,10,12,14,16,18,20) VSYS VCC(1) 設定ファイル ${PICO_SDK_PATH}/.…

Raspberry Pi Pico ARM-USB-TINY-H + ARM-JTAG-SWDでデバッグ

はじめに ツイッターでRaspberryPi4が無いケースでOpenOCDでデバッグするにはどういう手段があるか。という話題が出た。 ARM-USB-TINY-H + ARM-JTAG-SWD ARMのMCUのデバッグで安価で使い勝手が良いものとしてはARM-USB-TINY-Hが挙げられる。 しかしこのデバ…

Pico ベアメタルをClang(LLVM)でビルド

はじめに ここまで作ってきたベアメタルのLチカはGCCでビルドしてきたが、それをclangでビルドしてみる。 clang-10のインストール Ubuntu 20.04環境でClangをインストールする。バージョンは10。 $ sudo apt install -y clang-10 lld-10 make Makefile ベー…

PicoでベアメタルのLチカ(FLASH + コンパイル済みBoot Stage2バージョン) その1

はじめに Raspberry Pi Pico SDKでのFlashからのブートについて調べたでは、Flashからブートするための仕組みを調査した。 Boot Stage2に相当する部分を自作するのは結構面倒だということがわかったので、コンパイル済み(CRC計算済み)のBoot Stage2である、 …

Pico SDKのリンカスクリプトを眺める

はじめに リンカスクリプト初心者がPico SDKのリンカスクリプトを眺める。今回眺めるのはmemmap_default.ld。 大きく分けて下記のようなブロックに別れている MEMORY ENTRY SECTIONS elfにもリンカスクリプトの詳しくないので間違っている情報があるはず。 M…

PicoでベアメタルのLチカ(RAMバージョン) その1

はじめに picoprobeでRAMに直接プログラムがロードできるようになったので、難しいboot2のことはおいておいて、 ベアメタルでLチカを試みる。 ホントは、コンパイル済みのboot2を組み込んでLチカしようと頑張ったが、現時点では挫折した。 心の師匠の成果物…

Ubuntu 20.04のPCでRaspberry Pi Picoを2台使ってOpenOCDによるデバッグ

はじめに Raspberry Pi Pico(Pico)はRaspberry Pi4を使用して、SWDでデバッグすることが推奨されているようだが、 Picoが2台ある場合、そのうち1台にpicoprobeというプログラムを書き込むことで、デバッガとして使用することができる。 下記のようにPico SDK…

lxd入門 VM編

はじめに lxdではバージョン4.0から仮想マシン(VM)も扱えるようになった。 コンテナと異なり、CPUやメモリはホストから一部割り当てて使用するためにパフォーマンス的には不利になるが、 カーネル層の機能を使用したい場合など、コンテナでは足りないケース…

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がサポートするテストランナーの中では一番シンプルなもの。 指定されたものを実行するだけのシン…