ipod-gadget은 iPod USB 장치를 시뮬레이션하여 디지털 오디오를 iPod 호환 장치/도크에 스트리밍합니다. iAP(iPod 액세서리 프로토콜)을 말하고 오디오 스트리밍 세션을 시작합니다.
Onkyo HT-R391 수신기를 호스트 장치로 사용하여 Raspberry Pi Zero, Beaglebone Black 및 Nexus 5(메인라인 Linux 커널)에서 테스트했습니다(더 많은 호스트 장치를 테스트해야 함). Linux 4.x(usb 가젯 configfs로 컴파일)를 실행하고 주변 장치 모드를 지원하는 USB 포트가 있는 모든 장치에서 작동해야 합니다.
이는 Linux 커널 모듈과 클라이언트 앱(golang)의 두 부분으로 구성됩니다.
커널 모듈은 USB 장치 가젯 측면을 관리합니다. iPod을 Dock에 연결하면 다음과 같은 2개의 인터페이스가 있는 USB 구성이 나타납니다.
커널 모듈은 오디오 재생을 위한 새로운 ALSA 오디오 카드 "iPodUSB"와 iAP 통신을 위한 iap0 char 장치를 생성합니다.
가젯 드라이버는 캐릭터 장치 iap0이 열릴 때 활성화되고 닫힐 때 등록이 취소됩니다.
클라이언트 앱은 /dev/iap0 문자 장치에서 패킷을 읽거나 쓰는 방식으로 iAP를 통해 호스트 장치와 통신합니다. ALSA 장치를 재생에 사용할 수 있도록 인증을 처리하고 오디오 스트리밍을 활성화합니다.
git clone https://github.com/oandrew/ipod-gadget.git
cd ipod-gadget/gadget
make
# or cross compiling
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- KERNEL_PATH=/home/andrew/pi-linux
#load the module
modprobe libcomposite
insmod g_ipod_audio.ko
insmod g_ipod_hid.ko
insmod g_ipod_gadget.ko [swap_configs=0] [product_id=0x1297]
#optional params
swap_config: swap USB configurations.
Might be useful when the dock sees only the Mass Storage configuation.
product_id: override the usb product id.
See doc/apple-usb.ids for the list of ids
dmesg
의 메시지를 확인하고 /dev/iap0
장치를 사용할 수 있는지 확인하세요.
여기의 지침을 따르십시오: https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
이제 다른 터미널을 열고 재생을 테스트할 수 있습니다!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
문제가 있으면 알려주세요.
문제에 추적 파일(예: 위의 /tmp/ipod.trace
)을 첨부합니다.
참고: 현재는 호스트 장치가 iPod을 인증하지 않는 경우에만 작동합니다(일반적으로 iPod만 호스트 장치를 인증하므로 괜찮습니다).