저는 사운드 카드가 Avnet ZED 보드와 유사한 맞춤형 하드웨어에서 작동하도록 설득하려고 합니다.
원본 드라이버 예제는 zed_adau1761이라는 크게 수정된(일반 패치 ~180,000라인) 3.14.12 커널을 기반으로 합니다. "사운드 카드"는 하나의 드라이버 내에서 처리되지 않으며 세 가지 논리적 부분으로 나뉩니다.
- 코덱 드라이버 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가 사용되었습니다.