BeagleBoards —A Family of Open Source Hardware SBCs

<rawat.s>
10 min readNov 25, 2020

--

เนื่องจากผู้เขียนเคยได้จัดหาบอร์ด BeagleBone Black (BBB) มาลองศึกษาและใช้งานเมื่อหลายปีก่อน มีสองรุ่นคือ Rev. B และ Rev. C แต่ไม่ได้ใช้งานนานแล้วช่วงที่ผ่านมา จึงคิดดูว่า จะยังสามารถใช้งานได้อยู่หรือไม่ บทความนี้จึงขอแชร์ประสบการณ์ในการติดตั้งระบบปฏิบัติการ Debian 10 เพื่อใช้งานจาก MicroSD หรือติดตั้งไว้ใน eMMC ของบอร์ด

The Beagle Board Family

บอร์ดในตระกูล Beagle หรือ The Beagle Board Family เกิดจากการพัฒนาโดย The BeagleBoard.org Foundation ซึ่งเป็นองค์กรที่ไม่แสวงหาผลกำไร (Nonprofit Organization) ในรัฐ Michigan สหรัฐอเมริกา และมีวัตถุประสงค์เพื่อออกแบบและพัฒนาฮาร์ดแวร์ รวมถึงส่งเสริมการใช้งานฮาร์ดแวร์และซอฟต์แวร์ในงานที่ต้องประมวลผลด้วยสมองกลฝังตัว (Embedded Computing) และเป็น Open Source Software (OSS) และ Open Source Hardware (OSHW) รวมถึงรูปแบบการใช้งานอื่นที่เกี่ยวข้อง เช่น การประมวลผลเพื่อเชื่อมต่อทางกายภาพ (Physical Computing) และหุ่นยนต์ (Robotics) เป็นต้น

บอร์ดในตระกูล “บีเกิ้ล” จัดอยู่ในประเภทคอมพิวเตอร์บอร์ดเดี่ยว (Single-Board Computers: SBC) มีขนาดเล็ก ราคาต่ำ และใช้พลังงานไฟฟ้าต่ำ เมื่อเปรียบเทียบกับคอมพิวเตอร์ทั่วไป

เนื่องจากเป็นฮาร์ดแวร์ประเภท OSHW ผู้ที่สนใจสามารถเข้าถึงไฟล์ต่าง ๆ ที่เกี่ยวข้องกับบอร์ดในรุ่นต่าง ๆ ได้จาก Github ของ BeagleBoard.org เช่น ไฟล์ประเภท Schematic & PCB Layout Design (ซึ่งได้มีการออกแบบโดยใช้ซอฟต์แวร์ Cadence OrCAD หรือ CadSoft Eagle) และรายการวัสดุอุปกรณ์ในการผลิตบอร์ด (Bill of Materials) เป็นต้น

