การรวบรวม Linux บน Arduino ต้องทำอย่างไรถ้าเป็นไปได้?


25

เป็นไปได้หรือไม่ที่จะรัน Linux บน Arduino? ถ้าใช่จะต้องพิจารณาขั้นตอนและข้อ จำกัด อะไรบ้าง ถ้าไม่ข้อ จำกัด อะไรที่ป้องกันไม่ให้เกิดขึ้น?



คำตอบ:


19

ลีนุกซ์เป็นระบบปฏิบัติการที่ซับซ้อนมาก, แต่มันอาจจะพอดีกับ Arduino สิ่งที่ต้องพิจารณา:

  • ไม่มีพอร์ต AVR ปัจจุบันของซอร์สโค้ด
  • คุณไม่มีกราฟิกแทนที่จะเข้าใช้เทอร์มินัลแทน UART
  • ไดรเวอร์ระบบไฟล์จะต้องถูกเขียนใหม่เพื่อเข้าถึงแฟลชภายในหรือการ์ด SD ภายนอก
  • มันจะช้ามาก ! ATmega328 จะทำงานที่ 16 MHz หรือสูงสุด 20 MHz (โอเวอร์คล็อก) เครื่องลีนุกซ์ส่วนใหญ่ทำงานที่ความเร็วต่ำกว่า 400 MHz, และอื่น ๆ ที่มีกราฟิก
  • คุณอาจต้องการ RAM เพิ่มเติมบางส่วนอาจเป็นความคิดที่ดีที่จะใช้ ATmega2650 (หนึ่งในเมกะ) ซึ่งมี RAM 16 เท่าของ Uno คุณสามารถใช้ Due (6x เร็วเท่ากับ Uno และ RAM มากกว่า)
  • คุณอาจต้องเขียนไดรเวอร์ USB พิเศษสำหรับ OTG (บน Due) หรือ MAX3421EE (Mega ADK, ตัวป้องกันโฮสต์ USB)

ในระยะสั้นก็จะใช้เวลามากเวลาและความพยายามและอาจจะช้าเกินไปสำหรับการใช้ชีวิตประจำวัน หากคุณต้องการ Arduino Linux ลองดูที่Yún


2
คุณจะไม่ "อาจจะ" ต้องแกะพิเศษคุณไม่ต้องแกะพิเศษ Linux ต้องการ 1 MB + ram นอกจากนี้การขาด MMU จะหมายความว่าคุณต้องคิดวิธีเลียนแบบหนึ่ง (หรือเรียกใช้ ucLinux) ที่ดีที่สุดในความเป็นจริงคุณจะต้องเลียนแบบโปรเซสเซอร์ที่มีความสามารถมากขึ้นใน atmega ซึ่งจะเป็นลำดับความสำคัญช้ากว่ารหัสท้องถิ่น แม้แต่อาร์ดิโน่ก็ยังไม่ได้อยู่ใกล้กับ RAM ที่ต้องการ
Connor Wolf

นอกจากนี้ ATmega328P มี SRAM 2 KB และ ATmega2560P มีเพียง 8 KB นั่นเป็นเพียง 4X RAM ไม่ใช่ 16x
Connor Wolf

16

มันมี RAM ไม่เพียงพอ คุณต้องสอนให้บูตจากหน่วยความจำแฟลชซึ่งจะเกี่ยวข้องกับการเขียน bootloader ใหม่

คุณแทนสามารถใช้Arduino หยุนหรือPCDuino ; ในขณะที่ไม่ใช่ Arduinos "มาตรฐาน" เหล่านี้รองรับ Arduino shields และใช้ Linux

หรือมีราสเบอร์รี่ Piอยู่เสมอ


ทำไมคุณถึงบอกว่าหยุนไม่ใช่ Arduino มาตรฐาน? ฉันเห็นด้วยว่ามันอาจจะไม่ใช่สิ่งที่ธรรมดาที่สุด แต่มันเป็น Arduino แน่นอน
jfpoilpret

