Linhome SIP-VoIPインターホンシステム(Yocto + Raspberry Pi 2)

bitbakeコマンドによるイメージファイルの再構築

ドライバなどの追加

$ bitbake -c menuconfig virtual/kernel

Support for Google voiceHAT soundcard: <M> ---> <*>

local.confを編集した場合(local.confはsource oe-init-build-envによりコンテナ内のbuild/confディレクトリにあります)、再ビルドします。既に作成したコンテナ、または新たなコンテナを起動して以下コマンドを実行します。

$ docker run --name raspi2 -v ./build:/home/build/poky/build -ti raspberrypi2 bash

# source oe-init-build-env <--- 新規にコンテナを起動した場合
# bitbake -c cleanall core-image-sato
# bitbake -c cleanall linphone-sdk
# bitbake -f linphone-sdk
# bitbake -f core-image-sato
# exit

picamera

picamera — Picamera 1.13 Documentation

cofig.txt

https://www.raspberrypi.com/documentation/computers/config_txt.html

/boot/config.txt

gpu_mem=128

カメラがRaspberry Piで認識されているか確認するために、以下のコマンドを実行します。

# v4l2-ctl --all
Driver Info:
	Driver name      : bcm2835 mmal
	Card type        : mmal service 16.1
	Bus info         : platform:bcm2835_v4l2-0
	Driver version   : 6.6.22
	Capabilities     : 0x85200005
		Video Capture
		Video Overlay
		Read/Write
		Streaming
		Extended Pix Format
		Device Capabilities
.......
.......

テストショット

# v4l2-ctl --stream-mmap --stream-count=1 --stream-to=capture.jpeg

フォーマット確認

# v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture

	[0]: 'YU12' (Planar YUV 4:2:0)
	[1]: 'YUYV' (YUYV 4:2:2)
	[2]: 'RGB3' (24-bit RGB 8-8-8)
	[3]: 'JPEG' (JFIF JPEG, compressed)
	[4]: 'H264' (H.264, compressed)
	[5]: 'MJPG' (Motion-JPEG, compressed)
	[6]: 'YVYU' (YVYU 4:2:2)
	[7]: 'VYUY' (VYUY 4:2:2)
	[8]: 'UYVY' (UYVY 4:2:2)
	[9]: 'NV12' (Y/UV 4:2:0)
	[10]: 'BGR3' (24-bit BGR 8-8-8)
	[11]: 'YV12' (Planar YVU 4:2:0)
	[12]: 'NV21' (Y/VU 4:2:0)
	[13]: 'RX24' (32-bit XBGR 8-8-8-8)

ストリームテスト

# v4l2-ctl --stream-mmap --stream-count=10
<<<<<<< 5.55 fps
<<<

サウンド関連

/boot/config.txt

# I2Sサウンドデバイスを使用する場合
#dtparam=i2s=on
#dtoverlay=hifiberry-dac
#dtoverlay=i2s-mmap
dtoverlay=googlevoicehat-soundcard 

Playback, Captureデバイスの確認

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 [Google voiceHAT SoundCard HiFi voicehat-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

# arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 [Google voiceHAT SoundCard HiFi voicehat-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

ユーザのホームディレクトリに作成。各dBレベルは任意。
~/.asoundrc

pcm.!default {
    type asym
    playback.pcm "plug:softvol"
    capture.pcm "plug:capture_level"
}

ctl.!default {
    type hw
    card 1
}

pcm.voicehat_playback {
    type hw
    card 1
    device 0
    format S32_LE
}

pcm.voicehat_capture {
    type hw
    card 1
    device 0
    format S32_LE
}

pcm.softvol {
    type softvol
    slave.pcm "voicehat_playback"
    control.name "Softvol Playback Volume"
    control.card 1
    min_dB -3.0
    max_dB 30.0
}

pcm.capture_level {
    type softvol
    slave.pcm "voicehat_capture"
    control.name "Level Capture"
    control.card 1
    min_dB -3.0
    max_dB 30.0
}
項目 hw:0,0 plughw:0,0
フォーマット変換 なし(エラーになる場合あり) あり(自動で変換)
柔軟性 デバイスが指定されたフォーマットをサポートする必要がある フォーマットやサンプリングレートの指定が柔軟
パフォーマンス 高速(直接アクセス) 変換処理により若干遅くなる可能性がある

I2S接続例

Adafruit I2S MEMS microphone and Raspberry Pi Zero W

https://forums.adafruit.com/viewtopic.php?t=211692


デバイスツリー

デバイスツリーは、ハードウェア構成やリソース(CPU、メモリ、周辺機器など)を記述した構造化データで、カーネルがハードウェアを初期化するために使用します。

  • 形式: デバイスツリーはソースコード(DTS: Device Tree Source)で記述され、コンパイルされるとバイナリ形式(DTB: Device Tree Blob)になります。
  • 役割:
    • カーネルが直接ハードウェアを検出する代わりに、DTB を利用して必要なハードウェア情報を取得。
    • Raspberry Pi では、SoC(System on Chip)や周辺機器の構成を記述するために使用。

デバイスツリーオーバーレイ

デバイスツリーオーバーレイ(DTO)は、デバイスツリーに対する追加設定や修正を行う仕組みです。これにより、基本のデバイスツリーをカスタマイズせずに、特定の周辺機器や拡張機能を有効化できます。

  • 形式: ソースコード(DTS)を .dtbo(バイナリ形式)としてコンパイルして使用します。
  • 役割:
    • GPIO ピンに接続されたハードウェアの設定を記述。
    • 特定のドライバや周辺機器を有効化。
    • オリジナルのデバイスツリーを変更せずに機能を追加。

オーバーレイファイル一覧

注)googlevoicehat-soundcard.dtboは別途コンパイルが必要

googlevouicehatdts ファイルからオーバレイファイルを手動でコンパイル(raspi2コンテナ内で実行)。

$ find . -name "*.dts" | grep googlevoicehat
./build/tmp/work-shared/raspberrypi2/kernel-source/arch/arm/boot/dts/overlays/googlevoicehat-soundcard-overlay.dts
$ sudo apt install device-tree-compiler
$ dtc -@ -I dts -O dtb -o googlevoicehat-soundcard.dtbo build/tmp/work-shared/raspberrypi2/kernel-source/arch/arm/boot/dts/overlays/googlevoicehat-soundcard-overlay.dts

注)dtc(Device Tree Compiler)は、多くの Linux システムで利用可能なユーティリティで、デバイスツリーソース(DTS)ファイルをコンパイルしてバイナリ形式のデバイスツリーブロブ(DTB/DTBO)ファイルを生成します。

作成された googlevoicehat-soundcard-overlay.dtbo を SDカードの /boot/ovelays にコピーします。