มี Linux distro ที่เรียกใช้ "สไตล์ฝังตัว" ใน Raspberry Pi ได้อย่างง่ายดายหรือไม่? [ปิด]


9

ฉันต้องการ distro Linux ที่จะให้สิ่งต่อไปนี้กับฉัน:

  • วิ่งบนราสเบอร์รี่ Pi
  • สามารถรอดพ้นจากการสูญเสียพลังงานได้อย่างน่าเชื่อถือ (เช่นผ่านระบบไฟล์แบบอ่านอย่างเดียว)

ฉันสามารถตามหาเอกสารเกี่ยวกับวิธีการเปลี่ยนดิสทริบิวเตอร์ลินุกซ์ธรรมดาให้เป็นโหมดอ่านอย่างเดียวได้ ฉันหวังว่าจะมีตัวสร้าง distro ที่ออกแบบมาเพื่อทำงานในสภาพแวดล้อมแบบฝังตัว

ฉันไม่ต้องการแพ็คเกจหรือไดรเวอร์มากมายพอที่จะให้ Pi ทำงานกับ USB / Ethernet ได้ ฉันไม่ต้องการอินเทอร์เฟซ GUI หรืออะไรเลยนี่แค่เรียกใช้บริการที่สร้างขึ้นเองใน C

ไม่มีใครรู้ของ distro ที่จะพอดี?


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

ลองดูraspberrypi.stackexchange.comแต่ฉันคิดว่าคำถามนี้ไม่ได้อยู่ที่หัวข้อเช่นกันเพราะมันเป็นคำถามประเภทการช็อปปิ้ง
Kevin Panko

คำตอบ:


3

ระบบฝังตัวส่วนใหญ่ใช้เคอร์เนลที่สร้างขึ้นเอง เครื่องมือหนึ่งในการอำนวยความสะดวกนั่นคือBuildrootชุดของสคริปต์เพื่อสร้าง GNU gchain toolchain, ไลบรารี uClibc แทนที่ GNU libc, Linux kernel, BusyBox และยูทิลิตี้ / แพ็คเกจอื่น ๆ สำหรับระบบไฟล์รูทบอร์ดแบบฝัง RaspberryPi เป็นคณะกรรมการที่ค่อนข้างใหม่เพื่อให้การสนับสนุนของมันใน Buildroot ยังอยู่ภายใต้การพัฒนา แต่มีเห็นได้ชัดโครงการ , โครงการอื่นและการทำงานของแต่ละบุคคล อาจมีมากขึ้นเนื่องจากการผลิต RP เพิ่มขึ้นและการกระจายเพิ่มขึ้น

เมื่อใช้ Buildroot คุณสามารถสร้างเคอร์เนล Linux และระบบไฟล์รูทตามที่อธิบายไว้ในคำถามของคุณ ขึ้นอยู่กับความเร็วการเชื่อมต่ออินเทอร์เน็ตและความสามารถของพีซีในการพัฒนาคุณอาจมีไบนารีใน 1 ถึง 4+ ชั่วโมง ข้อเสียคือไบนารีผลลัพธ์ไม่ได้รับการทดสอบหรือรับประกันว่าจะสามารถบูตและดำเนินการได้สำเร็จ คอนโซลระบบมีผลบังคับใช้สำหรับการดีบักลำดับการบู๊ต ดูคำตอบของฉันสำหรับฉันจะเข้าถึง mini-pc ของฉัน (RaspberryPi / MK802 / Mele A1000 / VIA APC) ผ่านทางอีเธอร์เน็ต / wifi ได้อย่างไรโดยไม่ต้องมีการตรวจสอบ? แต่เนื่องจาก RaspberryPi ได้รับการออกแบบให้ไม่สามารถต้านทานได้ข้อเสียนี้ไม่ควรเป็นอุปสรรคในการสร้างเคอร์เนลและ RFS ที่กำหนดเองของคุณ

เกี่ยวกับ "เอาตัวรอดจากการสูญเสียพลังงาน": การเลือกระบบไฟล์ที่เหมาะสมสามารถบรรเทาความกังวลนี้ได้ เลเยอร์อุปกรณ์ MTD บวกกับระบบไฟล์ที่ทำเจอร์นัล (เช่น jffs2) แสดงให้เห็นว่าค่อนข้างแข็งแกร่งจากประสบการณ์ เพื่อการป้องกันที่ใกล้เคียงที่สุดมี initramfs ที่ใช้ramfs(ไม่ใช่ ramdisk ขนาดคงที่) โดยไม่มีการสลับไปยังระบบไฟล์ R / W

