/ 最新kernel sourceでrt-kernel環境を構築 ついでにdriver改造

最新kernel sourceでrt-kernel環境を構築 ついでにdriver改造

[root@alarm ~]# uname -a
Linux alarm 6.3.0-rc4-rt1-v8 #1 SMP PREEMPT_RT Thu Mar 30 20:12:33 JST 2023 aarch64 GNU/Linux

[root@alarm ~]# alsacap
*** Scanning for playback devices ***
Card 0, ID `sndrpirpidac', name `snd_rpi_rpi_dac'
Device 0, ID `RPi-DAC HiFi pcm1794a-hifi-0', name `RPi-DAC HiFi pcm1794a-hifi-0', 1 subdevices (1 available)
2 channels, sampling rate 8000..768000 Hz
Sample formats: S16_LE, S24_LE, S32_LE
Subdevice 0, name `subdevice #0'

これが実現出来た組合せ(3/30現在)

patch: patch-6.3-rc1-rt1.patch.xz
source: https://github.com/raspberrypi/linux/tree/rpi-6.3.y
VERSION = 6
PATCHLEVEL = 3
SUBLEVEL = 0
EXTRAVERSION = -rc4

現実に戻って冷静になると...
まずrpi-dacドライバーのソース部分をイジって
本来のpcm1794aのハードウェア仕様とはかけ離れた仕様に改造している。
この改造をしても一般的なハードにはメリットがない様に思う。
DSD音源ファイルをDoP、I2S形式で出力する場合にだけメリットがある様に思う。
自分の環境ではAK4137というサンプリングコンバーターICとの組合せで動作を確認している。
RaspberryPiはMCLKを出力出来ないため一般的なスレーブモード動作のDACセットと組み合わせるためには
MCLKを発生させなければならないから
例えばAlloラズパイ用リクロッカー KALI Reclocker基板等と組み合わせる必要がある。
まだ試していないがこの基板使用時に組み合わせるドライバーもrpi-dacドライバーなので
恐らく動作する様に思う。

参考URL:
0028-nikkov-i2s-spdif-2.0.patch
ALSA: pcm: Add support for 705.6KHz and 768KHz sample rate
NanoPi-NEO2 の I2SでMCLK出力 & 384kHz, 768kHz, 1536kHz, 8kHz対応
linux-kernel-projects-rt-6.3
RaspberryPiに最新のRT-Linuxを入れる方法
Raspberry Pi 3とリアルタイムカーネル(1)[RT Preempt導入編]

追記 3/31 intel i9 j8でビルドしてこのぐらいの時間がかかる。

TIME



作業概要
1.kernel sourceにリアルタイムカーネルパッチを当てる。
2.RPi-DACの仕様変更のため下に示した部分のsourceを変更する。
3.クロスコンパイル環境でコンパイルを行う。
4.エラー無くコンパイルが終了したらSDカードの該当部分にコピー、再起動して確認する。

パッチと言うものを作った事が無いのでこれで...
#----sound/soc/codecs/pcm1794a.c----------------------------#
29c29
< .rates = SNDRV_PCM_RATE_8000_768000,
---
> .rates = SNDRV_PCM_RATE_8000_192000,
31,32c31
< SNDRV_PCM_FMTBIT_S24_LE |
< SNDRV_PCM_FMTBIT_S32_LE
---
> SNDRV_PCM_FMTBIT_S24_LE
#----include/sound/pcm.h------------------------------------#
124,126d123
< #define SNDRV_PCM_RATE_705600 (1U<<15) /* 705600Hz */
< #define SNDRV_PCM_RATE_768000 (1U<<16) /* 768000Hz */
<
139,143c136,138
< #define SNDRV_PCM_RATE_8000_384000 (SNDRV_PCM_RATE_8000_192000|SNDRV_PCM_RATE_352800|¥
< SNDRV_PCM_RATE_384000)
< #define SNDRV_PCM_RATE_8000_768000 (SNDRV_PCM_RATE_8000_384000|SNDRV_PCM_RATE_705600|¥
< SNDRV_PCM_RATE_768000)
<
---
> #define SNDRV_PCM_RATE_8000_384000 (SNDRV_PCM_RATE_8000_192000|¥
> SNDRV_PCM_RATE_352800|¥
> SNDRV_PCM_RATE_384000)
#----sound/core/pcm_native.c--------------------------------#
2460c2460
< 48000, 64000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000
---
> 48000, 64000, 88200, 96000, 176400, 192000, 352800, 384000
#----sound/soc/bcm/bcm2835-i2s.c----------------------------#
770c770
< .rate_max = 768000,
---
> .rate_max = 384000,
780c780
< .rate_max = 768000,
---
> .rate_max = 384000,

KERNEL=kernel8 make menuconfig ARCH=arm64 CROSS_COMPILE=/usr/bin/aarch64-linux-gnu-
を実行する時に忘れてはいけない事!
CONFIG_PREEMPT_RT=y
CONFIG_HIGH_RES_TIMERS=y

— posted by くま at 08:30 pm   commentComment [2] 

この記事に対するコメント・トラックバック [2件]

Up1. えふ — 2023/04/03@16:38:54

ご無沙汰しています。

本記事に触発されて(^^;、当方もカーネル・ビルドしてみました。
当方の場合はサンプリングレートの拡張ではなく、rpi4をデジタルレコーダー化したくてドライバー改造しました。

久しぶりに覗いたら、「rpi-dac.c」は無くなってますね。「rpi-simple-soundcard.c」に統合されたようですね。ちなみに、こんな感じ。まだ実際のテストはしていませんが。

hideman@raspberrypi:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: sndrpirpidac [snd_rpi_rpi_dac], device 0: RPi-DAC HiFi pcm1794a-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0

Owner Comment くま  2023/04/03@20:04:19

なるほどキャプチャーデバイスにもなるのですね。
もしかしてI2S信号が出来るとか...
録音ソフトは何が使えるのか興味があります!

この記事に対するこれ以上のコメントはありません

<< 2023.3 >>
SMTWTFS
   123 4
5 6789 1011
1213 14 15161718
1920 2122 23 24 25
26 27282930 31 
 
























T: Y: ALL: Online:
ThemePanel
Created in 0.2552 sec.