我试图说服声卡在类似于 Avnet ZED 板的自定义硬件上工作。
原始驱动程序示例基于经过大量修改(普通补丁大约 180k 行)的 3.14.12 内核,称为 zed_adau1761。 “声卡”不是在一个驱动程序内处理的,它分为三个逻辑部分:
- 编解码器驱动程序adau1761-i2c.c,
- 负责处理流数据 axi-i2s.c 的驱动程序,
- 将上述两者设置为协同工作的驱动程序,zed_adau1761.c。
与前两个驱动程序不同,第三个驱动程序可能从未被主流化,并且仅存在于内核的 Analog Devices Github 分支中现在可能已不复存在的部分的一个分支中。
该开发板仍然根据安富利网页出售,因此可能有一些黑客在使用它。
我的问题是,今天的工具无法像大约 7 年前那样使用旧内核,同时旧内核充满其他问题,但旧驱动程序不包含在新内核中并且两者都不适用于较新的内核。
3. 驱动程序是否以不同的名称进行主线化?或者我尝试了错误的方法来使声卡工作?
感谢任何对这个问题有更深入了解的人!
答案1
多年来,人们对 SoC 驱动程序的态度在某种程度上发生了变化。
对 OF(开放固件 - 换句话说,设备树中的配置)的支持已在声卡驱动程序领域进行了重新设计、改进和扩展。
最好使用通用解决方案,而不是编写多个机器驱动程序(我的问题中的“胶水”驱动程序 - 3.)。在本例中,它是一个“简单音频卡”机器驱动程序和设备树中的适当配置:
zed_sound {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "ZED ADAU1761";
simple-audio-card,dai-link@0 {
format = "i2s";
cpu {
sound-dai = <&axi_i2s_0>;
};
codec {
sound-dai = <&adau1761>;
};
};
};
该解决方案适用于最新的内核。测试时使用长期稳定版 - 5.10.x 进行测试。