如何缩短Raspberry Pi的启动时间?


27

我正在创建一个不会永久打开的可嵌入式远程应用程序。我一直在研究不同的操作系统发行版,并且可以通过使用具有更快读取速度的更好的SD卡来减少启动时间。我并没有固定在任何特定的发行版上,因此我可以尽可能减少使用最小的Linux发行版的必要性。

(我试图寻找人们为了提高启动时间而运行的基准,但是我没有发现任何有力的数据。)

我还可以使用构建根目录(另请参见YouTube视频Raspberry Pi-超快速启动时间-棉花糖娱乐系统)...


您应该投票结束这个问题。然后,用户将被重定向到原始问题并添加更多答案。由于尚未被标记为已回答。
Piotr Kula 2014年

我只是在想这个人有很多活动(观点不那么高,只是因为这个人还不到一天,所以),更多的选票和更多的答案,所以我认为最好离开这个人向上,然后将答案移到此处。我认为这真的是为了方便。1个用户将答案移开了,而3个用户将答案移开了,从而失去了所有投票,对话等权利。有什么理由我们应该选择一种或另一种方式?我不介意,我只是想回答的其他人可能不想动,因此我们失去了
满足感

@ppumkin查看此关于dupes关闭的Meta.SE帖子:不要删除重复的内容此SE博客帖子。我认为他们同意我的先前观点。除非复制品是另一复制品的复制粘贴或糟糕的质量,并且由于此复制品具有大量的答案/活动,否则我们应该将两者都保持打开状态。
RPiAwesomeness

1
@ppumkin好点,只要这一点没有被删除即可。我最初查看了“休假开放”,但我想将此标记为重复是正确的方法。我唯一能想到的是,我至少要对标有标记的原件比对副本具有更高质量的Q / A。这里绝对不是这种情况。
RPiAwesomeness

1
是的,你是对的。这里还有更多答案。似乎得到了更多的关注。我想我们需要让主持人决定,因为他们会更好地了解在这里做什么。无论如何。在为您的答案分配投票时做得很好:)我确信OP感谢您的贡献。+1
Piotr Kula 2014年

Answers:


13

如果将Arch Linux与Fred建议的功能结合在一起,则应该获得一个通常快速启动的OS。

减慢操作系统启动时间的是

  1. 慢的读/写(I / O)速度。

    因此,使用更快的SD卡有所帮助,Class 10卡要比Class 4卡快得多。我误解了SD卡类的工作原理,在评论中已经很清楚地指出了这一点,这很不好。实际上,对于大文件传输(例如HD视频和诸如此类),Class 10卡将比Class 4卡更快。显然,对于较小的文件,第4类的性能也一样。再次,我不好,但是,嘿,我们都一次又一次地学习。

  2. 陷入困境的初始化序列。

    如果您有很多在引导阶段启动的软件,则引导时间将变慢。更多的软件启动==更长的启动时间。

    因此,如果需要快速启动,请从初始化序列中尽可能减少软件。您可以创建一个简单的脚本(或者我确定那里有一个脚本),该脚本将在主引导序列完成启动软件从而使负载分散更多。

基本上就是这样。正如我之前所说的,结合Linux的功能可能是要采用Arch Linux。Arch是一个非常小的操作系统,对于初学者来说可能不是最好的选择,但是如果您有Linux的经验,那就去做吧。它只需要一点设置,因为它具有最低的安装要求,仅此而已

希望您的项目进展顺利!


3
SD卡“等级”是嵌入式系统性能的非常差的指标。“类别”等级适用于大型连续文件传输(例如使用数百万像素的数码相机),而不适用于小型文件(例如启动脚本)。在4k读写操作中,Class 4卡通常要比大多数Class 10卡好100倍以上。有具有良好IOPS的Class 10卡,但这些型号很少而且相差甚远。
Ben Voigt 2014年

是的,我同意@BenVoigt-当我使用第4类时,似乎小的写入和更新速度很快,但在第10类中进行较大的传输要好得多。我希望我可以使用由电池供电的RAM卡来获得即时性能。
Piotr Kula 2014年

