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

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

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

评论

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

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

@ppumkin查阅有关关闭重复对象的此Meta.SE帖子:不要删除良好的重复项和此SE博客帖子。我认为他们同意我的先前观点。除非重复项是另一项的复制粘贴或质量很差,并且由于该重复项具有大量答案/活动,否则我们应该将它们都保持打开状态。

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

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

#1 楼

如果将Arch Linux与Fred建议的功能结合使用,则应该获得一个通常快速启动的操作系统。

降低操作系统启动时间的是



读/写(I / O)速度慢。

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


陷入困境的初始化序列。

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

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


基本上。正如我之前所说的,结合Linux的功能可能是要使用Arch Linux。 Arch是一个非常小的操作系统,对于初学者来说可能不是最好的选择,但是如果您有Linux的经验,那就去做吧。只需进行一点设置,因为它几乎没有安装即可。

希望您的项目进展顺利!

评论


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

– Ben Voigt
2014年3月26日15:24



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

– Piotr Kula
2014年3月26日在16:07

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

–RPiAwesomeness
2014年3月26日在18:12

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

–RPiAwesomeness
2014年3月29日在18:59

#2 楼

我建议使用Arch Linux。

我的正常启动时间为5s(内核)+ 5s(到用户空间),并且不需要太多的工作,因为它使用systemd进行初始化。

评论


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

– John La Rooy
2014年4月2日在13:43

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

–金锁♦
2014年4月2日14:55



@goldilocks我不同意,我尝试过,与sysvinit相比,systemd有很大的不同。看我的答案。

–巴吉
2015年5月30日12:53



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

–金锁♦
2015年5月30日13:08



#3 楼

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

简而言之:使用systemd

可以在插入电源线后不到8秒或Linux引导后不到3秒的时间内轻松运行RaspberryPi应用程序已启动。

此处的示例为我的服务,称为samplerbox.service



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

#4 楼

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

#5 楼

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

评论


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

–凯撒
16 Jun 19'在2:32



在这里看看:raspberrypi.org/documentation/linux/kernel/building.md。

–醉酒的代码猴子
16年6月19日在3:59

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

–醉酒的代码猴子
16年6月19日在5:05

谢谢您的回答。为了使它有用,您是否可以包括一些可重复的步骤以使其起作用? (类似1)在命令行中执行此操作; 2)在此执行此操作; 3)在config.txt中进行修改; 4)启动,这将花费3.2秒! 5)这是我的基准测试结果:...)

–巴吉
18年7月31日17:00



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

–醉酒的代码猴子
18年7月31日在17:35

#6 楼

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

评论


谢谢您的回答。您能否包括一些可重复的步骤以使其正常工作? (类似1)在此处下载图像:+链接2)在microSD上将其刷新3)在config.txt中对此进行修改4)启动,这将需要3.2秒!)

–巴吉
18年7月31日在16:59



#7 楼

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

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


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


评论


我们正在尝试有关此处仅链接的无信息答案的新政策。如果该帖子未经过编辑以包含可以作为答案的信息(尽管很少),则将在48小时内将其转换为Community Wiki,以简化由社区进行纠正的过程。

–加纳马♦
16-10-18在9:00

#8 楼

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

评论


该站点上的答案应包括执行建议的操作所需的步骤(如何确定加载了哪些模块,需要哪些模块以及如何将其删除),以及更多信息的参考和链接。

–史蒂夫·罗比拉德
2014年4月2日23:40