@jfpoilpret Arduinos ส่วนใหญ่เป็นบอร์ด atmega ที่เรียกใช้คอมไพล์ C ++ ผ่าน avr-gcc และมีชิปจัดการ USB พวกมันมีรูปร่าง / ขนาด / กำลังที่หลากหลาย แต่ก็เหมือนกัน ดูเหมือนชัดเจนว่า OP กำลังพูดถึงสิ่งเหล่านี้และไม่ใช่หยุน / ฯลฯ ดังนั้นความแตกต่าง
Manishearth

นอกจากนี้ยังมีArduino Treซึ่งกำลังจะวางจำหน่ายเร็ว ๆ นี้อย่างน้อยฉันก็หวังว่ามันจะเร็ว ๆ นี้ ;-)
Chris O

6

คำตอบสั้น ๆ คือไม่

โดยพื้นฐานแล้วคุณจะต้องใช้ RAM เพิ่มขึ้นมากมายแล้วแม้แต่ ATmega ที่ใหญ่ที่สุดก็มีมาให้

ในทางทฤษฎีแล้วมันเป็นไปได้ที่จะเพิ่มฮาร์ดแวร์ภายนอกและตั้งโปรแกรม ATmega เพื่อเลียนแบบซีพียูที่ทรงพลังกว่าและรัน linux บนนั้น อย่างไรก็ตามใน aarduino ธรรมดามันเป็นไปไม่ได้

มันจะเป็นจริงมากขึ้นในการใช้งาน linux บน Arduino Due ซึ่งโดยทั่วไปคือ AT91SAM3X8E CPU อย่างไรก็ตามคุณยังต้องเพิ่ม SRAM และพื้นที่เก็บข้อมูลเพิ่มเติม

มีสิ่งต่าง ๆ เช่น Arduino Yun แต่มันเป็นโมดูลลินุกซ์ที่แยกจากกันโดยสิ้นเชิงบน PCB เดียวกันกับ ATmega32U4 ดังนั้นฉันไม่รู้ว่าคุณจะนับเป็น Arduino ได้ไหม


อาจมีความเกี่ยวข้อง: ต้องใช้อะไรบ้างในการรัน linux แบบฝัง


1

มีบอร์ดเรียกว่าpcDuinoที่สามารถเรียกใช้ Linux ได้หลายรูปแบบเช่น Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL คณะกรรมการนี้ไม่ได้เป็นพื้นเมือง Arduino ค่อนข้างArduino AtHeartและจะทำโดยLinkSprite
pcDuino

Arduino มีบอร์ดสองชุดที่รองรับการใช้งาน Linux ที่เรียกว่าLinino :

  • Arduino Yunเป็นคณะกรรมการไมโครคอนโทรลเลอร์บนพื้นฐานของ ATmega32u4 และ Atheros AR9331 โปรเซสเซอร์ Atheros รองรับการกระจาย Linux ที่ใช้ OpenWrt ซึ่งชื่อว่า Linino OS บอร์ดนี้มี Ethernet และ WiFi ในตัวรองรับพอร์ต USB-A, ช่องเสียบการ์ด micro-SD, ขาอินพุต / เอาต์พุตดิจิตอล 20 ขา (สามารถใช้เป็นสัญญาณ PWM 7 ช่องและ 7 เป็นอินพุตแบบอะนาล็อก), คริสตัล 16 MHz oscillator การเชื่อมต่อ micro USB ส่วนหัว ICSP และปุ่มรีเซ็ต 3 ปุ่ม
  • บอร์ด Arduino Tianใหม่ใช้พลังงานจาก SAMD21 MCU ของ Atmel ประกอบไปด้วย ARM Cortex® M0 + แบบ 32 บิตและ Qualcomm Atheros AR9342 ซึ่งเป็นหน่วยประมวลผล MIPS แบบบูรณาการสูงถึง 533MHz และ IEEE802.11n 2x2 2.4 / โมดูล WiFi dual-band 5 GHz Qualcomm Atheros MIPS รองรับการกระจาย Linux โดยใช้ OpenWRT ชื่อ Linino Arduino Tian ยังมีหน่วยความจำ 4GB eMMC ซึ่งจะเป็นประโยชน์ในการสร้างโครงการของคุณ เป็นไปได้ที่จะเปิด / ปิดพอร์ต Linux จาก MCU เพื่อลดการใช้พลังงาน
  • Arduino Industrial 101เป็นบอร์ดประเมินผลสำหรับโมดูล Arduino 101 LGA ไมโครคอนโทรลเลอร์ ATmega32u4 รวมอยู่ในกระดานข้างก้น โมดูลนี้รองรับการกระจาย Linux ตาม OpenWRT ชื่อ LininoOS บอร์ดนี้มี WiFi ในตัว (การดำเนินงาน IEEE 802.11b / g / n สูงถึง 150Mbps 1x1 2.4 GHz), 3 GPIOs (ซึ่ง 2 สามารถใช้เป็นเอาต์พุต PWM), 4 อินพุตอะนาล็อก 1 USB, 1 สัญญาณอีเธอร์เน็ต 1 ขา ส่วนหัวและตัวแปลง DC / DC ในตัว ลองดูคู่มือการประกอบและเชื่อมต่อบอร์ดกับคอมพิวเตอร์ด้วยสายไมโคร USB เพื่อเริ่มต้นใช้งาน

