Uboot引导系统启动优化

嵌入式设备做为小型服务器或终端在项目应用中往往会有开机时间的要求。按照good->better->best原则,开发者一般都会用尽浑身解数将优化做到能力的上限。笔者此处也仅是将自己的一些思路和经验作为总结进行记录,有需求的小伙伴可以参考,也希望可以抛砖引玉获得更多的相关知识。

1、启动优化
一般性的嵌入式设备都是使用uboot、kernel、根文件系统作为最小系统装机必备。提起启动优化,比较容易想到的是对内核配置项的裁剪。对uboot和根文件系统的优化往往会被忽略。此处仍然先将内核优化作为第一描述对象,其次是uboot最后是根文件系统。
1.1、内核
内核config文件决定了设备启动中初始化哪些模块(子系统、总线、外设),对config配置文件的裁剪也是启动优化中最容易操作和实现的。

  1. 依据项目外设需要,将用不到的总线、文件系统类型以及外设模块在config中裁剪掉;
  2. 通过bootargs传参initcall_debug=1 ignore_loglevel=1,找出启动流程中耗时较长模块,尽可能的将耗时较长模块由编译进内核转为外部modules,在业务实际需要时加载,避免开机自加载;
    对内核config的裁剪主要是通过减少加载项提升启动时间,另一方面缩小了镜像大小也节省了部分内存。
    3)就启动时间而言,未压缩的内核是否是一个胜利取决于您可以从后台内存读取的速度和处理器的速度(因为更快的 CPU 将需要更少的时间来解压缩)。 因此,对于快速处理器和慢背景内存,压缩可能是一种胜利,而对于慢速处理器和快速背景内存,压缩可能是一种损失。

1.2、uboot
Uboot是设备上电执行的第一个引导程序,其将内核以及根文件系统镜像从flash中读出加载至对应内存并启动之。
1) 内核打印在设备上默认都是关闭的,而uboot启动/引导阶段的打印默认是开启的。相似的可以将uboot下的串口打印关闭功能disable掉,可提升一部分启动时间;
2) 设备flash控制器read的效率问题,在不同的时钟频率、总线位数或控制器下,read操作的速率也不尽相同,条件允许的情况下可以将flash的read能力提升,从侧面提升一部分启动时间。
3) 裁剪掉一些非必要程序执行流;

1.3、根文件系统
根文件系统往往一般都带有一定的压缩格式。Linux系统针对根文件系统支持如下类型压缩和解压缩格式:gzip、bzip2、lzma、xz、lzo和lz4;除了上述格式根文件系统还可以无压缩格式。
lz4是最佳解压缩方案,bzip2,lzma和xz的解压缩速度很慢,而在压缩大小方面,gzip效果最好,能将文件压缩至最小,其次是lzo(大约比gzip大16%)和LZ4(大约比gzip大25%),而在压缩时间方面,lz4比GZIP快7倍,lzo比gzip快约1.25倍,因此可以看到gzip的速度不够快。lz4也被用在Ubuntu 19.10(Eoan Ermine)操作系统启动优化中。
压缩一般是为了节省空间(flash、DDR)采用的一种手段;若是空间允许根文件系统rootfs不进行任何压缩的启动方案应该是最快的。
设备节点的创建和维护工具,udevd在加载时为阻塞式,耗时约为500ms;在小型嵌入式系统中热插拔不多的情况下,使用busybox自带的mdev更为合适,可将udev的耗时节省下来。
笔者想实测下lz4在嵌入式设备中的效果,奈何服务器上存在的lz4工具压缩的文件与内核compressed_formats中magic不匹配。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值