ลินุกซ์ฝังตัวที่เล็กที่สุด?


19

ฉันชอบถามผู้เชี่ยวชาญออกไป .. ลินุกซ์ฝังตัวที่ดีที่สุดสำหรับ:

  • หน่วยความจำแฟลช ~ 700Kb
  • ราม ~ 256Kb
  • หน่วยประมวลผล: คอร์เทกซ์ปลายแขนสูง M3 (บางอย่างจากตระกูล STM32 เป็นต้น)

โมดูลที่ต้องการ: - แกนเคอร์เนล - ชุดไดรเวอร์พื้นฐาน: USB / ระบบเครือข่าย (สำหรับ WiFi - ไม่มี AP, เพียงไคลเอนต์, ไม่มีความปลอดภัย) / SPI / Uart / I2C

เป็นไปได้หรือไม่ฉันฝัน?

แนวคิดก็คือใช้ CortexM3 ระดับไฮเอนด์ 5 $ และไม่ใช้ความทรงจำภายนอกเพื่อที่ฉันจะได้เพลิดเพลินไปกับไดรเวอร์ที่พร้อมสำหรับ SDIO / WiFi เป็นต้น

  • ฉันอัปเดตคำถามพร้อมคำอธิบายบน WiFi อินเตอร์เน็ตไร้สายในแง่ที่ว่ามันเป็นเรื่องง่ายการทำงานของไคลเอนต์ mill ไม่มีอะไรแฟนซีบางที wep ถ้าฉันสามารถใส่ได้

  • การอัปเดตอื่น: แล้ว uCLinux ล่ะ?

คำตอบ:


26

ฉันจะบอกว่าคุณฝัน ปัญหาหลักคือ RAM ที่ จำกัด

ในปี 2004 Eric Beiderman สามารถจัดการการบูตเคอร์เนลด้วย RAM ขนาด 2.5MBโดยมีการลบการใช้งานจำนวนมาก

อย่างไรก็ตามนั่นอยู่ใน x86 และคุณกำลังพูดถึง ARM ดังนั้นฉันจึงพยายามสร้างเคอร์เนล ARM ที่เล็กที่สุดที่เป็นไปได้สำหรับแพลตฟอร์ม 'อเนกประสงค์' (หนึ่งในวิธีที่ง่ายที่สุด) ฉันปิดตัวเลือกที่กำหนดค่าได้ทั้งหมดรวมถึงตัวเลือกที่คุณกำลังมองหา (USB, WiFi, SPI, I2C) เพื่อดูว่ามันจะมีขนาดเล็กแค่ไหน ตอนนี้ฉันแค่อ้างถึงเคอร์เนลที่นี่และนี้ไม่รวมถึงองค์ประกอบใด ๆ userspace

ข่าวดี: มันจะพอดีกับแฟลชของคุณ zImage ที่ได้คือ 383204 ไบต์

ข่าวร้าย: ด้วย RAM ขนาด 256kB จะไม่สามารถบู๊ตได้:

$ size obj/vmlinux
  text     data     bss     dec     hex filename
734580    51360   14944  800884   c3874 obj/vmlinux

เซ็กเมนต์. text มีขนาดใหญ่กว่า RAM ที่มีอยู่ของคุณดังนั้นเคอร์เนลจึงไม่สามารถคลายการบีบอัดให้จัดสรรหน่วยความจำในการบูตเพียงอย่างเดียว

วิธีแก้ปัญหาหนึ่งคือใช้การสนับสนุนแบบรันไทม์ (CONFIG_XIP) หากระบบของคุณรองรับการทำงานนั้น (เช่นสามารถเรียกคำแนะนำจาก Flash ได้โดยตรง) อย่างไรก็ตามนั่นหมายความว่าเคอร์เนลของคุณจำเป็นต้องมีขนาดที่ไม่บีบอัดในแฟลชและ 734kB> 700kB นอกจากนี้ส่วน. data และ. bbs รวม 66kB โดยปล่อยให้ abut 190kB สำหรับทุกอย่าง (เช่นโครงสร้างข้อมูลที่จัดสรรแบบไดนามิกในเคอร์เนล)

นั่นเป็นเพียงเคอร์เนล ไม่มีไดรเวอร์ที่คุณต้องการหรือ userspace ใด ๆ

ใช่คุณต้องการ RAM เพิ่มอีกเล็กน้อย


1
คำตอบที่ยอดเยี่ยม .. ฉันประหลาดใจที่พบว่าเคอร์เนล linux ที่เปลือยเปล่านี้หนักหนา .. ฉันมีคำถามติดตาม .. มี wrappers ใด ๆ ออกมาที่นั่นทำให้ฉันสามารถใช้ไดรเวอร์ linux กับระบบปฏิบัติการอื่น ๆ ได้หรือไม่? สิ่งที่ฉันชอบเกี่ยวกับ Linux คือความพร้อมใช้งานของไดรเวอร์ .. ฮาร์ดแวร์ที่ฉันสัมผัสทุกตัวมีไดรเวอร์ของ linux และมันมักจะเจ็บปวดกับพอร์ตเหล่านี้เหตุผลเดียวที่ฉันสนใจ Linux ก็คือไดรเวอร์จริงๆ
แฟรงค์

มีข้อสังเกตเกี่ยวกับการเชื่อมโยงการบูตเคอร์เนลฉันเห็นในโพสต์ต่อไปนี้โดย Eric ว่าเขาจัดการเพื่อให้ได้ภาพเคอร์เนลที่บีบอัดถึง 190K และไม่บีบอัดประมาณ 360K ดังนั้นในทางทฤษฎีคุณอาจใส่ลงในแฟลชของคุณโดยไม่บีบอัด ข้อมูลเพิ่มเติม: elinux.org/Linux_Tinyแต่ฉันไม่รู้ว่าสถานะของโครงการคืออะไร
Mihailo

