PetalinuxでWavファイルを再生する(1)
Petalinux コンフィグレーション
公開日:2023年7月31日
前回記事で設計、作成したハードウェア構成をPetalinuxに取り込んでコンフィグレーションを行います。
Petalinuxプロジェクトを作成する
下記のように空のPetalinuxプロジェクトを作成します。 ここでは、petalinux_projという名称で作成しています。
$ petalinux-create --type project --template zynq --name petalinux_proj
システムコンフィグレーション
Petalinuxプロジェクトディレクトリに移動し、Vivadoで作成したxsaファイルを指定してシステムコンフィグレーションを行います。
$ cd petalinux_proj
$ petalinux-config --get-hw-description=../design_1_wrapper.xsa
メニュー画面が開いたら、Root filesystem typeをEXT4 (SD/eMMC/SATA/USB)に設定されていなければEXT4 (SD/eMMC/SATA/USB)に設定します。
以前の記事 を参考に設定を保存してメニューを閉じてください。
カーネルコンフィグレーション
Petalinuxカーネルのコンフィグレーションを行います。
$ petalinux-config -c kernel
コマンド入力後メニューが開くまで少し時間がかります。
その後、Zybo Z7-20 に組み込まれているアナログオーディオデバイスを使うために下記のデバイスドライバーを有効にします。
- ASoC simple sound card support
- Analog Devices SSM2602 - I2C
それぞれの階層は下記の通りです。
Device Drivers
└─ Sound card support
└─ Advanced Linux Sound Architecture
└─ ALSA for SoC audio support
├─ CODEC drivers
| └─ Analog Devices SSM2602 - I2C
└─ ASoC simple sound card support
※Zybo Z7-20 で利用するオーディオコーデックは SSM2603 ですが、互換性があるため SSM2602 で問題ありません
.
.
[INFO] Successfully configured kernel
が出力されるとカーネルコンフィグレーション完了です。
ルートファイルシステムコンフィグレーション
Petalinuxのルートファイルシステムにインストールするパッケージを選択します。
$ petalinux-config -c rootfs
メニューが開いたら、下記を有効にしてください。
Filesystem Packages
├─ base
| └─ i2c-tools
| ├─ i2c-tools
| ├─ i2c-tools-dev
| ├─ i2c-tools-dbg
| └─ i2c-tools-misc
└─ console
└─ utils
└─ alsa-utils
├─ alsa-utils
├─ alsa-utils-aplay
└─ alsa-utils-speakertest
.
.
[INFO] Successfully configured rootfs
デバイスツリーにドライバーの記述を追加する
デバイスツリーとは
デバイスツリーはLinuxにおいて、ハードウェアに関しての情報が記述された設定ファイルです。
デバイスツリーファイルには、テキスト形式のデバイスツリーソース (.dts, .dtsi) とそれをバイナリ形式に変換したデバイスツリーブロブ (.dtb) という種類があり、ビルド時に自動生成されます。
デバイスツリーソースを編集することでハードウェア構成のカスタマイズが可能です。
前回記事で作成したブロックデザインをサウンドカードとして使用するために、デバイスツリーファイルを編集してハードウェア構成を変更します。
デバイスツリーファイルはビルド(petalinux-build)すると以下の場所に生成されます。
$ ls components/plnx_workspace/device-tree/device-tree/
design_1_wrapper.bit hardware_description.xsa pcw.dtsi ps7_init.c ps7_init.html ps7_init_gpl.c skeleton.dtsi system-top.dts
device-tree.mss include pl.dtsi ps7_init.h ps7_init.tcl ps7_init_gpl.h system-conf.dtsi zynq-7000.dtsi
これらのファイルはビルドで自動生成されたファイルなので直接編集しません。
編集可能なデイバイスツリーファイルとして system-user.dtsiが用意されています。このファイルを編集することで自動生成済みの情報に対して上書き・追加します。
編集前は以下の通り system-conf.dtsi がインクルードされているだけです。
$ cat project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
/include/ "system-conf.dtsi"
/ {
};
下記のように編集します。
/include/ "system-conf.dtsi"
/{
sound {
compatible = "simple-audio-card";
simple-audio-card,name = "Zybo-Sound-Card";
simple-audio-card,format = "i2s";
simple-audio-card,bitclock-master = <&cpu_dai>;
simple-audio-card,frame-master = <&cpu_dai>;
cpu_dai: simple-audio-card,cpu {
sound-dai = <&axi_i2s_adi_0>;
clocks = <&misc_clk_0>; // 12288000
};
simple-audio-card,codec {
sound-dai = <&ssm2603>;
clocks = <&misc_clk_0>; // 12288000
};
};
};
&axi_i2s_adi_0 {
#sound-dai-cells = <0>; // only single DAI
clock-names = "ref", "axi";
clocks = <&misc_clk_0>, <&clkc 15>;
compatible = "adi,axi-i2s-1.00.a";
dmas = <&dmac_s 0 &dmac_s 1>;
dma-names = "tx", "rx";
};
&i2c0 {
status = "okay";
ssm2603: ssm2603@1a {
#sound-dai-cells = <0>; // only single DAI
compatible = "adi,ssm2603";
reg = <0x1a>;
};
};
axi_i2s_adi_0 と i2c0 はそれぞれ、pl.dtsi, pcw.dtsiに記述されていて、& で参照しています。
記述されている情報に対して追加・変更したい情報のみこのファイルに記述すればよく、変更のない情報を記述する必要はありません。
※文中に記載されている各種名称、会社名、商品名などは各社の商標もしくは登録商標です。