กู้ชีพอุปกรณ์เก่า! วิธีใช้งาน FireWire บน Raspberry Pi ก่อนที่ Linux จะหยุดซัพพอร์ต

เมื่อ Apple ทิ้ง FireWire... เราเลยต้องพึ่งพา Linux

หลังจากที่ผมได้รู้ข่าวร้ายว่า Apple ได้ ยกเลิกการซัพพอร์ต FireWire (IEEE 1394) ไปแล้วใน macOS 26 Tahoe ผมก็ต้องเริ่มมองหาทางเลือกอื่นเพื่อเอามาใช้กับอุปกรณ์ FireWire เก่าๆ ที่บ้านครับ ไม่ว่าจะเป็นฮาร์ดไดรฟ์รุ่นเดอะ, กล้องวิดีโอ DV, หรืออุปกรณ์ภาพและเสียง (A/V gear) ต่างๆ

ส่วนตัวผมมีกล้อง Canon GL1 รุ่นเก๋าที่มีพอร์ต 'DV' อยู่ ปกติผมสามารถเสียบมันเข้ากับเครื่อง Mac รุ่นเก่า (อย่างพวก dual G4 MDD) หรือเครื่อง Mac สมัยใหม่ที่ใช้ macOS ต่ำกว่าเวอร์ชัน 26 (ต่อผ่าน Dongle แปลงหัวเอา) เพื่อโอนไฟล์วิดีโอไปตัดต่อในโปรแกรม Final Cut Pro ได้

แต่ในเมื่อ Apple ตัดเยื่อใยไปแล้ว และผมยังอยากได้โซลูชันฮาร์ดแวร์ที่ทันสมัยอยู่ ผมเลยหันไปซบตัก Linux และซอฟต์แวร์ dvgrab แทนครับ ถึงแม้จะมีข่าวแว่วๆ มาว่า ฝั่ง Linux เองก็เตรียมจะ หยุดซัพพอร์ต IEEE 1394 ในปี 2029 ก็ตาม... แต่เฮ้ย! อย่างน้อยเราก็ยังมีเวลาเล่นสนุกกับมันได้อีกตั้ง 3 ปี!

ฮาร์ดแวร์ที่ต้องเตรียม (Hardware Setup)

เพื่อให้ Raspberry Pi ของเราสามารถสื่อสารกับพอร์ต FireWire ได้ เราต้องใช้อุปกรณ์เสริม 2 ชิ้นนี้ครับ:

💡 ทริคเพิ่มเติม: หากคุณกำลังมองหาแหล่งซื้อบอร์ด Raspberry Pi, HAT แบบต่างๆ หรืออุปกรณ์สาย Maker ในไทย สามารถเข้าไปดูสินค้าและสั่งซื้อได้ง่ายๆ ที่ https://openlink.co/globalbyte เลยครับ!

View more (ดูคำสั่งเช็คสถานะ FireWire และกด Copy Code)

เมื่อเสียบทุกอย่างเข้าด้วยกันแล้ว คุณสามารถใช้คำสั่ง lspci ตรวจสอบได้ว่าบอร์ด Pi มองเห็นคอนโทรลเลอร์ FireWire หรือไม่:

$ lspci 0001:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21) 0001:01:00.0 PCI bridge: Texas Instruments XIO2213A/B/XIO2221 PCI Express to PCI Bridge [Cheetah Express] (rev 01) 0001:02:00.0 FireWire (IEEE 1394): Texas Instruments XIO2213A/B/XIO2221 IEEE-1394b OHCI Controller [Cheetah Express] (rev 01) 0002:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21) 0002:01:00.0 Ethernet controller: Raspberry Pi Ltd RP1 PCIe 2.0 South Bridge

Step 1: การคอมไพล์ Linux Kernel ใหม่ (Recompile Kernel)

เห็นบอร์ดตรวจเจอแล้วก็จริง แต่จะ "ใช้งาน" ได้ คุณต้องทำการ recompile the Linux kernel ใหม่เพื่อเปิดฟีเจอร์รองรับ FireWire ซะก่อนครับ เพราะชิปคอนโทรลเลอร์ FireWire เก่าๆ อย่าง TI XIO2213A หรือ VIA VT6315N มันไม่รองรับการเข้าถึงข้อมูลแบบ 64-bit เราเลยต้องบังคับเปิดระบบ 32-bit DMA แทน

View more (ดูการตั้งค่า Kernel และ Copy Code)