5

IMO คุณกำลังฝัน โดยเฉพาะอย่างยิ่งกับ USB ระบบเครือข่ายและ 802.11 / wifi ฉันไม่คิดว่าคุณจะทำได้และ M3 ก็ยืดออกไปได้จริงๆ

OpenWRT เป็นหนึ่งใน distro Linux ที่เล็กที่สุดและฝังได้มากที่สุดที่ฉันรู้จักสำหรับการเชื่อมต่อเครือข่ายและมันยากที่จะได้รับภายใต้ 2MB โดยเฉพาะกับ Wifi

ลองดูชิป ARM ระดับสูงกว่าถ้าเป็นสิ่งที่คุณต้องการหรือไปกับ Broadcom หรือ Atheros SoC ที่ปัจจุบันอยู่ในเราเตอร์


คุณอาจเป็นอย่างดีจะถูกต้อง แต่ฉันปรับปรุงคำถามที่มีการชี้แจงใน WiFi .. ฉันจะไม่จำเป็นต้องโปรโตคอลทั้งหมด DCHP / IP และซ็อกเก็ตขั้นพื้นฐาน ..
แฟรงก์

4

คุณมี MMU บนโปรเซสเซอร์หรือไม่ หากคุณไม่ต้องการดู: http://www.uclinux.org/ที่ควรให้ขนาดเคอร์เนลที่เล็กกว่าที่กล่าวไว้ มันใช้งานได้กับชิป CortexM3 Atmel บางตัวดังนั้นจึงอาจเหมาะกับคุณ ฉันไม่ได้ใช้มันดังนั้นนี่เป็นการเก็งกำไรเท่านั้น Doh ฉันเพิ่งเห็นคำถามที่ได้รับการปรับปรุง - ดีถ้าคุณไม่มี MMU (ซึ่งคุณอาจไม่ได้) คุณไม่สามารถใช้เคอร์เนล "ปกติ" และคุณจะต้องใช้ ucLinux


@mihalo ขอบคุณที่ชี้ให้เห็น uclinux +1 สำหรับสิ่งนั้น ฉันได้ถามคำถามเกี่ยวกับว่า .. ขอบคุณถ้าคุณสามารถยืมมือ ..
แฟรงก์

น่าเสียดายที่ฉันไม่มีประสบการณ์มากกับเรื่องนี้ฉันดูที่พอร์ต ucLinux และบอร์ดทั้งหมดที่กล่าวถึงมี RAM ภายนอก เคอร์เนลที่เล็กที่สุด (ไม่บีบอัด) ที่ฉันเห็นนั้นมีไว้สำหรับ ADI Blackfin - บางอย่างเช่น 400KB แต่นั่นไม่ใช่ ARM และสำหรับ ARM นั้นอาจใหญ่กว่าอย่างมาก สำหรับไมโครโปรเซสเซอร์ Atmels ARM จะอยู่ที่ประมาณ 1.5 MB และพวกเขาทั้งหมดใช้ RAM ภายนอก
Mihailo

Mihailo ขอบคุณที่สละเวลาสำรวจดู ..
แฟรงค์

2

คุณอาจต้องการพิจารณาNuttXเป็นทางเลือกหากคุณต้องการความสอดคล้องของ POSIX ในแพลตฟอร์มขนาดเล็กที่ไม่ใช่ MMU


3
มันดูเรียบร้อยดี แต่มันก็คุ้มค่าเมื่อเทียบกับข้อดีข้อเสียบางประการเมื่อเทียบกับ Linux เพื่อให้เป็นคำตอบที่สมบูรณ์ยิ่งขึ้น
PeterJ

2

ฉันจำไม่ได้เฉพาะเจาะจง แต่มี บริษัท ที่ทำให้บอร์ดที่มี STM32F4 ใช้ uCLinux ซอฟต์แวร์สามารถดาวน์โหลดได้ แต่มีทั้งแรมภายนอกและแฟลชบนบอร์ดเหล่านั้น

ในฐานะที่เป็นบันทึกด้านราคาสูงมากว่าคุณจะดีกว่าการได้รับ Pi หรือ Pine64 เว้นแต่ว่าคุณต้องการให้มันเป็นประสบการณ์การเรียนรู้ บริษัท ของเราตรวจสอบและพิจารณาค่าใช้จ่ายในการพัฒนาและตัดสินใจว่าถ้าเราต้องทำงานอะไรบน Linux ที่ฝังอยู่โดยใช้ stm32f4 นั้นเป็นไปไม่ได้ทางเศรษฐกิจเพียงแค่นับต้นทุนชิ้นส่วน


บทความที่ยอดเยี่ยมซึ่งรวมถึงค่าใช้จ่าย BOM สำหรับการใช้งาน uClinux บน M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman

0

uCLinux อาจทำงานได้ อย่างไรก็ตามคุณจะไม่มีการป้องกันหน่วยความจำในระบบเนื่องจากคุณไม่มี MMU นี่หมายถึงความผิดพลาดใด ๆ ในแอปพลิเคชันใด ๆ อาจทำให้ระบบทั้งหมดล่ม คุณยังสามารถประสบปัญหาการกระจายตัวของหน่วยความจำโดยไม่ต้อง MMU ทำไมไม่ดูหนึ่งใน TI Sitaras พวกมันยังค่อนข้างถูกและคุณสามารถใช้งานลีนุกซ์เต็มรูปแบบได้ซึ่งจะมีความยืดหยุ่นมากกว่า

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