Có bản phân phối Linux nào có thể dễ dàng chạy kiểu nhúng nhúng trên Raspberry Pi không? [đóng cửa]


9

Tôi cần một bản phân phối Linux sẽ cung cấp cho tôi như sau:

  • Chạy trên Raspberry Pi
  • Có thể sống sót đáng tin cậy khi mất điện (như thông qua hệ thống tệp chỉ đọc)

Tôi đã có thể tìm kiếm một số tài liệu về cách thay đổi bản phân phối Linux thông thường sang chế độ chỉ đọc. Tôi đã hy vọng rằng sẽ có một bản phân phối đã được xây dựng được thiết kế để chạy trong môi trường nhúng.

Tôi không cần nhiều gói hoặc trình điều khiển, chỉ đủ để Pi hoạt động với USB / Ethernet. Tôi không cần bất kỳ giao diện GUI hay bất cứ thứ gì, điều này sẽ chỉ chạy một dịch vụ tùy chỉnh được tích hợp trong C.

Có ai biết một distro sẽ phù hợp?


Cho rằng đây là cho một ứng dụng nhúng, hai điều nhanh chóng bạn có thể muốn lưu ý. Đầu tiên, nếu bạn quyết định đi theo con đường Linux, hãy xem xét sử dụng hạt nhân thời gian thực để đảm bảo hệ thống của bạn có thể đáp ứng đủ nhanh. Thứ hai, bạn cũng có thể muốn thiết lập bộ đếm thời gian theo dõi để thực hiện hành động trong trường hợp có bất kỳ vòng lặp / lỗi phần mềm nào.
Đột phá

Kiểm tra raspberrypi.stackexchange.com nhưng tôi nghĩ câu hỏi này không có chủ đề vì đây là câu hỏi về loại hình mua sắm,
Kevin Panko

Câu trả lời:


3

Hầu hết các hệ thống nhúng sử dụng một kernel được xây dựng tùy chỉnh. Một công cụ để tạo điều kiện đó là Buildroot , một tập lệnh để xây dựng chuỗi công cụ GNU gcc, thư viện uClibc thay cho GNU libc (rất lớn), nhân Linux, BusyBox và các gói / tiện ích khác cho hệ thống tệp gốc của bảng nhúng. RaspberryPi là một hội đồng tương đối mới, vì vậy sự hỗ trợ của nó trong Buildroot vẫn đang được phát triển, nhưng rõ ràng có một dự án , một dự án kháccông việc của một cá nhân . Có lẽ sẽ có nhiều hơn khi sản xuất RP tăng lên và phân phối được cải thiện.

Sử dụng Buildroot, bạn có thể xây dựng nhân Linux và hệ thống tập tin gốc chính xác như bạn đã mô tả trong câu hỏi của mình. Tùy thuộc vào tốc độ kết nối Internet và khả năng của PC phát triển của bạn, bạn có thể có các tệp nhị phân trong 1 đến 4+ giờ. Nhược điểm là các nhị phân kết quả không được kiểm tra cũng như không được đảm bảo để khởi động và thực hiện thành công. Một bảng điều khiển hệ thống là bắt buộc để gỡ lỗi trình tự khởi động. Xem câu trả lời của tôi để biết Làm cách nào tôi có thể truy cập máy tính mini (RaspberryPi / MK802 / Mele A1000 / VIA APC) qua ethernet / wifi mà không cần có Màn hình? Nhưng do RaspberryPi được thiết kế để không thể truy cập được , nhược điểm này không nên cản trở việc xây dựng kernel và RFS tùy chỉnh của bạn.

Về "mất điện tồn tại": Lựa chọn đúng hệ thống tập tin thường có thể làm giảm bớt mối quan tâm này. Lớp thiết bị MTD cộng với hệ thống tệp nhật ký (ví dụ jffs2) đã cho thấy khá mạnh mẽ từ kinh nghiệm. Để bảo vệ gần như tuyệt đối, có các initramfs sử dụng ramfs(không phải ramdisk có kích thước cố định) mà không chuyển sang hệ thống tập tin R / W.

Phụ lục