ตอนคอมไพล์ Kernel ให้เปิดใช้งานฟีเจอร์ 2 ตัวนี้ครับ:

CONFIG_FIREWIRE (Device Drivers -> IEEE 1394 (FireWire) support -> FireWire driver stack) CONFIG_FIREWIRE_OHCI (Device Drivers -> IEEE 1394 (FireWire) support -> FireWire driver stack -> OHCI-1394 controllers)

Step 2: การตั้งค่า Boot options บน Pi

หลังจากคอมไพล์เสร็จแล้ว เราต้องมาแก้ไขไฟล์ระบบนิดหน่อย เพื่อให้บอร์ด Pi ปล่อยผ่านข้อมูลแบบ 32-bit ได้ครับ

View more (ดูโค้ดตั้งค่า Boot และ Copy Code)

ไปที่ท้ายไฟล์ /boot/firmware/config.txt (ภายใต้หัวข้อ [all]) แล้วเพิ่มบรรทัดนี้ลงไป:

dtparam=pciex1 dtoverlay=pcie-32bit-dma

จากนั้นไปที่ท้ายสุดของบรรทัดในไฟล์ /boot/firmware/cmdline.txt แล้วเพิ่มคำนี้ลงไป:

pcie_aspm=off

เสร็จแล้วจัดการ Reboot เครื่อง Pi ได้เลยครับ!

Step 3: วิธีเชื่อมต่อและดูดวิดีโอด้วย dvgrab

เมื่อเปิดเครื่องมาใหม่ ตอนนี้คุณสามารถเอาอุปกรณ์ FireWire มาเสียบใช้งานกับพอร์ต FireWire 400 ได้แล้วครับ! (แต่ถ้าใครจะใช้พอร์ต FireWire 800 คุณต้องหาไฟเลี้ยงแยกมาเสียบบนการ์ด Mini PCIe ด้วยนะครับ ซึ่งของผมใช้อุปกรณ์แค่ระดับ 400 เลยไม่ต้องกังวลเรื่องนี้)

ในการบันทึกวิดีโอจากกล้อง เราจะใช้โปรแกรมที่ชื่อว่า dvgrab ครับ มันสามารถดึงคลิปออกมาได้ทั้งในโหมด Camera และ VCR

View more (ดูคำสั่งใช้งาน dvgrab และ Copy Code)

ติดตั้งโปรแกรมและสั่งรันดึงวิดีโอแบบพื้นฐาน:

$ sudo apt install -y dvgrab $ dvgrab Found AV/C device with GUID 0x000085000014e35a libiec61883 error: Failed to get channels available. Waiting for DV... Capture Started ^C"dvgrab-002.dv": 45.89 MiB 401 frames timecode 00:00:00.00 date 2067.02.15 22:26:25 Capture Stopped

หรือจะรันแบบ Interactive (ตอบโต้ได้) เพื่อควบคุมกล้องจากคีย์บอร์ดก็ได้ครับ:

$ dvgrab -i Found AV/C device with GUID 0x000085000014e35a libiec61883 error: Failed to get channels available. Going interactive. Press '?' for help. q=quit, p=play, c=capture, Esc=stop, h=reverse, j=backward scan, k=pause l=forward scan, a=rewind, z=fast forward, 0-9=trickplay, =play/pause

ผมได้โพสต์คลิป sample video recording ที่ดึงข้อมูลมาจาก Setup ชุดนี้ลงใน GitHub แล้วครับ โปรแกรม DVgrab ใช้งานง่ายมาก และสามารถเอาไปเขียนเป็น Script เพื่อทำออโตเมชันได้สบายๆ ซึ่งผมวางแผนจะเอาไปทดลองกับโปรเจกต์ต้นแบบอย่าง Firehat และโปรเจกต์ Open MRU ที่เจอในซับเรดดิท r/tapeless ต่อไปครับ

บทความอ่านเพิ่มเติม (Further reading)

พร้อมสร้างโปรเจกต์สาย Hardware และ IoT ของคุณหรือยัง?

ถ้าคุณชอบทดลองดัดแปลงอุปกรณ์ หรือกำลังหาบอร์ดพัฒนาเพื่อนำไปทำโปรเจกต์แบบนี้ แวะมาหาเราสิครับ!

คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา การปรับแต่ง Kernel ของระบบปฏิบัติการมีความเสี่ยง โปรดศึกษาข้อมูลเพิ่มเติมจากต้นฉบับ
อ้างอิงจาก (References):

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี