मैं NXP LPC3250 माइक्रोकंट्रोलर के लिए एम्बेडेड लिनक्स (2.6.39.2) सिस्टम बनाने के लिए बिल्डरोट का उपयोग कर रहा हूं।
अभी, मैं ALSA / ASoC को चालू करने और चलाने की कोशिश कर रहा हूं, लेकिन मुझे कुछ मुद्दों पर एक साथ काम करने के लिए मॉड्यूल मिल रहे हैं। (मुझे लगता है!)
कुछ महत्वपूर्ण पृष्ठभूमि:
मैं जिस बोर्ड के साथ परीक्षण कर रहा हूं वह एंबेडेड कलाकार 3250 V2 विकास बोर्ड है । V2 V1 से अलग है जिसमें इसमें एलसीडी स्क्रीन नहीं है, लेकिन इसमें I2S ऑडियो कोडेक शामिल है: NXP UDA1380। EA3250 V1 के लिए बोर्ड का समर्थन कर्नेल के LPCLinux संस्करण में शामिल है । एक अलग विकास बोर्ड भी है, जिसे Phytec 3250 कहा जाता है , जिसमें समान UDA1380 कोडेक चिप होती है। LPCLinux वितरण में ऑडियो कोडेक चिप के साथ Phytec बोर्ड का भी समर्थन है। मैंने जो विचार किया है, उसमें से Phytec 3250 बोर्ड में I2C पते 0x18 पर UDA1380 कोडेक है । मेरे EA3250 V2 बोर्ड पर, ऑडियो कोडेक I2C पते 0x1a पर स्थित है ।(मैंने सत्यापित किया है कि चिप को संचालित किया गया है, और मैं इसे I2C- टूल पैकेज का उपयोग करके संवाद कर सकता हूं। यह i2cdetect पर प्रतिक्रिया करता है और मैं चिप से रजिस्टरों को सही ढंग से i2cget का उपयोग करके पढ़ सकता हूं।)
स्रोत को संशोधित करना:
कोडेक चिप का पता बदलने के लिए मुझे Phytec 3250 ड्राइवर फ़ाइलों को संपादित करने की आवश्यकता थी। मैंने lpc3xxx-uda1380.c के इस भाग को संपादित किया :
static struct snd_soc_dai_link phy3250_uda1380_dai[] = {
{
.name = "uda1380",
.stream_name = "UDA1380 Duplex",
#if defined(CONFIG_SND_LPC32XX_USEI2S1)
.cpu_dai_name = "lpc3xxx-i2s1",
#else
.cpu_dai_name = "lpc3xxx-i2s0",
#endif
.codec_dai_name = "uda1380-hifi",
.init = phy3250_uda1380_init,
.platform_name = "lpc3xxx-audio.0",
//EDIT// .codec_name = "uda1380-codec.0-0018", //EDIT//
.codec_name = "uda1380-codec.0-001a",
.ops = &phy3250_uda1380_ops,
},
};
यह परिवर्तन करने के बाद, मैं आगे बढ़ा और सिस्टम को फिर से बनाया और सब कुछ ठीक किया। सिस्टम में बूट करने के बाद, मेरे पास निम्न मॉड्यूल हैं (मानक कोर मॉड्यूल के अलावा) /lib/modules/2.6.39.2/kernel/sound
:
./soc/codecs: snd-soc-uda1380.ko <-- ASoC codec driver
./soc/lpc3xxx: snd-soc-lpc3xxx-i2s.ko <-- ASoC DAI
snd-soc-lpc3xxx-uda1380.ko <-- ASoC machine driver
snd-soc-lpc3xxx.ko <-- ASoC platform driver
अब, मैं वास्तव में इस सभी सामान को एक साथ कैसे बांधूं?
बस मॉड्यूल डालने के साथ modprobe
डिवाइस वास्तव में ALSA / ASoC को नहीं देता है। मैं साउंडकार्ड का पता लगाने में असमर्थ हूं। क्या इसका मतलब है कि मुझे अब 0x1auda1380-codec
पते पर एक नया उपकरण बनाना होगा और इसे एक ड्राइवर को बांधना होगा? मैंने निम्नलिखित करने की कोशिश की है:
और प्राप्त किया है:
तब मैं एक ड्राइवर को डिवाइस से बांधने की कोशिश करता हूं:
और प्राप्त:
मुझे यह कोशिश करने के लिए यह त्रुटि मिलती है! मुझे लग रहा है कि मैं डिवाइस को सही तरीके से नहीं बना रहा हूं, और फिर मुझे यकीन नहीं है कि इसे सही ड्राइवर से कैसे जोड़ा जाए।
echo uda1380-codec 0x01a > /sys/bus/i2c/devices/i2c-0/new_device
i2c i2c-0: new_device: Instantiated device uda1380-codec at 0x1a
echo 0x1a > /sys/bus/i2c/drivers/uda1380-codec/bind
sh: write error: No such device
नोटा नेने:
मैं कल रात इसके साथ खेल रहा था और किसी तरह जागने और कार्ड के लिए कम से कम जांच करने में सक्षम था। मैं अलग-अलग बाइंडिंग के साथ खेल रहा था, मुझे लगता है। मेरे चरणों को याद करना देर और कठिन था, लेकिन मैं कम से कम किसी तरह निम्नलिखित त्रुटि प्राप्त करने में सक्षम था:
uda1380-codec 0-001a: asoc: failed to probe CODEC uda1380-codec.0-001a: -22
asoc: failed to instantiate card LPC32XX: -22
मैं इस त्रुटि को पुनः प्राप्त करने में असमर्थ रहा हूँ!
संपादित करें:
मैंने पुष्टि की है कि मेरा संशोधित कोड संकलित किया जा रहा है, इसलिए ड्राइवर को अब सही पते पर बात करनी चाहिए। मॉड्यूल को मैन्युअल रूप से लोड करने के बाद, का आउटपुट lsmod
है:
Module Size Used by Not tainted
snd_soc_lpc3xxx_uda1380 2087 0
snd_soc_lpc3xxx 3089 0
snd_soc_lpc3xxx_i2s 4089 1
snd_soc_uda1380 10865 0
snd_soc_core 51549 4 snd_soc_lpc3xxx_uda1380,snd_soc_lpc3xxx,snd_soc_lpc3xxx_i2s,snd_soc_uda1380
snd_pcm 52098 2 snd_soc_lpc3xxx,snd_soc_core
snd_timer 15590 1 snd_pcm
snd_page_alloc 3021 1 snd_pcm
snd 37286 3 snd_soc_core,snd_pcm,snd_timer
क्या यह सही लगता है?
और मेरी डिवाइस तालिका:
# Audio stuff
/dev/audio c 666 0 29 14 4 - - -
#/dev/audio1 c 666 0 29 14 20 - - -
/dev/dsp c 666 0 29 14 3 - - -
#/dev/dsp1 c 666 0 29 14 19 - - -
#/dev/sndstat c 666 0 29 14 6 - - -
/dev/mixer c 666 0 29 14 0 - - -
/dev/snd d 755 0 29 - - - - -
/dev/snd/controlC0 c 666 0 29 116 0 - - -
/dev/snd/pcmC0D0c c 666 0 29 116 24 - - -
/dev/snd/pcmC0D0p c 666 0 29 116 16 - - -
/dev/snd/seq c 666 0 29 116 1 - - -
/dev/snd/timer c 666 0 29 116 33 - - -
alsa-devel
और किसी ने कोई प्रतिक्रिया नहीं दी। (यह मैं बता सकता हूं - मुझे मेल-सूचियों से नफरत है, वे पढ़ने में सबसे खराब हैं।) अब मेरा मेलबॉक्स ALSA बकवास से भरा है और मुझे अभी भी कोई मदद नहीं मिली है। यहाँ मैं फिर जाता हूँ, अपने दम पर ...
alsa-devel
सूची पर पूछें (जहां आपको बताया जाएगा कि 2.6.39 बहुत पुरानी है, और यह कि बोर्ड विक्रेता समर्थन के लिए जिम्मेदार है)।