对不起,我不知道。我将立即解决。我知道,班级越高,速度就越高。感谢您指出这一点,我才学到了一些:D也感谢您的支持:)
RPiAwesomeness 2014年

我想知道为什么我的答案被否决了。我并不完全介意失去代表,我只想知道应否决票,因此我可以改善答案。
RPiAwesomeness

7

我建议使用Arch Linux。

我得到的正常启动时间是5s(内核)+ 5s(到用户空间),并且不需要太多的工作,因为它systemd用于init。


2
@goldilocks,您也可以在raspbian上使用systemd。它为我节省了一半的启动时间。
John La Rooy 2014年

@JohnLaRooy很高兴知道。我以为与传统init相比,性能上的差异主要是因为systemd可以并行化,但是由于不必为所有内容分叉和解释shell脚本,因此还可以节省时间。
goldilocks

@goldilocks我不同意,我尝试过,与systemd相比,有很大的不同sysvinit。看我的回答
巴吉2015年

@Basj甚至更好地知道。我已经删除了有关它的评论,因为“由于它在单个内核上,因此在启动时间方面可能不会有很大的不同”。我主要使用systemd,但是TBH我不太注意启动时间。
goldilocks

7

在这里写了一篇关于它的文章。

简而言之:使用systemd

您可以在插上电源线后不到8秒或Linux启动启动后不到3秒的时间内轻松运行RaspberryPi应用。

这里的一个例子,我的服务称为samplerbox.service

在此处输入图片说明

注意:我没有尝试优化用户空间时间,因为我不需要它:反正我的应用程序启动得很早,所以我不介意启动应用程序后网络DHCP / IP归因是否需要8秒钟。


4

最佳解决方案可能是构建一个发行版,该发行版仅能完全满足您希望在启动时执行的发行版,这样可以保证您有最少的时间(使用sinit等简约的初始化系统)。或者,您可以考虑使用Linux内核的“挂起磁盘(休眠)”功能。一旦启动,随后的暂停和恢复操作很快,并且与此同时系统完全关闭。


3

使用静态链接的内核而不是modprobing驱动程序也可以大大提高性能。通过仔细配置和重新编译内核,还可以进行其他优化。


1
很抱歉碰到一个古老的答案。但是您能否提供更多有关“使用静态链接的内核”的信息?
凯撒


除此之外,要编译静态链接的内核,您只需要通过“ make menuconfig”或“ make xconfig”并将所需的驱动程序包含在内核中,而不是将它们选择为模块即可。这样做会将它们烹煮到vmlinuz中,并允许您在启动时跳过modprobe序列,这会花费大量时间来检测和加载所需的内核模块。
醉酒代码猴子

谢谢您的回答。为了使它有用,您是否可以包括一些可重复的步骤以使其起作用?(类似1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...
Basj

并非如此,重新编译内核并不是一个5个步骤的简单过程。网上有很多方法指南,向您展示如何配置和编译Linux内核...
Drunken Code Monkey,

1

使用TinyCoreLinux。它是为快速加载和承受电源故障而设计的。


谢谢您的回答。您能否包括一些可重复的步骤以使其正常工作?(类似1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!
Basj

0

您可以尝试使用eINIT来加快启动过程::http : //sourceforge.net/projects/einit/

不幸的是,目前(2016年10月),eINIT主页指出:

eINIT曾经是Linux和FreeBSD的/ sbin / init程序的替代实现。好吧,我想它仍然存在,但是该项目已经搁置了多年。


我们正在尝试针对此处无信息的仅链接答案的新政策。如果该帖子未经过编辑以包含可以作为答案的信息,但是很少,它将在48小时内转换为Community Wiki,以简化由社区更正的信息。
加纳玛

-3

删除所有不使用的内核模块。


4
该站点上的答案应包括执行建议的操作所需的步骤(如何确定加载了哪些模块,需要哪些模块以及如何将其删除),以及更多信息的参考和链接。
史蒂夫·罗比拉德
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.