การคอนฟิกให้ลินุกส์สามารถใช้ระบบเสียงได้นั้นประกอบด้วยขั้นตอนต่างๆ ดังนี้:
การประกอบการ์ดเสียง
การคอนฟิก Plug and Play (ถ้ามี)
การคอนฟิกและ building เคอเนลให้สนับสนุนระบบเสียง
การสร้างดีไวซ์ไฟล์
การบูตเคอเนลและทดสอบการติดตั้ง
ลินุกส์ดิสตริบิวชั่นบางตัวได้ให้ยูทิลิตี้สำหรับการคอนฟิกการ์ดเสียงซึ่งจะค้นหาการ์ดเสียงที่มีและปรับแต่งไฟล์คอนฟิกต่างๆที่จำเป็น ในการโหลดไดรเวอร์ที่ถูกต้องสำหรับการ์ดนั้นๆ ตัวอย่างเช่น Red Hat Linux จะมียูทิลิตี้ sndconfig หากดิสตริบิวชั่นที่คุณใช้มีเครื่องมือดังกล่าว ผู้เขียนแนะนำให้ลองใช้เสียก่อน หากมันใช้ได้ผลคุณก็สามารถข้ามขั้นตอนในส่วนนี้ไปได้
แต่หากยูทิลิตี้นั้นใช้ไม่ได้ผลหรือคุณต้องการทำด้วยตัวเองเพื่อที่จะเข้าใจสิ่งที่คุณทำได้ดีขึ้นแล้ว ในส่วนถัดจากนี้จะได้ครอบคลุมขั้นตอนต่างๆ เหล่านี้ อย่างละเอียด
ให้ปฏิบัติตามวิธีการของผู้ผลิตในการประกอบหรือให้ผู้จัดจำหน่ายประกอบให้
การ์ดเสียงรุ่นเก่ามักจะมีสวิทช์หรือจั้มเปอร์สำหรับตั้ง IRQ, DMA channel, ฯลฯ ให้คุณจดบันทึกค่าต่างๆที่ใช้ ถ้าคุณไม่แน่ใจให้ใช้ค่าปริยายจากโรงงาน พยายามเลี่ยงการชนกันกับอุปกรณ์อื่นๆ(เช่น ethernet cards, SCSI host adaptors, serial และ parallel ports)
โดยทั่วไปคุณควรจะใช้ค่า I/O port, IRQ, และ DMA เหมือนกับที่ใช้ได้บน DOS แต่ว่าในบางกรณี (โดยเฉพาะกับการ์ดแบบ PnP )คุณอาจจะต้องใช้ค่าตั้งที่แตกต่างไปเพื่อให้มันใช้งานได้บนลินุกส์ จำเป็นต้องทำการทดลอง
การ์ดบางรุ่นใช้โปรโตคอล ISA Plug and Play ในการคอนฟิกค่า i/o addresses, interrupts, และ DMA channels ถ้าคุณมีการ์ดแบบ PCI-bus ที่ใหม่กว่าหรือการ์ด ISA ที่เก่ามากๆซึ่งใช้การตั้งแค่ถาวรหรือจั้มเปอร์นั้น ให้คุณข้ามส่วนนี้ไป
วิธีการคอนฟิกการ์ด Plug and Play ที่นิยมคือการใช้เครื่องมือ isapnp ซึ่งมีมากับดิสตริบิวชั่นส่วนใหญ่ (หรือสามารถดาวโหลดได้จากเว็บไซต์ของ Red Hat http://www.redhat.com/).
ก่อนอื่นให้ดูเอกสารสำหรับดิสตริบิวชั่นของคุณ อาจจะเป็นไปได้ที่มีการตั้งให้สนับสนุน Plug and Play อยู่แล้วหรือ อาจจะมีการทำงานที่แตกต่างไปจากที่กล่าวที่นี่ ถ้าคุณจำเป็นต้องคอนฟิกด้วยตัวเองรายละเอียดจะอยู่ใน man page ของ isapnp โดยย่อๆ แล้วขั้นตอนจะเป็นดังนี้:
ใช้ pnpdump เพื่อหาค่าตั้งสำหรับอุปกรณ์ Plug and Play ทั้งหมดที่มี ทำการเก็บค่าที่ได้ในไฟล์ /etc/isapnp.conf.
เลือกค่าติดตั้งสำหรับการ์ดเสียงที่ไม่ชนกับอุปกรณือื่นในระบบและทำการเอาเครื่องหมายคอมเมนต์ของบรรทัดที่เหมาะสมในไฟล์/etc/isapnp.confออก และอย่าลืมเอาคอมเมนต์บรรทัด (ACT Y) ในส่วนเกือบๆ สุดท้าย
ดูให้แน่ใจว่า isapnp ทำงานเมื่อทำการบูตระบบ โดยอาจจะทำโดยการตั้งใน startup script อันใดอันหนึ่ง ทำการ reboot หรือเรียกใช้โดยสั่งisapnp ด้วยตัวเอง
หากมีเหตุผลอันใดที่ทำให้คุณไ่ม่สามารถใช้หรือไม่อยากใช้ isapnp ก็ยังมีทางเลือกอีกสองทาง ถ้าคุณใช้การ์ดบนวินโดว์ 95 หรือ 98 คุณสามารถ ใช้ device manager ในการตั้งค่าการ์ดแล้วทำการ soft boot เข้าสู่ลินุกส์ด้วยโปรแกรม LOADLIN
ถ้าคุณใช้การ์ดบน DOS คุณสามารถใช้ยูทิลิตี้icu ซึ่งมากับการ์ด SoundBlaster16 PnP สำหรับคอนฟิกการ์ดบน DOS แล้วทำการ soft boot เข้าสู่ลินุกส์ด้วย LOADLIN
ในเคอเนล 2.4 เป็นต้นมาจะสนับสนุนการใช้ ISA PnP อย่างแท้จริงการ์ดบางตัวจะสามารถค้นพบได้โดยอัตโนมัติและคอนฟิกโดยไม่ต้องใช้ isapnp ให้คุณดูเอกสารสำหรับไดรเวอร์ของการ์ดสำหรับรายละเอียด
คุณจำเป็นต้องมีไดรเวอร์สำหรับการ์ดเสียงของคุณอยู่ในเคอเนล โดยที่เคอเนลที่อยู่ในระบบของคุณอาจจะมีไดรเวอร์สำหรับการ์ดเสียงของคุณอยู่แล้วก็ได้ ในกรณีส่วนใหญ่ไดรเวอร์จะถูก build เป็นโมดูลที่สามารถโหลดได้โดยเคอเนล คุณสามารถตรวจดูว่ามีไดรเวอร์อะไรบ้างที่มีอยู่ในรูปของโมดูลโดย ดูที่ไดเร็คทอรี่ /lib/modules สำหรับเคอเนล 2.4.4 ไดรเวอร์สำหรับการ์ดเสียงก็จะอยู่ใน /lib/modules/2.4.4/kernel/drivers/sound/ หากคุณเห็นไดรเวอร์สำหรับการ์ดของคุณ คุณอาจจะลองใช้โมดูลนั้นและ ข้ามการคอมไพล์เคอเนลไปได้
ถ้าไดรเวอร์ที่ต้องการยังไม่ได้ build ขึ้นมาคุณจำเป็นต้องทำการคอนฟิกและ build เคอเนลใหม่ คุณอาจจะ build ไดรเวอร์เสียงเข้าไปในเคอเนลเลย หรือทำเป็นโมดูล ในกรณีส่วนมากแล้วการทำเป็นโมดูลจะเป็นที่นิยม เนื่องจากคุณสามารถทดลองโหลดไดรเวอร์ต่างๆ กันถ้าคุณไม่แน่ใจว่าจะใช้อันไหน และสามารถอันโหลดไดรเวอร์ออกได้เมื่อไม่ต้องการใช้ ช่วยลดการใช้หน่วยความจำ การ build ไดรเวอร์เข้าไปในเคอเนลอาจจะดีหากคุณไม่สันทัดกับ เคอเนลโมดูลและต้องการวิธีการที่ง่ายกว่า
คุณควรศึกษาเอกสาร The Linux Kernel HOWTO สำหรับรายละเอียดการ build เคอเนล ผู้เขียนจะกล่าวถึงประเด็นที่เกี่ยวกับการ์ดเสียงเท่านั้น
ถ้าคุณไม่เคยคอนฟิกเคอเนลสำหรับการสนับสนุนระบบเสียงมาก่อนเลย คุณควรอ่านเอกสารที่เกี่ยวข้องกับไดรเวอร์เสียงของเคอเนลก่อน โดยเฉพาะ ้ข้อมูลของการ์ดที่คุณมี คุณสามารถหาไฟล์ได้ในไดเร็คทอรี่ของเอกสารเคอเนลที่อยู่ใน /usr/src/linux/Documentation/sound ถ้าไม่มีไดเร็คทอรี่ดังกล่าวเป็นไปได้ที่คุณมีเคอเนลที่เก่ามากๆ หรือคุณไม่ได้ติดตั้งซอร์สโค้ดของเคอเนล
ทำการขั้นตอนการ build เคอเนลโดยปรกติ ซึ่งมีอินเตอเฟสอยู่ 3 แบบสำหรับกระบวนการคอนฟิก อินเตอเฟสแบบกราฟฟิกบน X11 สามารถเรียกได้ด้วย make xconfig ระบบแบบเมนูที่ต้องการแค่การแสดงผลแบบเท็กซ์จะเรียกได้ด้วย make menuconfig วิธีแบบดั้งเดิมคือใช้ make config เป็นอินเตอเฟสแบบเท็กซ์พื้นๆ
เมื่อทำการคอนฟิกเคอเนลจะมีตัวเลือกให้เลือกสำหรับประเภทของการ์ดเสียงที่คุณมีและอ็อปชั่นของไดรเวอร์ที่จะใช้ ระบบช่วยเหลือในเครื่องมือคอนฟิก น่าจะช่วยอธิบายว่าแต่ละอ็อปชั่นหมายถึงอะไร เลือกอ็อปชั่นที่เหมาะสมตามความรู้ที่คุณมี
หลังการคอนฟิกอ็อปชั่นต่างๆ คุณควรทำการคอมไพล์และติดตั้งเคอเนลใหม่ตามเอกสาร Kernel HOWTO
เพื่อการทำงานที่ถูกต้อง จะต้องสร้างดีไวซ์ไฟล์สำหรับอุปกรณ์เสียง โดยปรกติจะถูกสร้างขึ้นมาในระหว่างการติดตั้งระบบ คุณสามารถตรวจได้อย่างง่ายๆ ด้วยการใช้คำสั่งตามด้านล่าง ถ้าได้ผลตามที่แสดง (เวลาจะไม่ตรงกัน) ดีไวซ์ไฟล์ก็ไม่มีปัญหาอะไร
% ls -l /dev/dsp crw-rw-rw- 1 root root 14, 3 Apr 25 1995 /dev/dsp
สังเกตุว่าการมีดีไวซ์ไฟล์ที่ถูกต้องไม่ได้เป็นเครื่องประกันอะไร ตัวไดรเวอร์จะต้องถูกโหลดหรือคอมไพล์เข้าไปก่อนที่ดีไวซ์เหล่านี้จะทำงานได้
ในบางครั้งหากคุณมั่นใจว่าดีไวซ์ไฟล์ไม่ถูกต้องคุณสามารสร้างมันขึ้นมาได้ ในดิสตริบิวชั่นส่วนใหญ่จะมีสคริปท์ชื่อ /dev/MAKEDEV สำหรับทำงานนี้
หากคุณใช้ devfs filesystem ซึ่งมีอยู่ในเคอเนล 2.4 ดีไวซ์ไฟล์สำหรับเสียงจริงๆ จะอยู่ที่ /dev/sound แต่มันก็จะมีลิ้งค์ไปยังดีไวซ์แบบเก่าอย่าง /dev/dsp อยู่
ถึงตอนนี้คุณพร้อมที่จะบูตเข้าเคอเนลใหม่และทดสอบไดรเวอร์เสียง ทำการติดตั้งและบูตเคอเนลใหม่ตามขั้นตอนปรกติ (เก็บเคอเนลเก่าไว้เผื่อมีปัญหา)
ถ้าคุณใช้โมดูลไดรเวอร์สำหรับโหลด คุณจำเป็นต้องโหลดมันเข้าไปด้วยการใช้คำสั่ง modprobe command สำหรับไดรเวอร์ที่เหมาะสม เช่นสั่ง modprobe sb สำหรับ SoundBlaster card
หลังจากบูตหรือโหลดโมดูลแล้วให้ตรวจข้อความเช่นด้วยการใ้ช้คำสั่ง dmesg :
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996 sb: Creative SB AWE64 PnP detected sb: ISAPnP reports 'Creative SB AWE64 PnP' at i/o 0x220, irq 5, dma 1, 5 SB 4.16 detected OK (220) sb: 1 Soundblaster PnP card(s) found. Crystal 4280/46xx + AC97 Audio, version 1.22.32, 10:28:40 Apr 28 2001 cs46xx: Card found at 0xf4100000 and 0xf4000000, IRQ 11 cs46xx: Thinkpad 600X/A20/T20 (1014:0153) at 0xf4100000/0xf4000000, IRQ 11 ac97_codec: AC97 Audio codec, id: 0x4352:0x5914 (Cirrus Logic CS4297A rev B)
ข้อความควรจะระบุว่าพบการ์ดเสียงและตรงกับชนิดและจั้มเปอร์ที่ตั้ง (ถ้ามี) ไดรเวอร์ยังอาจจะแสดงข้อความผิดพลาดหรือเตือนหากมีการคอนฟิก ไดรเวอร์ไม่ถูกต้องหรือไดรเวอร์ผิด
ในเวอร์ชั่นก่อนหน้านี้ของเอกสารนี้ได้แนะนำให้ตรวจผลของ /dev/sndstat แต่ในเคอเนล 2.4 เป็นต้นมาไม่มีแล้ว
ถึงต้องนี้คุณน่าจะพร้อมที่จะเล่นไฟล์เสียงง่ายๆ ให้คุณหาตัวอย่างไฟล์เสียง และส่งมันไปยังดีไวซ์เสียงเพื่อทำการตรวจสอบ เบื้องต้น ตัวอย่างเช่น
% cat endoftheworld >/dev/dsp % cat crash.au >/dev/audio
(ห้ามลืมเครื่องหมาย ">" ในคำสั่งด้านบน)
หมายเหตุ โดยทั่วไปแล้วการใช้ cat ไม่ใช่วิธีการที่ดีในการเล่นไฟล์เสียง อันนี้เป็นเพียงการตรวจสอบอย่างง่าย เท่านั้น คุณควรมีโปรแกรมสำหรับเล่นเสียงที่เหมาะสม (จะได้กล่าวถึงในภายหลัง) ซึ่งจะทำงานได้ดีกว่า
ถ้าจากคำสั่งข้างบนให้ผลว่า "I/O error" คุณควรดูใช้คำสั่ง dmesg เพื่อดูข้อความในส่วนท้ายจากเคอเนล เป็นไปได้มากที่จะมีข้อความผิดพลาด พิมพ์ออกมาด้วย ข้อความที่พบบ่อยคือ "Sound: DMA (output) timed out - IRQ/DRQ config error?" ซึ่งหมายความว่า ไดรเวอร์ไม่ได้รับ interrupt ตามที่คาดจากการ์ดเสียง ในกรณีส่วนใหญ่หมายความว่า IRQ หรือ DMA channel ที่คอนฟิกให้กับไดรเวอร์นั้นไม่ถูกต้อง วิธีการที่ดีที่สุดในการแก้ไขคือลองค่า DMA และ IRQ ทุกค่าที่สนับสนุนโดยอุปกรณ์
สาเหตุที่เป็นไปได้อีกอันคืออุปกรณ์ไม่ compatible กับอุปกรณ์ที่เราคอนฟิกไดร์เวอร์ ซึ่งส่วนใหญ่มักพบในการ์ดที่เป็น "SoundBlaster (Pro/16) compatible" แต่ไม่ทำงานด้วยไดรเวอร์ SoundBlaster ในกรณีนี้คุณควรจะหาว่าการ์ดของคุณ compatible กับอุปกรณ์ตัวใด (เช่นด้วยการโพสข้อความใน กลุ่มข่าว comp.os.linux.hardware)
ไฟล์เสียงตัวอย่างอาจจะหาได้จาก ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z>
ตอนนี้คุณสามารถตรวจสอบการอัดเสียง หากคุณสามารถทำการป้อนเสียงเข้าเครื่องได้คุณสามารถทำการตรวจสอบด้วยคำสั่งอย่างเช่น:
# record 4 seconds of audio from microphone % dd bs=8k count=4 </dev/audio >sample.au 4+0 records in 4+0 records out # play back sound % cat sample.au >/dev/audio
แน่นอนว่าคุณต้องมีไมโครโฟนต่อกับการ์ดและพูดเข้าไป คุณอาจจะจำเป็นต้องมีโปรแกรม mixer สำหรับตั้งให้ไมโครโฟนเป็นอุปกรณ์อินพุต และปรับระดับเสียงการบันทึก
ถ้าการทดสอบนี้ผ่าน คุณค่อนข้างจะมั่นใจได้ว่าฮาร์ดแวร์และซอฟต์แวร์สำหรับ D/A และ A/D นั้นใช้งานได้ ถ้าคุณพบปัญหา ใด้ดูเอกสารในส่วนตัวไป
หากคุณยังเจอปัญหาหลังจากทำตามขั้นตอนดังกล่าวแล้ว ขอให้ตรวจสอบในสิ่งต่อไปนี้ รายการตรวจสอบจะเรียงลำดับตามลำดับของความซับซ้อน ถ้าการตรวจสอบให้ผลไม่ถูกต้องให้แก้ปัญหานั้นก่อนที่จะข้ามไปยังขั้นต่อไป
คุณสามารถตรวจวันที่ของเคอเนลเพื่อดูว่าคุณกำลังใช้เคอเนลที่คุณได้คอมไพล์ให้สนับสนุนเสียง คุณสามารถใช้คำสั่ง uname ดังนี้:
% uname -a Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown
หรือโดยการพิมพ์ไฟล์ /proc/version:
% cat /proc/version Linux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21 EST 1999
ถ้าวันที่ไม่ตรงกับเวลาที่คุณทำการคอมไพล์เคอเนลแสดงว่าคุณกำลังใช้เคอเนลเก่า คุณได้ทำการ reboot หรือยัง ถ้าคุณใช้ LILO คุณได้ ทำการ re-install หรือยัง (โดยการสั่ง lilo)? ถ้าคุณบูตจากแผ่นฟลอปปี้คุณได้สร้างแผ่นบูตใหม่และใช้มันในการบูตหรือไม่ ?
หากคุณใช้โมดูลที่สามารถโหลดได้ ให้คุณใช้คำสั่ง lsmod เพื่อให้แน่ใจว่าโมดูลถูกโหลดขึ้นมาแล้ว:
% /sbin/lsmod Module Size Used by sb 6320 0 (unused) sb_lib 35040 0 [sb] uart401 6544 0 [sb_lib] sound 59888 0 [sb_lib uart401] soundcore 4144 5 [sb_lib sound] isa-pnp 28304 0 [sb] ...
วิธีการที่ง่ายที่สุดคือการตรวจผลของ dev/sndstat ตามที่ได้กล่าวไปข้างต้น ถ้าผลที่ได้ไม่เป็นไปอย่างที่คาดแสดงว่ามีอะไรผิดพลาดกับการ คอนฟิกเคอเนลหรือการ build ให้เริ่มต้นกระบวนการติดตั้งอีกครั้งเริ่มจากการคอนฟิกและ build เคอเนล
ตรวจให้แน่ใจว่าพบการ์ดในระหว่างการบูต คุณสามารถเห็นข้อความในขณะบูตหรือใช้คำสั่ง dmesg :
% dmesg
หรือ
% tail /var/log/messages
ถ้าไม่พบการ์ดแสดงว่ามีอะไรผิดพลาด ตรวจให้แน่ใจว่าการ์ดได้ถูกประกอบอย่างถูกต้อง ถ้าการ์ดใช้งานได้บน DOS คุณก็มั่นใจได้ว่า ฮาร์ดแวร์นั้นยังใช้งานได้อยู่ซึ่งน่าจะเป็นปัยหาจากการคอนฟิกเคอเนล อาจจะเป็นได้ทั้งคุณคอนฟิกการ์ดผิดประเภทหรือใส่ค่าต่างๆ ผิดหรือการ์ดคุณ ไม่ compatible กับไดรเวอร์ใดๆ ของเคอเนลเลย
สิ่งที่เป็นไปได้อันหนึ่งคือการ์ดของคุณเป็นแบบที่ compatible ที่ต้องการการเร่ิมต้นด้วยไดรเวอร์บน DOS ให้ลองบูตเข้า DOS แล้วทำการโหลดไดรเวอร์ที่มาจาก ผู้ผลิตแล้วทำการ soft boot เข้าลินุกส์ด้วยControl-Alt-Delete และตรวจให้แต่ใจว่า ค่า I/O address, DMA, และ IRQ ที่ตั้งในลินุกส์ตรงกับที่ใช้บน DOS ให้อ่านไฟล์ Readme.cards จาก ซอร์สของไดร์เวอร์สำหรับข้อสังระวังในการคอนฟิกการ์ด
ถ้าการ์ดของคุณไม่อยู่ในรายการในเอกสาร ก็เป็นไปได้ที่ไดรเวอร์ของเคอเนลไม่สนับสนุนการ์ดนั้น คุณสามารถตรวจสอบกับเอกสารอ้างอิงซึ่งอยู่ในส่วนท้ายของเอกสาร นี้ได้
ให้คุณลองอ่านจากดีไวซ์ /dev/audio โดยใช้คำสั่ง dd ตามที่เขียนไว้ในส่วนก่อนหน้านี้ คำสั่งควรจะรันโดยไม่เกิดข้อผิดพลาดใดๆ
ถ้ามันไม่ทำงานก็เป็นไปได้ว่าเกิดปัญหาการชนกันของ IRQ หรือ DMA หรือปัญหาความไม่เข้ากันของฮาร์ดแวร์บางอย่าง (อุปกรณ์ใช้ไม่ได้บนลินุกส์หรือการคอนฟิกไดรเวอร์ให้ผิดอุปกรณ์)
ความเป็นไปได้อีกอันคือฮาร์ดแวร์เสีย ให้ทดสอบการ์ดบน DOS ถ้าใช้ได้โอกาสนี้ก็หมดไป
หากคุณยังคงมีปัญหา มีข้อแนะนำให้ลองดังนี้:
อ่านเอกสารนี้อีกครั้ง
อ่านเอกสารอ้างอิงที่อยู่ในตอนท้ายของเอกสารนี้และไฟล์เอกสารของเคอเนลที่เกี่ยวข้อง
โพสคำถามใน comp.os.linux หรือกลุ่มข่าวอื่นๆ (comp.os.linux.hardware เป็นทางเลือกที่ดี)
ใช้ search engine สำหรับกลุ่มข่าวโดยเลือกค้นหาด้วยคำทีเหมาะสมจะสามารถให้ผลที่ดีอย่างรวดเร็ว ตัวเลือกหนึ่งก็คือ http://www.google.com
พยายามให้เคอเนลตัวใหม่ล่าสุด (สำหรับทางเลือกสุดท้าย เคอเนลตัวล่าสุดอาจจะไม่เสถียร)
ส่งเมล์ไปยังผู้เขียนไดรเวอร์
ส่งเมล์ไปยังผู้เขียน Sound HOWTO