Phần giới thiệu 30 trang về các tính năng của Buildroot ở đây
Ở cuối (# 27) có đề cập đến một vài công cụ tương tự và thay thế để xây dựng các hệ thống nhúng.



1

Có được Seagate Dockstar với quyền truy cập bảng điều khiển, tôi đã cài đặt Debian ép lên nó. Là một điểm khởi đầu để làm cho nó chạy trên root chỉ đọc, tôi đã sử dụng bài viết tuyệt vời 1 này của Jeff Doozan. Chiến lược cơ bản liên quan đến việc tạo một tập lệnh, trên mỗi lần khởi động, gắn kết các thư mục có thể ghi cần thiết dưới dạng một tmpfs. Tôi trích dẫn kịch bản của Jeff 2 ở đây (kudos cho 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

Lưu các dòng ở trên dưới dạng tập lệnh có tên / sbin / init-ro trên rootfs đích của bạn và làm cho nó có thể thực thi được.

chmod 755 /sbin/init-ro

Để sử dụng tập lệnh này trong thời gian khởi động, bạn phải chuẩn bị rootfs hệ thống một chút (tất cả được trích dẫn từ tập lệnh 2 của Jeff (thích ứng $ROOTvới vị trí thực tế của rootfs được gắn kết của bạn).

# 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/*

Sau khi đã chuẩn bị rootfs như trên, bạn có thể gắn rootfs chỉ đọc trong / etc / fstab (thay thế ext2 bằng hệ thống tập tin bạn đang sử dụng hoặc chỉ sử dụng rootfs thay thế).

/dev/root  /                 ext2  noatime,ro   0 1

Cuối cùng, bạn phải nối các phần sau vào tham số kernel của mình (ví dụ: trong /boot/cmdline.txt trên Raspi) để chạy tập lệnh trước thực tế / sbin / init . (sau đây chỉ là một ví dụ về các tham số rootrootdelay . phần quan trọng phải được thêm vào dòng trong cmdline.txtinit=/sbin/init-ro.)

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

Nhưng hãy lưu ý rằng đối với bất kỳ phần mềm nào yêu cầu truy cập ghi trên rootfs, bạn phải gắn các vị trí tmpfs thích hợp hoặc ghi vào bộ nhớ ngoài.


1

2 xu của tôi, cuối cùng dễ dàng hơn (và đẹp hơn) để tạo một bản sao lưu pin đáng tin cậy cho một Pi so với việc sử dụng hệ điều hành chỉ đọc. Tất nhiên, điều đó có nghĩa là bạn sẽ cần một số kiến ​​thức cơ bản về điện tử (và ý tôi là BASIC; chúng ta đang nói 3-4 thành phần). Anh chàng này đã tạo ra một thứ lạ mắt chỉ với một vài chi tiết nữa: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system

Nếu bạn làm điều này, KHÔNG sử dụng LiPo; NiCad là những gì bạn muốn. LiPo không thể mất phí liên tục; Mày đã được cảnh báo.

Ngoài ra, bạn dường như rất lo lắng về điều gì đó, theo kinh nghiệm của tôi, là một vấn đề rất nhỏ. Tôi đập hộp Linux của mình mọi lúc và tắt máy đột ngột là một vấn đề tất nhiên khi tôi không thể bị làm phiền. Nếu bạn vô hiệu hóa nhật ký thì bạn sẽ hiếm khi nhận được bất kỳ khiếu nại nào về việc đó.

Để vô hiệu hóa tất cả các nhật ký, bạn có thể thêm dòng sau đây làm quy tắc đầu tiên trong /etc/rsyslog.conf:

*.* ~

Ngay cả khi có vấn đề, 99.9999% thời gian (ý tôi là gần như mọi lúc theo kinh nghiệm cá nhân của tôi) vấn đề đó được xử lý khi đĩa được quét tiếp theo. Khi điều đó xảy ra chủ yếu phụ thuộc vào thời tiết, hệ điều hành nhận thấy những gì bạn đã làm (thật kỳ lạ là nó thường không). Vì một Pi sử dụng thẻ SD, tôi tưởng tượng rằng điều này xảy ra thậm chí ít hơn trên Pi so với trên PC của tôi.


1

Nếu tôi nhớ chính xác, hệ thống tệp chỉ đọc sẽ không 'bảo mật' thẻ SD. Tôi có 10 Pi đang hoạt động tại một khách hàng (thời gian hoạt động hiện tại hơn 80 ngày cho một nửa trong số họ) khi nguồn điện không ổn định như bạn mong muốn / mong muốn. Mất một thời gian để tìm nguồn cung cấp năng lượng (bộ sạc giá rẻ được xếp hạng ở mức 3 và bộ sạc iPad 'đắt tiền' được đánh giá ở mức 2,3A) thực sự có thể khiến Pi chạy được hơn một vài ngày, trước đó tôi đã gặp phải tất cả các vấn đề về tham nhũng SD , bao gồm với một IIRC chỉ được sử dụng chỉ đọc.

Vấn đề của tôi chủ yếu được giải quyết ngay bây giờ (vì các nguồn cung cấp mới), nhưng đối với các dự án trong tương lai tôi đang xem xét thực hiện một hệ thống tập tin gốc NFS. Đã có rất nhiều hướng dẫn về vấn đề này, chủ yếu là giải quyết xung quanh các hình ảnh Pi fs bình thường, nhưng khá dễ dàng để thực hiện một debootstrap tối thiểu và thay đổi nó thành một hệ thống tập tin gốc chỉ đọc qua NFS. Ghép nối điều này với uboot cho Pi và tập lệnh uboot thông minh, và thẻ SD của bạn sẽ chỉ chứa một phần mềm RPi trị giá vài megs, hình ảnh uboot và tập lệnh uboot.


0

Tôi đã nghe những điều tốt về Puppy Linux cho việc này. Mặc dù tôi phải thừa nhận rằng tôi đã không thử nó.

Nó có thể được đặt để không ghi lại vào thẻ SD.


-1

Có bốn hình ảnh có sẵn từ trang tải xuống của raspberrypi.org :

  • Debian "khò khè"
  • Debian mềm mại "khò khè"
  • Arch Linux ARM
  • QtonPi

Và đây là cái duy nhất chỉ được đọc theo mặc định (nhưng có thể thay đổi nếu cần):

Hy vọng, một trong số này sẽ đáp ứng nhu cầu của bạn.


Không ai trong số này là chỉ đọc theo mặc định.
Alex Chamberlain

@alex, Điểm tốt.
Yedric

TinyCoreLinux được thêm vào danh sách. Nó chỉ được đọc theo mặc định.
avra 8/12/13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.