現在位置 : ホーム > PIXELA Technical Expertise > Petalinux > サウンドカードドライバをビルドする

PetalinuxでWavファイルを再生する(2)
サウンドカードドライバをビルドする

公開日:2023年7月31日

前回記事 でVivadoからビットストリームを作成し、 .xsaファイルを作成しました。今回はこれを元にPetalinuxのイメージ作成を始めます。

自作のサウンドカードデバイスとして登録するために、標準のデバイスドライバ群のソースコードを一度展開したうえで、コードを追加、その後 petalinux-config/petalinux-build を実行してOS作成、という手順で進めます。

Petalinuxビルドプロジェクトを用意

まずは、Zynqのテンプレートを使って petalinux-create を行い、SDカード上のEXT4パーティションに root filesystem を作るように設定します。

$ petalinux-create --type project --template zynq --name petalinux3
$ cd petalinux3
$ petalinux-config --get-hw-description=../design_1_wrapper.xsa
module名 メニューの位置 設定
Root filesystem type Image Packaging Configuration EXT4 (SD/eMMC/SATA/USB)

カーネルをビルドし直す

つぎに、自作のドライバをカーネルへ静的に組み込むため、一度カーネルのソースコードを展開し、ビルドし直してみます。

Petalinuxのツールを使って、ソースコードを展開します。

$ petalinux-devtool modify linux-xlnx
[INFO] Sourcing buildtools
[INFO] Sourcing build environment
[INFO] Generating workspace directory
[INFO] devtool modify linux-xlnx 
NOTE: Starting bitbake server...
...

時間がかかりますが、展開が完了するとフォルダ直下に

./components/yocto/workspace/sources/linux-xlnx

というフォルダが生成され、中に様々なソースコードが用意されている事が確認できます。

ドライバを追加する

つぎにサウンドカードのドライバソースを追加します。

ドライバのコードの書き方は、Linuxドライバと同様のため、詳細については別途まとめることとし、ここでは簡易版として用意したコードを使って、「ドライバを用意しカーネルに組み込む」という流れを追いかけることにします。

以下のzipファイルを展開すると、 zybo/ というフォルダと中身が生成されます。

簡易I2Sオーディオドライバ

./components/yocto/workspace/sources/linux-xlnx/sound/soc/xilinx/xlnx_pl_snd_card.c

を元に、 zedboard向けdriver を参考にして、必要最低限動作するまでを記載しています。

CODECの周波数変換部分が未完のため、実行時に明示的に周波数変換が必要です。(今後の課題)

ドライバが用意できたら配置します。Zyboの専用サウンドカードドライバとして、場所は以下としました。

$ mkdir -p ./components/yocto/workspace/sources/linux-xlnx/sound/soc/zybo
$ cp -r <driver-source-dir> ./components/yocto/workspace/sources/linux-xlnx/sound/soc/zybo

さらに Makefile と カーネルのコンフィグレーション画面に追加するための Kconfig を編集します。

./components/yocto/workspace/sources/linux-xlnx/sound/soc/Makefile

に以下を追加

obj-$(CONFIG_SND_SOC)	+= zybo/
./components/yocto/workspace/sources/linux-xlnx/sound/soc/Kconfig

に以下を追加

source "sound/soc/zybo/Kconfig"

この状態で petalinux-config -c kernel を実行します。

次の順で各moduleを全て有効( <*> ) に変更します。

module名 メニューの位置
Audio support for the Xilinx I2S Device Drivers → Sound card support → Advanced Linux Sound Architecture → ALSA for SoC audio support
Audio support for the Xilinx audio formatter Device Drivers → Sound card support → Advanced Linux Sound Architecture → ALSA for SoC audio support
Audio support for the Zybo SSM2603 sound card with Xilinx IP
(上の2moduleを有効にすると現れる)
Device Drivers → Sound card support → Advanced Linux Sound Architecture
Xilinx I2C controller Device Drivers → I2C Support → I2C Hardware Bus Support
Analog Devices SSM2602 CODEC -I2C Device Drivers → Sound card support → Advanced Linux Sound Architecture → ALSA for SoC audio support → CODEC drivers
kernel config

kernel config(クリックで拡大)

kernel configurationを終了し、続いて rootfs のmodule追加を行います。

module名 メニュー位置
alsa-utils Filesystem Packages → console → utils → alsa-utils
alsa-utils-aplay Filesystem Packages → console → utils → alsa-utils
alsa-utils-speakertest Filesystem Packages → console → utils → alsa-utils
alsa-plugins Filesystem Packages → multimedia → alsa-plugins

設定が終わればこちらも configuration終了させます。

デバイスツリー の編集

最後に デバイスツリー project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi を下記のように修正します。

/include/ "system-conf.dtsi"
/ {
};

&axi_iic_0{
    status = "okay";
    ssm2603: ssm2603@1a {
        #sound-dai-cells = <0>;   // only single DAI
        compatible = "adi,ssm2603";
        clock-name ="mclk";
        clocks =<&misc_clk_0>;
            reg = <0x1a>;
    };
};

&i2s_receiver_0{
    audio-codec = <&ssm2603>;
};
    
&i2s_transmitter_0{
    audio-codec = <&ssm2603>;
};

これでpetalinux-buildのためのconfigが完了です。

文中に記載されている各種名称、会社名、商品名などは各社の商標もしくは登録商標です。

PIXELA Technical Expertise

当社が技術学習するための情報を体系的に整理したものです。多くのエンジニアの一助になればと考え公開しています。

Petalinux 記事一覧

Petalinuxを動かしてみる

PetalinuxでWavファイルを再生する(1)

PetalinuxでWavファイルを再生する(2)

応用編