ภาคผนวก

บทนำ 30 สไลด์เกี่ยวกับคุณสมบัติของ Buildroot อยู่ที่นี่
ในตอนท้าย (# 27) มีการกล่าวถึงเครื่องมือที่คล้ายกันและสลับกันสองสามตัวเพื่อสร้างระบบฝังตัว


2

TinyCoreLinuxอ่านได้โดยค่าเริ่มต้นเท่านั้น (การมีอยู่เป็นทางเลือก): http://www.tinycorelinux.net/ports.html


คุณไม่เห็นชื่อ "Arm V6 Raspberry Pi" ในลิงก์ที่ฉันให้หรือไม่
avra

ฉันดูเหมือนจะพลาดที่ โหวตแล้ว;)
Journeyman Geek

1

เมื่อมี Seagate Dockstar ที่มีการเข้าถึงคอนโซลฉันได้ติดตั้ง Debian บีบลงบนมัน ในฐานะที่เป็นจุดเริ่มต้นที่ทำให้รูทแบบอ่านอย่างเดียวฉันใช้บทความที่ยอดเยี่ยมนี้1โดย Jeff Doozan กลยุทธ์พื้นฐานเกี่ยวข้องกับการสร้างสคริปต์ที่ทุก ๆ การบู๊ตเมาท์ไดเร็กทอรีที่สามารถเขียนได้ที่จำเป็นเป็น tmpfs ฉันพูดสคริปต์โดย Jeff 2ที่นี่ (ความรุ่งโรจน์ถึง Jeff!)

#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
  echo "Mounting $DIR as tmpfs"
  mount -n -t tmpfs tmpfs $DIR
  if [ -d "$DIR-saved" ]; then
    echo "Restoring $DIR-saved to $DIR"
    tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
  fi
done

echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases

exec /sbin/init

บันทึกบรรทัดด้านบนเป็นสคริปต์ที่เรียกว่า/ sbin / init-roบนรูทเป้าหมายของคุณและทำให้สามารถเรียกใช้งานได้

chmod 755 /sbin/init-ro

