是否有可以在Raspberry Pi上轻松运行“嵌入式样式”的Linux发行版?[关闭]


9

我需要一个Linux发行版,它将给我以下内容:

  • 在Raspberry Pi上运行
  • 可以可靠地承受掉电(例如通过只读文件系统)

我已经能够找到有关如何将常规Linux发行版更改为只读模式的一些文档。我希望已经有一个发行版可以在嵌入式环境中运行。

我不需要很多软件包或驱动程序,只需要让Pi与USB /以太网一起工作即可。我不需要任何GUI界面或任何东西,这将只运行用C内置的自定义服务。

有人知道合适的发行版吗?


鉴于这是针对嵌入式应用程序的,您可能需要注意两件事。首先,如果您决定采用Linux,请考虑使用实时内核以确保您的系统可以足够迅速地做出响应。其次,您可能还希望将看门狗定时器设置为在任何软件循环/错误的情况下采取措施。
2013年

退房raspberrypi.stackexchange.com,但我认为这个问题也不在这里,因为它是购物类型的问题
Kevin Panko 2013年

Answers:


3

大多数嵌入式系统使用定制的内核。其中一个工具是Buildroot,它是构建GNU gcc工具链的一组脚本,代替(巨​​大的)GNU libc的uClibc库,Linux内核,BusyBox以及嵌入式板根文件系统的其他实用程序/软件包。RaspberryPi是一个相对较新的开发板,因此仍在Buildroot中对其进行支持,但显然有一个项目另一个项目个人的工作。随着RP制造的增加和分销的改善,可能还会有更多。

使用Buildroot,您可以完全按照问题中的描述构建Linux内核和根文件系统。根据您的Internet连接速度和开发PC的功能,您可能会在1到4个小时以上获得二进制文件。不利的一面是,未测试生成的二进制文件,也不保证它们成功启动和执行。必须使用系统控制台来调试引导顺序。请参阅我的答案,如何在没有监视器的情况下如何通过以太网/ wifi访问我的小型PC(RaspberryPi / MK802 / Mele A1000 / VIAPC)? 但是考虑到RaspberryPi的设计是坚不可摧的,因此不利之处不应该阻止构建自定义内核和RFS。

关于“生存掉电”:正确选择文件系统通常可以减轻这种担忧。从经验来看,MTD设备层加上日志文件系统(例如jffs2)已经非常强大。对于几乎绝对的保护,有一些initramfs使用ramfs(而不是固定大小的ramdisk),而没有切换到R / W文件系统。

附录

上Buildroot里面的功能A 30滑动的介绍是这里
在结束(#27)有几个相似和备用工具来构建的嵌入式系统提。


2

TinyCoreLinux默认为只读(持久性为可选):http : //www.tinycorelinux.net/ports.html


我提供的链接上没有显示“ Arm V6 Raspberry Pi”标题吗?
2013年

我似乎错过了。已投票;)
Journeyman Geek

1

拥有可访问控制台的Seagate Dockstar之后,我在其上安装了Debian squeeze。作为使它在只读根目录上运行的起点,我使用了Jeff Doozan撰写的出色文章1。基本策略包括创建一个脚本,该脚本在每次引导时将必要的可写目录挂载为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

将以上行另存为在目标rootfs上名为/ sbin / init-ro的脚本,并使其可执行。

chmod 755 /sbin/init-ro

为了在启动时使用此脚本,您必须稍微准备一下系统rootfs(全部引自Jeff的脚本2(适应$ROOT于已安装的rootfs的实际位置))。

# 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之后,您可以在/ etc / fstab中以只读方式挂载rootfs(将ext2替换为您正在使用的文件系统,或者仅使用rootfs)。

/dev/root  /                 ext2  noatime,ro   0 1

最后,为了在实际的/ sbin / init之前运行脚本,必须将以下内容附加到内核参数中(即,在Raspi上的/boot/cmdline.txt中)。(以下只是rootrootdelay参数的示例。必须附加到cmdline.txt中的行的重要部分是。)init=/sbin/init-ro

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

但是请注意,对于需要对rootfs进行写访问的任何软件,您都必须安装适当的tmpfs位置或写入外部存储。


1

我的2美分,为Pi提供可靠的电池备份要比使用只读OS容易得多(最终更好)。当然,这意味着您将需要一些非常基础的电子知识(我的意思是BASIC;我们正在谈论3-4个组件)。这个家伙只用了几个就花了很多钱:https//raspberrypi.stackexchange.com/questions/1360/how-do-i-build-a-ups-like-battery-backup-system

如果执行此操作,请勿使用LiPo。NiCad是您想要的。LiPo无法持续充电。您已被警告。

另外,根据我的经验,您似乎很担心这是一个非常小的问题。我一直在打我的Linux机器,当我不被打扰时,突然的计划外关机是理所当然的事情。如果禁用日志,那么您甚至很少会抱怨这样做。

要禁用所有日志,您可以将以下行添加为/etc/rsyslog.conf中的第一条规则:

*.* ~

即使出现问题,在下一次扫描磁盘时,也有99.9999%的时间(在我的个人经验中,我的意思是每次都表示)会解决该问题。发生这种情况的时间主要取决于天气,操作系统会注意到您所做的事情(奇怪的是,它通常不会这么做)。由于Pi使用SD卡,因此我想这在Pi上发生的次数要比在PC上发生的次数少。


1

如果我没有记错的话,只读文件系统将不会“保护” SD卡。我有一个客户正在运行10个Pi(当前正常运行时间超过80天,其中有一半),其电源并没有您期望/想要的稳定。花了我一段时间才能找到电源(实际上,Pi的运行时间超过几天,而额定电流为3A的廉价充电器和额定电流为2.3A的“昂贵” iPad充电器),在此之前我遇到了各种SD损坏问题,包括仅用于只读IIRC的一个。

我的问题现在大部分已经解决了(因为有了新的耗材),但是对于将来的项目,我正在研究使用NFS根文件系统。已经有很多关于此的教程,主要围绕正常的Pi fs映像进行解决,但是进行最小的debootstrap并将其更​​改为基于NFS的只读根文件系统相当容易。将其与用于Pi的uboot和智能uboot脚本配对,您的SD卡将仅包含价值几兆的RPi固件,uboot映像和uboot脚本。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.