-1

นี่เป็นเวลาหลายปี แต่อาจจะมีความเกี่ยวข้องมากขึ้นเมื่อ Arduinos ได้รับ RAM และ ATMega AVR 32 บิตขึ้นไป ฯลฯ มีปัญหาที่เห็นได้ชัดโดยเฉพาะในคำตอบที่ได้รับความนิยมมากที่สุด Arduino ใช้ AVR MICROCONTROLLERไม่ใช่ MICROPROCESSOR นี่คือเหตุผลสำคัญว่าทำไมไม่มีพอร์ตของ linux ไมโครคอนโทรลเลอร์ได้รับการออกแบบมาเพื่อทำงานเฉพาะด้านโดยเฉพาะแอปพลิเคชันที่กำหนดความสัมพันธ์ของอินพุทและเอาท์พุทเป็นอย่างดี ไมโครโปรเซสเซอร์ออกแบบมาเพื่อใช้งานแอพที่หลากหลายบนระบบปฏิบัติการ จำไว้ว่าตั้งแต่ต้น Linux จำเป็นต้องมีหน่วยจัดการหน่วยความจำและไม่สามารถทำงานบนพีซี 8088 หรือ 286 ได้ จากนั้นก็มีμClinuxซึ่งเดิมตั้งเป้าหมายตระกูล Motorola DragonBall ของโปรเซสเซอร์ 68k ฝังตัวสำหรับ Palm Pilots ไม่เคยประสบความสำเร็จเป็นพิเศษ คุณอาจประสบความสำเร็จมากกว่าในการย้ายพอร์ต FreeDOS หรือแม้แต่ Minix กว่า Linux บางทีอาจจะเป็นบางอย่างในแอสเซมเบลอร์ แต่การรวบรวมระบบปฏิบัติการบนไมโครคอนโทรลเลอร์เป็นไปไม่ได้ อาจเป็นปัญหาทางวิชาการที่ท้าทาย


-2

เป็นไปได้ แต่มันจะเจ็บปวดเพราะคุณจะต้องเขียนใน C (ไม่ต้องพูดถึงฮาร์ดแวร์พิเศษที่จำเป็นเช่นการ์ด sd การ์ดและชิพหน่วยความจำพิเศษ) บางอย่างเช่น Ontas เคอร์เนลที่ฉันเขียน C สำหรับ Arduino นั้นจะช่วยตามที่มันได้รับการสนับสนุนในการเพิ่มไดรเวอร์โดยทำให้ฟังก์ชั่น void loop ทำซ้ำได้ช้าลง (นี่ไม่ใช่เรื่องใหญ่เท่าที่คุณคิดว่ามันเป็น) (Ontas ยังอยู่ระหว่างการพัฒนาและเพิ่มคุณสมบัติใหม่ตลอดเวลา)

คลิกที่นี่เพื่อลิงค์ไปยังไฟล์. ini และไฟล์. h

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.