ตั้งแต่ปีค.ศ. 2008 มีบอร์ด “บีเกิ้ล” ออกมาหลายรุ่น [ผู้อ่านสามารถดูตารางเปรียบเทียบ Spec ของบอร์ดรุ่นต่าง ๆ ได้จาก Wikipedia] บอร์ดส่วนใหญ่ใช้ตัวประมวลผลของบริษัท Texas Instruments (TI) ทำงานตามสถาปัตยกรรม ARM Cortex A8 (32-bit) และสามารถใช้งานได้กับระบบปฏิบัติการ Linux เช่น Ångstrom Debian หรือ Ubuntu เป็นต้น รวมถึง Android ด้วย

  • BeagleBoard Classic (Released July 2008, Unit Price ~$125) เป็นบอร์ดรุ่นแรก ใช้ตัวประมวลผล TI OMAP3530 System-on-a-Chip (ARM Cortex A8, 720 MHz) มีหน่วยความจำ 256 MB LP-DDR และ 512 MB NAND Flash Storage มีเพียงพอร์ต USB 2.0 on-the-go (OTG) แต่ไม่มี Ethernet และ Wi-Fi [ศึกษาเพิ่มเติมได้จาก http://elinux.org/Beagleboard:BeagleBoard]
  • BeagleBoard xM (Released September 2010, Unit Price $149) เป็นบอร์ดที่สอง เหมือนบอร์ดรุ่นแรก แต่ใช้ชิป TI DM3730 (ARM Cortex A8, 1 GHz) หน่วยความจำ 512 MB LP-DDR มีพอร์ต 4x USB 2.0 และมี Ethernet 10/100 แต่ไม่มี Wi-Fi และ Bluetooth [ศึกษาเพิ่มเติมได้จาก http://elinux.org/Beagleboard:BeagleBoard-xM]
  • BeagleBone-Orignal (Released October 2011, Unit Price $89) เป็นบอร์ดรุ่นที่สาม ราคาถูกกว่าและมีขนาดของบอร์ดเล็กกว่าสองรุ่นแรก ใช้ชิป TI Sitara AM335x (ARM Cortex-A8, 720MHz) มีหน่วยความจำ 256 MB DDR2 มีชิปตระกูล ARM Cortex-M3 MCU เป็นตัวช่วยจัดการพลังงานไฟฟ้าของบอร์ด ขา Digital I/O อยู่ที่ระดับ 3.3V ยกเว้นขา Analog Input สำหรับวงจร ADC ไม่เกิน 1.8V และได้มีการปรับปรุงหลายครั้ง (Board Revisions) เช่น Rev A3, A4, A5, A6, A6A และ Rev B เป็นต้น ผู้พัฒนาบอร์ดใช้โปรแกรม Cadence (OrCAD) version 16.5 ในการออกแบบ
  • BeagleBone Black หรือ BBB (Released April 2013, Unit Price $49~$65) เป็นบอร์ดรุ่นที่สี่ แผงวงจรมีสีดำ (Black PCB) ราคาถูกลงอีก และถือว่าเป็นบอร์ดที่ได้รับความนิยมอย่างมาก [อ้างอิงจาก] เมื่อเปรียบเทียบกับบอร์ดรุ่นก่อนหน้า บอร์ดรุ่นนี้ใช้ตัวประมวลผล TI Sitara AM335x (ARM Cortex-A8, 1 GHz) หน่วยความจำ 512 MB DDR3 มีพอร์ต USB client และ USB host มีพอร์ต 10/100 Ethernet แต่ไม่มี WiFi/Bluetooth มีสองรุ่นให้เลือกใช้คือ Rev.B และ Rev.C ซึ่งแตกต่างกันที่ขนาดของชิปหน่วยความจำ 8-bit eMMC (ขนาดความจุ 2 GB และ 4 GB ตามลำดับ) ข้อดีของการใช้งาน eMMC คือ สามารถบูทระบบและใช้งานจาก eMMC Flash Storage แทนการใช้การ์ดหน่วยความจำ microSD ได้ มีพอร์ต Micro HDMI สำหรับจอแสดงผล และบอร์ดรุ่นนี้ได้มีการติดตั้ง Angstrom Linux Distribution ไว้ใน eMMC [ศึกษาเพิ่มเติมได้จาก https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual]
  • BeagleBone-Black Industrial 4G (Released January 2016, Unit Price $79) เหมือนบอร์ดรุ่น BeagleBone Black Rev C แต่แผงวงจรมีสีแดง (Red PCB) ใช้ชิป TI Sitara AM3358BZCZA100 SoC (ARMCortex-A8, 1 GHz, 2000 MIPS) ซึ่งทำงานในช่วงอุณหภูมิ -40 °C ถึง+85 °C [ศึกษาข้อมูลเพิ่มเติมได้จาก https://github.com/beagleboard/beaglebone-black]
  • BeagleBone Enhanced (Released March 2016) เป็นบอร์ดที่เพิ่มหน่วยความจำ (DDR3 RAM) จากเดิม 512 MB เป็น 1 GB
  • BeagleBone-Black Wireless (Released September 2016, Unit Price ~$80) หรือ BBBW เป็นบอร์ดที่มีการปรับปรุงจากรุ่น BBB โดยเปลี่ยนไปใช้ชิป OSD3358 SiP (ARM Cortex-A8, 1 GHz) ของบริษัท Octavo Systems (แต่ทำงานได้เหมือนกับ TI AM335x) มีหน่วยความจำ 512 MB DDR3L (integrated) และ 4GB eMMC Flash Storage (onboard) และที่สำคัญคือ ได้เพิ่มวงจร TI WiLink 8 WL1835MOD เพื่อรองรับการใช้งาน Wi-Fi (IEEE 802.11 b/g/n) + Bluetooth 4.1/BLE แต่ไม่มี Ethernet [ศึกษาเพิ่มเติมได้จาก https://github.com/beagleboard/beaglebone-black-wireless]
  • SeeedStudio BeagleBone Green (Released July 2016, Unit Price ~$45) หรือ BBG เป็นบอร์ดรุ่นพิเศษที่บริษัท SeeedStudio ได้พัฒนาร่วมกับ BeagleBoard.org ใช้งานได้เหมือนกับบอร์ดรุ่น BBB แต่มีสีเขียว แต่มีการเพิ่มคอนเนกเตอร์แบบ Grove [ศึกษาเพิ่มเติมได้จาก http://wiki.seeed.cc/BeagleBone_Green/]
  • SeeedStudio BeagleBone Green Wireless (Released July 2016, Unit Price ~$55) หรือ BBGW เป็นบอร์ดรุ่นพิเศษ โดยใช้บอร์ดรุ่น BBBW (ฺที่มี Wi-Fi และ Bluetooth) เป็นพื้นฐานในการออกแบบ [ศึกษาเพิ่มเติมได้จาก http://wiki.seeed.cc/BeagleBone_Green_Wireless/]
  • BeagleBoard-X15 (Released September 2016, Unit Price ~$265) เป็นบอร์ดที่เพิ่มความสามารถในการประมวลผลให้สูงกว่า BBB โดยใช้ชิป TI Sitara AM5728 SoC ภายในมีหน่วยประมวลผลหลายชนิด ได้แก่ 2x ARM Cortex-A15 (1.5 GHz), 2x ARM Cortex-M4 cores (212 MHz) และ 2x TI TMS320C66x Floating-point VLIW DSP cores (700 MHz), มีหน่วยความจำ 2 GB DDR3L, 4 GB eMMC Flash Storage รองรับการใช้งาน 2x Gigabit Ethernet มีพอร์ต 3x USB 3.0 host และ 1x USB 2.0 client [ศึกษาข้อมูลเพิ่มเติมได้จาก http://elinux.org/Beagleboard:BeagleBoard-X15]
  • BeagleBone Blue (Released March 2017, Unit Price ~$95) เป็นบอร์ดรุ่นพิเศษที่เน้นการใช้งานเป็นอุปกรณ์ควบคุม เช่น โดรนแบบมัลติโรเตอร์ (Multi-Rotor Drones) หรือหุ่นยนต์ เป็นต้น ใช้ตัวประมวลผล Octavo Systems OSD3358 (ARM Cortex-A8, 1GHz), 512MB DDR3 และ 4GB 8-bit eMMC flash storage รองรับการใช้งาน Wireless IEEE 802.11 bgn, Bluetooth 4.1 / BLE และที่แตกต่างจากบอร์ดอื่นคือ มีการเพิ่มวงจรประเภทเซ็นเซอร์ (Sensors) เช่น 9-axis IMU, Barometer และวงจรควบคุม R/C Servo (PWM), DC Motor Driver และมี Quadrature Encoder Input เป็นต้น
  • PocketBeagle (Released September 2017, Unit Price ~$30) เป็นบอร์ดรุ่นที่มีขนาดเล็กกว่าบอร์ดรุ่น BBB หรือรุ่นอื่น ๆ ใช้ตัวประมวลผล OSD3358-SM SiP ของบริษัท Octavo Systems ไม่มี Ethernet และ Wi-Fi / Bluetooth มีเพียงพอร์ต USB 2.0 OTG (host/client) มี ARM Cortex-M3 เป็นตัวช่วยบริหารจัดการพลังงานของบอร์ด [ศึกษาข้อมูลเพิ่มเติมได้จาก https://github.com/beagleboard/pocketbeagle/wiki/System-Reference-Manual]
  • BeagleBone-AI (Released September 2019, Unit Price ~$130) เป็นบอร์ดที่เน้นการใช้งานสำหรับ Edge Computing หรือง High-Performance Embedded Computing บอร์ดนี้ใช้ตัวประมวลผล TI AM5729 Sitara SoC (1.5 GHz) มีหน่วยความจำ 1 GB DDR3L, 16 GB eMMC Flash Storage, Wi-Fi (2.4 GHz & 5 GHz) + Bluetooth, Ethernet (1GbE) แต่มีราคาถูกกว่าและขนาดเล็กกว่า เมื่อเปรียบเทียบกับบอร์ดรุ่น BeagleBoard-X15 [ศึกษาข้อมูลเพิ่มเติมได้จาก https://github.com/beagleboard/beaglebone-ai/]

โดยรวม เราได้เห็นข้อมูลเกี่ยวกับบอร์ดประเภท SBC รุ่นต่าง ๆ ที่ได้พัฒนาโดย BeagleBoard.org ตั้งแต่ปีค.ศ. 2008 เป็นต้นมา และพอจะสรุปเป็นข้อสังเกตดังนี้

  • บอร์ดทุกรุ่นเป็น Open Source Hardware เปิดเผยข้อมูลและแชร์ไฟล์ที่เกี่ยวข้องกับการออกแบบบอร์ดและการผลิต และเอกสารต่าง ๆ ไว้ใน Github
  • ผู้พัฒนาได้เลือกใช้ชิป Sitara AM335x SoC ของบริษัท TI (หรือเลือกใช้แบบ System-in-Package) ของบริษัท Octavo Systems ที่มีตัวประมวลผลตามสถาปัตยกรรม Arm Cortex A8 (32-bit, ARMv7-A) อาจเนื่องมาจากว่า บริษัท TI เป็นผู้สนับสนุนรายใหญ่ให้ทาง BeagleBoard.org มาโดยตลอด
  • สำหรับบอร์ดที่มีความสามารถในการประมวลผลสูง ผู้พัฒนาได้เลือกใช้ชิป TI AM572x SoC (Heterogeneous Multi-Core SoC) ที่มีตัวประมวลผลตามสถาปัตยกรรม Arm Cortex A15 (32-bit, ARMv7-A) และหน่วยประมวลผลประเภทอื่น ๆ ในตัวถังเดียวกัน เช่น 32-bit MCU Cores และ DSP VLIW Cores เป็นต้น ซึ่งก็ถือว่าเป็นสิ่งท้าทายในประเด็นที่เกี่ยวข้องกับการเขียนโปรแกรมและใช้งานหน่วยประมวลผลแบบหลายประเภท (มีสถาปัตยกรรมและการจัดการที่แตกต่างกัน) ภายในชิปเดียวกัน
  • บอร์ดหลายรุ่น มีชิปหน่วยความจำ eMMC เช่น ขนาด 2 GB หรือ 4 GB เป็นตัวเลือกแทนการใช้การ์ดหน่วยความจำแบบ microSD
  • ในส่วนของการสร้าง Ecosystem ก็มีการพัฒนาบอร์ดประเภทที่เรียกว่า “Cape” หรือ “BeagleBone Shield” เพื่อนำมาใช้งานร่วมกับบอร์ด BeagleBone เช่น DC Motor Control Cape, LCD Display Cape, GPS/GPRS Cape, LiPo Battery / Power Supply Cape เป็นต้น
  • มีการเลือกใช้ระบบปฏิบัติการ Linux เช่น Debian, Ubuntu เป็นต้น รวมถึงซอฟต์แวร์ต่าง ๆ ที่เป็น Open Source บอร์ด BeagleBone / BeagleBone Black มาพร้อมกับ Angstrom Linux Distribution เนื่องจากมีขนาดเล็ก แต่หลังจากนั้น แนะนำให้เปลี่ยนไปใช้ Debian (ดาวน์โหลดไฟล์ Image ล่าสุดได้จาก https://beagleboard.org/latest-images) มีทั้งแบบ Desktop GUI LXQT และแบบ Console ให้เลือกใช้
  • ในส่วนของการเขียนโปรแกรม เช่น ถ้าได้ติดตั้ง Debian IoT จะพบว่า สามารถเขียนโค้ดด้วยภาษา Node.js ผ่านทางเว็บเบราว์เซอร์ได้ โดยใช้ Cloud9 IDE และมีการพัฒนาไลบรารี อย่างเช่น BoneScript (npm package, source code) เพื่อใช้งานฮาร์ดแวร์ต่าง ๆ ของบอร์ด เช่น GPIO, I2C, SPI, UART สำหรับ บอร์ดประเภท SBC ที่ใช้ Embedded Linux เป็นต้น
  • บอร์ด BBB มีพอร์ต Mini-USB และเมื่อเชื่อมต่อกับพอร์ต USB ของคอมพิวเตอร์ของผู้ใช้ (ทำหน้าที่เป็น Host PC) สามารถสื่อสารกันแบบเครือข่ายได้ โดยใช้ความสามารถของอุปกรณ์ที่เรียกว่า Ethernet/RNDIS gadget
  • ในเชิงเปรียบเทียบ บอร์ด Raspberry Pi ซึ่งมีบอร์ดรุ่นแรกออกมาในปีค.ศ. 2012 เป็นต้นมา [ดูรายการบอร์ดจากอดีตถึงปัจจุบันใน RPi Hub Wiki] ได้เลือกใช้ชิป SoC ของบริษัท Broadcom SoC มีตัวประมวลตามสถาปัตยกรรมแบบ ARM Cortex-A7 (32-bit, quad-core, ARMv7-A) เช่น Broadcom BCM2836 สำหรับ Raspberry Pi 2 Model B หรือ Arm Cortex A53 (64-bit, quad-core, ARMv8-A) เช่น BCM2837 สำหรับ Raspberry Pi 3 Model B หรือ Arm Cortex A72 (64-bit quad-core, ARMv8-A) เช่น BCM2711 SoC สำหรับ Raspberry Pi 4 Model B) เป็นต้น
  • เราอาจกล่าวได้ว่า บอร์ดในตระกูล Beagle ได้รับความนิยมน้อยกว่า Raspberry Pi อาจมีหลายสาเหตุ เช่น ราคาของบอร์ด เป็นต้น บอร์ด Raspberry Pi ในยุคปัจจุบัน เหมาะสำหรับการใช้งานได้หลายประเภท Linux-based Desktop / Server / IoT ในขณะที่บอร์ดอย่างเช่น BBB น่าจะเหมาะสำหรับการใช้งานด้าน IoT

การติดตั้งและใช้งาน Debian สำหรับบอร์ด BeagleBone Black (BBB)

ขั้นตอนการติดตั้งและใช้งาน Debian 10 สำหรับบอร์ด BeagleBone-Black (BBB) อ้างอิงจากเว็บต่อไปนี้

ดาวน์โหลด Image File จากเว็บ http://beagleboard.org/latest-images ซึ่งมีให้เลือกหลายแบบ แบ่งเป็น 2 กรณี คือ

  • ไฟล์ Image ที่นำไปเขียนลงใน MicroSD และเพื่อบูทและใช้งานระบบจาก MicroSD แนะนำให้ใช้ขนาดความจุ 8 GB
  • ไฟล์ Image (เรียกว่า eMMC Flasher) ที่นำไปเขียนลงใน MicroSD แล้ว เมื่อบูทการทำงานของระบบในครั้งแรก จะมีการสำเนาไฟล์ทั้งหมดไปยังชิปหน่วยความจำแบบ eMMC บนบอร์ด BBB โดยอัตโนมัติ และมีข้อสังเกตคือ จะต้องเลือกขนาดของไฟล์ Image ที่ไม่เกินความจุของ eMMC บนบอร์ด (2 GB สำหรับบอร์ด Rev.B และ 4 GB สำหรับบอร์ด Rev.C ตามลำดับ)

ในบทความนี้ ได้เลือกใช้ไฟล์ Image ดังต่อไปนี้ (Debian 10 Console Mode) เหมาะสำหรับ BBB Rev.B

  • MicroSD (2GB): bone-debian-10.3-console-armhf-2020–03–12–2gb.img.xz
  • eMMC Flasher (2GB): bone-eMMC-flasher-debian-10.3-console-armhf-2020–03–12–2gb.img.xz

หรือจะลองใช้ Debian 10 IoT (No Graphical Desktop) เหมาะสำหรับ BBB Rev.C หรือสำหรับผู้ที่ต้องการใช้ Cloud9 IDE และเขียนโปรแกรมแบบรีโมท ผ่านหน้าเว็บเบราว์เซอร์ เพื่อความสะดวกในการใช้งาน (ถ้าเป็น Debian 10 Console จะไม่มี Cloud9 IDE มาให้)

  • MicroSD (4GB): bone-debian-10.3-iot-armhf-2020–04–06–4gb.img.xz (download)
  • eMMC Flasher (4GB): bone-eMMC-flasher-debian-10.3-iot-armhf-2020–04–06–4gb.img.xz (download)

ไฟล์ที่ได้ดาวน์โหลดมานั้น จะมีชื่อลงท้ายด้วย .img.xz และสามารถใช้คำสั่งของ XZ Utils แปลงไฟล์ที่ถูกบีบอัดไว้ ให้เป็น .img หรือจะใช้คำสั่งของ 7-Zip ก็ได้

# Install xz-utils package on Ubuntu
$ sudo apt-get install xz-utils
# Install 7-zip package on Ubuntu
$ sudo apt-get install p7zip-full
# Install usbimager package on Ubuntu
$ sudo apt-get install usbimager

ข้อสังเกต: นอกจากโปรแกรมสำหรับ Linux ที่กล่าวไปนั้น ยังสามารถใช้โปรแกรมอื่น ๆ ได้ เช่น Win32 Disk Imager และ Balena Etcher สำหรับ Windows เป็นต้น

ตัวอย่างการทำคำสั่งของ XZ Utils สำหรับ Linux

คำสั่งต่อไปนี้ ใช้สำหรับแตกไฟล์จาก .img.xz ให้ได้ไฟล์ใหม่เป็น .img และยังคงเก็บไฟล์เดิมไว้ เช่น (อย่าลืมเปลี่ยนชื่อไฟล์ ในตรงกับที่เลือกใช้)

# set the BeagleBone image filename (.img.gz)
$ IMAGE_FILE="./bone-debian-10.3-console-armhf-2020-03-12-2gb.img.xz"
# uncompress the image file
$ unxz --keep ${IMAGE_FILE}

จากนั้นใช้คำสั่ง usbimager สำหรับ Linux ซึ่งทำงานแบบ GUI เพื่อเขียนไฟล์ .img ไปยังการ์ดหน่วยความจำ microSD

รูปภาพ: ตัวอย่างการใช้โปรแกรม USB Imager (v1.0.5) เพื่อเขียนไฟล์ .img ไปยังการ์ด MicroSD 8GB

ข้อควรระวัง: ตรวจสอบให้แน่ใจก่อนว่า การ์ดหน่วยความจำ microSD ที่นำมาเสียบในช่องเขียนอ่านของคอมพิวเตอร์ Linux ของผู้ใช้ ตรงกับชื่ออุปกรณ์ใด เช่น ทำคำสั่งต่อไปนี้ (ในตัวอย่างนี้ ได้ทดลองใช้การ์ดหน่วยความจำขนาด 8 GB และตรงกับอุปกรณ์ชื่อ /dev/sdb)

$ sudo fdisk -l /dev/sdbDisk /dev/sdb: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Disk model: SD Transcend
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6205xxxx
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 8192 3686399 3678208 1.8G 83 Linux

จากตัวอย่างจะเห็นว่า มีอยู่เพียงพาร์ทิชันเดียว (/dev/sdb1)

ถ้าไม่ได้ใช้โปรแกรม USBImager ก็สามารถลองใช้คำสั่งต่อไปนี้ อ่านไฟล์จาก .img.xz และส่งต่อเอาต์พุตจากคำสั่งหนึ่งแบบ Pipe ไปยังอีกคำสั่งหนึ่งคือ dd เพื่อเขียนข้อมูลลงในการ์ดหน่วยความจำ เช่น /dev/sdb

ก่อนอื่นให้ลบพาร์ทิชันที่มีอยู่ใน microSD (ในตัวอย่างนี้ มีเพียงหนึ่งพาร์ทิชัน) โดยทำคำสั่งดังนี้

# make sure that the partition /dev/sdb1 is unmounted.
$ sudo umount /dev/sdb1
# remove the partition (1=first partition, ...)
$ sudo parted /dev/sdb rm 1
# check again (no partition exists on /dev/sdb)
$ sudo fdisk -l /dev/sdb

จากนั้นจึงเขียนข้อมูลจากไฟล์ Image ไปยัง microSD โดยทำคำสั่งต่อไปนี้

# uncompress the image file and write to microSD
$ xzcat ${IMAGE_FILE} | sudo dd bs=4M status=progress conv=fdatasync of=/dev/sdb
# eject the device (microSD) when finished
$ sudo sync && sudo eject /dev/sdb

การบูทระบบจาก MicroSD ในกรณีที่ใช้ eMMC Flasher Image

ในกรณีที่ได้เขียนไฟล์ eMMC Flasher Image ลง microSD แล้ว ให้เสียบการ์ดดังกล่าว เพื่อใช้งานกับบอร์ด BBB จากนั้นกดปุ่ม BOOT ค้างไว้ ก่อนเสียบสายไฟป้อนไฟเลี้ยง 5V

รอจนกว่า USER LEDs สว่างครบ 4 ดวง และจะเริ่มกระพริบ แล้วจึงปล่อยปุ่มกด จากนั้นรอให้มีการเขียนข้อมูลจาก microSD ไปยัง eMMC บนบอร์ด จนแล้วเสร็จ ในช่วงเวลาดังกล่าว จะเห็น USER LEDs ติด-ดับเรียงกันไปตามลำดับ (Running LEDs)

รูปภาพ: บอร์ด BBB ที่เชื่อมต่อกับโมดูล USB-to-Serial (CP210x) และเสียบการ์ด microSD
รูปภาพ: บอร์ด BBB ที่เสียบสาย LAN (RJ45) และจ่ายไฟเลี้ยง 5Vdc

รอเวลา และเมื่อ USER LEDs อยู่ในสถานะสว่างทุกดวงและไม่กระพริบอีกต่อไป ระบบจะรีบูทตัวเองอีกครั้งโดยอัตโนมัติ คราวนี้ USER LEDs ทุกดวงจะดับไป จากนั้นให้หยุดจ่ายไฟเลี้ยง แล้วถอดการ์ด microSD ออกจากช่องเสียบ

การเข้าใช้งานผ่าน Serial Console

ถ้าใช้โมดูล USB-to-Serial มาต่อกับขา Serial Console (ขา TxD, RxD และ GND) ของบอร์ด BBB ให้เปิดโปรแกรม เช่น Putty ในเครื่องคอมพิวเตอร์ของผู้ใช้ ตั้งค่า Baudrate 115200 เราจะสามารถเห็นข้อความในขณะที่มีการบูทระบบ เริ่มต้นตั้งแต่การทำงานของ U-Boot ไปจนถึง Login Prompt

ลองทำทำขั้นตอน Login โดยชื่อผู้ใช้และรหัสผ่านสำหรับ Debian คือ debian : temppwd

การใช้งานแบบรีโมทผ่าน Ethernet โดยใช้ SSH

ให้เสียบสาย LAN ที่พอร์ต RJ45 ของบอร์ด BBB และเชื่อมต่อกับเครือข่ายและอินเทอร์เน็ต จากนั้นจึงป้อนแรงดันไฟเลี้ยงให้บอร์ด บอร์ดจะเริ่มทำงาน บูทจาก MicroSD ถ้าใส่ไว้ในช่องเสียบ หรือ eMMC ถ้าไม่พบว่ามี MicroSD

ให้ทำคำสั่ง nmap ในเครื่อง Linux ของผู้ใช้ เพื่อตรวจสอบดูว่า พบอุปกรณ์ beaglebone.lan ในเครือข่ายเดียวกันหรือไม่

ยกตัวอย่างเช่น ถ้าอยู่ในเครือข่ายที่ใช้แอดเดรส IPv4 ในกลุ่ม 192.168.1.1/24 ให้ทำคำสั่งดังนี้

$ nmap -sP 192.168.1.1/24 | grep beaglebone.lanNmap scan report for beaglebone.lan (192.168.1.124)

จากตัวอย่างพบว่า อุปกรณ์มีแอดเดรส ตรงกับ 192.168.1.124 ในระบบเครือข่าย LAN

ถ้าปรากฏรายการอุปกรณ์ชื่อตรงกับ beaglebone.lan ก็สามารถใช้คำสั่ง ssh จากคอมพิวเตอร์ของผู้ใช้ เพื่อเข้าใช้งานแบบรีโมท

$ ssh debian@beaglebone.lan

ชื่อผู้ใช้และรหัสผ่านสำหรับเข้าใช้งาน Debian คือ debian : temppwd

เมื่อเข้าใช้งานผ่าน SSH Console ได้แล้ว ลองทำคำสั่งตรวจสอบเวอร์ชันของ Debian

$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

และทำคำสั่งตรวจสอบเวอร์ชันของ Linux Kernel ที่ใช้งาน เป็นต้น

$ uname -aLinux beaglebone 4.19.94-ti-r43 #1buster SMP PREEMPT Wed Apr 22 06:11:16 UTC 2020 armv7l GNU/Linux

ถัดทดสอบการเชื่อมต่อกับอินเทอร์เน็ต โดยใช้คำสั่ง ping เช่น

$ ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=109 time=31.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=109 time=31.2 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=109 time=31.4 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=109 time=31.1 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 8ms
rtt min/avg/max/mdev = 31.147/31.282/31.430/0.113 ms

ถ้าเราบูทระบบและใช้งานจาก microSD ให้ทำคำสั่งต่อไปนี้ เพื่อขยายขนาดของพาร์ทิชัน ให้เต็มความจุของ MicroSD จากนั้นจึงรีบูทระบบ

ทำคำสั่งตรวจสอบการใช้งาน File System ของระบบ ดังนี้ (สังเกตรายการ /dev/mmcblk0p1)

$ df -hFilesystem      Size  Used Avail Use% Mounted on
udev 215M 0 215M 0% /dev
tmpfs 49M 1.6M 47M 4% /run
/dev/mmcblk0p1 1.7G 1003M 628M 62% /
tmpfs 242M 0 242M 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 242M 0 242M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1000

จากนั้นทำคำสั่งขยายขนาด File System

$ sudo /opt/scripts/tools/grow_partition.sh$ sudo reboot

หลังจากรีบูทระบบ ทำคำสั่งตรวจดูขนาดของ /dev/mmcblk0p1

$ df -hFilesystem      Size  Used Avail Use% Mounted on
udev 215M 0 215M 0% /dev
tmpfs 49M 1.6M 47M 4% /run
/dev/mmcblk0p1 7.3G 1006M 6.0G 15% /
tmpfs 242M 0 242M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 242M 0 242M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1000

และเหมือนการใช้งาน Ubuntu หรือ Debian ให้ทำคำสั่ง เพื่ออัปเดท Software Repositories ของ Debian และอัปเกรดซอฟต์แวร์ในระบบ

# Update/upgrade local Debian software repositories
$ sudo apt-get update -y && sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y

เมื่อทำถึงขั้นตอนนี้ เราก็สามารถใช้งาน ทำคำสั่งพื้นฐานได้เหมือนใน Linux Debian หรือ Ubuntu โดยทั่วไป

เช่น ถ้าต้องการปรับเปลี่ยน Time Zone ให้เป็นประเทศไทย ก็ทำคำสั่ง แล้วเลือก Asia / Bangkok

$ sudo dpkg-reconfigure tzdata

Debian IoT สำหรับ BBB ได้มีการติดตั้งและเปิดใช้งาน Cloud9 Web-based IDE เอาไว้แล้ว ผู้ใช้สามารถเข้าใช้งานผ่าน Web Browser ได้ ไปที่ http://beaglebone.lan/ide.html

รูปภาพ: ตัวอย่างการเข้าใช้งานผ่าน Cloud9 IDE และการทำงานของ Bash Shell
รูปภาพ: การรันโค้ดตัวอย่าง blinkLED.js (Node.js)
รูปภาพ: การรันโค้ดตัวอย่าง blinkLED.py (Python)

การใช้งาน Ethernet / Internet ผ่านทาง USB

ในกรณีที่ไม่ได้ใช้วิธีการเชื่อมต่อกับเครือข่ายด้วยสาย LAN (RJ45 Port) กับบอร์ด BBB เราก็อาจใช้วิธีเชื่อมต่อด้วยวิธีการที่เรียกว่า USB Ethernet/RNDIS Gadget ผ่านสาย USB จากพอร์ต Mini-USB ไปยังพอร์ต USB ของคอมพิวเตอร์ของผู้ใช้ ที่ทำหน้าที่เป็น Host PC อาจเป็น Windows, Linux หรือ Mac OS X

ในตัวอย่างนี้จะกล่าวถึงเฉพาะการใช้เครื่อง Linux เป็น Host PC เพื่อแชร์การใช้งานอินเทอร์เน็ตให้บอร์ด BBB

ทำคำสั่งตรวจสอบอินเทอร์เฟส (Interface) ชื่อ usb0 และ usb1 ของบอร์ด BBB ตามลำดับดังนี้

# Login via Serial console on Debian-BBB # change to root
$ sudo su
# check the IP address for usb0 interface (should be 192.168.7.2)
$ ifconfig usb0
# check the IP address for usb1 interface (should be 192.168.6.2)
$ ifconfig usb1

# set the IP address of the default gateway (use 192.168.6.1)
$ route add default gw 192.168.6.1
# show ip route
$ ip route
default via 192.168.6.1 dev usb1
192.168.6.0/24 dev usb1 proto kernel scope link src 192.168.6.2
192.168.7.0/24 dev usb0 proto kernel scope link src 192.168.7.2

ในกรณีที่เชื่อมต่อกับเครื่องคอมพิวเตอร์ที่เป็น Linux เราจะใช้ usb1 ที่มีแอดเดรสของ BBB เป็น 192.168.6.2 และจะต้องตั้งค่า Default Gateway เป็น 192.168.6.1

ทางด้านคอมพิวเตอร์ Linux ที่เป็น Host PC และต้องการแชร์การใช้งานอินเทอร์เน็ต ให้ทำคำสั่งดังนี้ ตรวจสอบอินเทอร์เฟส eth1 และ eth2 ตามลำดับ (ส่วน eth0 ของ BBB นั้นเชื่อมต่อพอร์ต RJ45 ไปยังเครือข่ายและอินเทอร์เน็ต)

# On Linux Host PC # check the IP address of eth1 interface (should be 192.168.7.1)
$ sudo ifconfig eth1
# check the IP address of eth2 interface (should be 192.168.6.1)
$ sudo ifconfig eth2

ทำคำสั่งต่อไปนี้ เพื่อเปิดการใช้งาน IP Forwarding / NAT จากบอร์ด BBB ไปยัง eth0 เพื่อออกสู่อินเทอร์เน็ต

# enable packet routing / NAT on eth0
$ sudo iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
# add rules to iptables to accept packets from eth1 and eth2
$ sudo iptables --append FORWARD --in-interface eth1 -j ACCEPT
$ sudo iptables --append FORWARD --in-interface eth2 -j ACCEPT
$ sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

ถ้าตั้งค่าได้ถูกต้องแล้ว ให้ลองทำคำสั่ง ping ใน BBB เช่น

$ ping 8.8.8.8

เพื่อทดสอบดูว่า สามารถเชื่อมต่อไปยังอินเทอร์เน็ต ผ่านทาง Linux Host PC ได้หรือไม่

--

--

<rawat.s>
<rawat.s>

Written by <rawat.s>

I'm Thai and working in Bangkok/Thailand.

No responses yet