ในการใช้สคริปต์นี้ในระหว่างการบู๊ตคุณต้องเตรียมรูทระบบเล็กน้อย (ทั้งหมดอ้างจากสคริปต์ของเจฟฟ์2 (ปรับให้เข้า$ROOTกับตำแหน่งที่แท้จริงของรูทที่ติดตั้งของคุณ)

# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf


# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run


# Fixes from http://wiki.debian.org/ReadonlyRoot

rm $ROOT/etc/blkid.tab  > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab

rm $ROOT/etc/mtab  > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab

rm $ROOT/etc/rcS.d/S12udev-mtab

rm -rf $ROOT/var/log/*

หลังจากเตรียม rootfs ไว้ด้านบนคุณสามารถเมาท์ rootfs อ่านอย่างเดียวใน / etc / fstab (แทนที่ext2ด้วยระบบไฟล์ที่คุณใช้หรือใช้rootfsแทน)

/dev/root  /                 ext2  noatime,ro   0 1

สุดท้ายคุณก็ต้องผนวกต่อไปนี้เพื่อพารามิเตอร์ของคุณ (เช่นใน/boot/cmdline.txtบน Raspi) เพื่อที่จะเรียกใช้สคริปต์ก่อนที่จะเกิดขึ้นจริง/ sbin / init (ต่อไปนี้เป็นเพียงตัวอย่างของพารามิเตอร์rootและrootdelayส่วนสำคัญที่จะต้องผนวกเข้ากับบรรทัดในcmdline.txtคือinit=/sbin/init-ro)

root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro

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


1

2 เซนต์ของฉันมันง่ายกว่ามาก (และดีกว่าในตอนท้าย) เพื่อสร้างแบตเตอรีสำรองแบตเตอรี่ที่เชื่อถือได้สำหรับ Pi มากกว่าที่จะอยู่กับระบบปฏิบัติการแบบอ่านอย่างเดียว แน่นอนนั่นหมายความว่าคุณจะต้องมีความรู้พื้นฐานทางอิเล็กทรอนิกส์ (และฉันหมายถึง BASIC เรากำลังพูดถึงส่วนประกอบ 3-4) ผู้ชายคนนี้สร้างภาพแฟนซีด้วยอีกไม่กี่: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system

หากคุณทำสิ่งนี้อย่าใช้ LiPo; NiCad คือสิ่งที่คุณต้องการ LiPo ไม่สามารถควบคุมการชาร์จได้อย่างคงที่ คุณได้รับการเตือน

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

หากต้องการปิดใช้งานบันทึกทั้งหมดคุณสามารถเพิ่มบรรทัดต่อไปนี้เป็นกฎข้อแรกใน /etc/rsyslog.conf:

*.* ~

แม้ว่าจะมีปัญหาก็ตาม 99.9999% ของเวลา (โดยที่ฉันหมายถึงเกือบทุกครั้งในประสบการณ์ส่วนตัวของฉัน) ว่าปัญหาจะได้รับการดูแลเมื่อดิสก์ถูกสแกนครั้งถัดไป เมื่อสิ่งที่เกิดขึ้นส่วนใหญ่ขึ้นอยู่กับสภาพอากาศระบบปฏิบัติการสังเกตเห็นสิ่งที่คุณทำ (แปลกพอมันมักจะไม่) เนื่องจาก Pi ใช้การ์ด SD ฉันจึงจินตนาการว่าสิ่งนี้จะเกิดขึ้นน้อยกว่า Pi บนพีซีของฉัน


1

ถ้าฉันจำได้อย่างถูกต้องระบบไฟล์แบบอ่านอย่างเดียวจะไม่ 'ปลอดภัย' การ์ด SD ฉันมี 10 Pi ทำงานอยู่ที่ลูกค้า (สถานะปัจจุบันมากกว่า 80 วันสำหรับครึ่งหนึ่งของพวกเขา) ซึ่งพลังงานไม่เสถียรเท่าที่คุณคาดหวัง / ต้องการ ใช้เวลาสักครู่ในการค้นหาอุปกรณ์ไฟฟ้า (เครื่องชาร์จราคาถูกจัดอันดับที่ 3A และเครื่องชาร์จ iPad ราคาแพงที่ 2.3A) ที่จริง ๆ แล้วทำให้ Pi ทำงานได้นานกว่าสองวันก่อนที่ฉันจะมีปัญหาการทุจริต SD ทุกประเภท รวมถึงที่ใช้ IIRC แบบอ่านอย่างเดียวเท่านั้น

ปัญหาของฉันได้รับการแก้ไขเป็นส่วนใหญ่ในขณะนี้ (เพราะอุปกรณ์ใหม่) แต่สำหรับโครงการในอนาคตฉันกำลังมองหาระบบไฟล์รูทของ NFS มีบทเรียนมากมายเกี่ยวกับเรื่องนี้อยู่แล้วการแก้ไขรอบ ๆ รูปภาพ Pi fs ส่วนใหญ่ แต่มันค่อนข้างง่ายที่จะทำการ deboot ที่น้อยที่สุดและเปลี่ยนเป็นระบบไฟล์รูทแบบอ่านอย่างเดียวผ่าน NFS จับคู่สิ่งนี้กับ uboot สำหรับ Pi และสคริปต์ uboot อย่างชาญฉลาดและการ์ด SD ของคุณจะมีเฟิร์มแวร์ RPi เพียงไม่กี่เมกะไบต์, ภาพ uboot และสคริปต์ uboot


0

ฉันเคยได้ยินสิ่งที่ดีเกี่ยวกับPuppy Linuxสำหรับเรื่องนี้ แม้ว่าฉันต้องยอมรับว่าฉันไม่ได้ลอง

สามารถตั้งค่าให้ไม่เขียนกลับไปยังการ์ด SD


-1

มีสี่ภาพจากหน้าดาวน์โหลดของ raspberrypi.org :

  • Debian "เสียงดัง"
  • Soft-float Debian "เสียงฮืด ๆ "
  • Arch Linux ARM
  • QtonPi

และนี่คือค่าเริ่มต้นเดียวที่อ่านได้โดยค่าเริ่มต้นเท่านั้น (แต่สามารถเปลี่ยนแปลงได้หากจำเป็น):

หวังว่าสิ่งเหล่านี้จะตอบสนองความต้องการของคุณ


สิ่งเหล่านี้ไม่เป็นแบบอ่านอย่างเดียวโดยค่าเริ่มต้น
Alex Chamberlain

@alex จุดดี
Yedric

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