您的位置 首页 IOT

嵌入式Linux发动时刻优化的隐秘之四-发动脚本

嵌入式Linux启动时间优化的秘密之四-启动脚本-本文主要讲述嵌入式Linux启动时间优化的秘密,我们继续上篇没有讲完的嵌入式Linux启动时间优化方法,本文主要会讲启动脚本。想看上一篇的请查看本文结尾的链接。 启动脚本 1.优化初始化脚本和系统启动 有多种方法可以减少启动应用程序之前执行启动脚本中花费的时间: 仅在启动必要的依赖项之后,尽快启动应用程序。 简化shell脚本 可以尝试执行启动脚本之前启动应用程序 1.1.bootchart 如果想更详细地了解用户区的引导顺序,则可以使用使用grabser

  本文首要叙述嵌入式Linux发动时刻优化的隐秘,咱们持续上篇没有讲完的嵌入式Linux发动时刻优化办法,本文首要会讲发动脚本。想看上一篇的请检查本文结束的链接。

  发动脚本

  1.优化初始化脚本和体系发动

  有多种办法能够削减发动应用程序之前履行发动脚本中花费的时刻:

  仅在发动必要的依靠项之后,赶快发动应用程序。

  简化shell脚本

  能够测验履行发动脚本之前发动应用程序

  1.1.bootchart

  假如想更具体地了解用户区的引导次序,则能够运用运用grabserial中的bootchart来完结,例如:

 

  那么怎么装备并运用bootchart 呢?

  在busybox中装备运用bootchartd(CONFIG_BOOTCHARTD = y)

  经过指令行init = / sbin / bootchartd 引导您的开发板

  将/var/log/bootlog.tgz从方针仿制到开发主机

  生成时刻表:

  cd bootchart-《version》

  java -jar bootchart.jar bootlog.tgz

  bootchart 拜见 http://www.bootchart.org

  1.2. systemd

  假如将systemd用作初始化程序,则能够运用systemd-analyze。

  http://www.freedesktop.org/software/systemd/man/systemd-analyze.html

  1.3. init 进程

  在一切依靠项发动之后,应赶快发动:

  取决于您的init进程。在这里,咱们假定运用sysV init脚本。

  init脚本按字母数字次序运转,并以字母最初(K表明中止(杀死),S表明开端)。

  将应用程序发动脚本运用最小的号码。

  乃至能够用应用程序替换init!假如能够成为第一个发动的应用程序,发动速度无疑大大加速!

  直接经过一个发动脚本发动一切服务(例如/etc/init.d/rcS)。这消除了对/ bin / sh的屡次调用。

  乃至能够直接在应用程序的C代码中挂载文件体系:如

  1.4 削减fork的运用

  fork/exec体系调用开支很大。故从Shell调用可履行文件的速度很慢。

  即便BusyBox完结的shell中echo也会导致fork 体系调用!

  在BusyBox装备中挑选Shells-》 Standalone shell,以使Shell尽或许调用小程序。

  管道和反引号也由fork/exec完结。应削减它们在脚本中的运用。例:

  cat /proc/cpuinfo | grep model

  应修改为:

  grep model /proc/cpuinfo

  更具体,请参阅:

  http://elinux.org/Optimize_RC_Scripts

  又例如:

 

  仅此一项优化就能够在ARM AT91SAM9263体系(200MHz)上节约87毫秒!

  1.5 减小固件的尺度

  剥离可履行文件和库,删去仅用于开发和调试的ELF部分。strip指令由穿插编译东西链供给。默许状况下在Buildroot中完结的。

  superstrip超级剥离

  http://muppetlabs.com/~breadbox/software/elfkickers.html。

  运用strip能够剥离出Linux未用于发动可履行文件的更多位。Buildroot中止支撑它,由于它或许损坏可履行文件。 仅在保存一些字节至关重要时才测验。

  还能够测验https://packages.debian.org/sid/mklibs上供给的mklibs:

  mklibs发生精简的同享库,其间仅包括一组特定的可履行文件所需的例程。关于像OpenGL和QT这样的大型库的确很有用。它乃至能够在没有源代码的状况下作业。

  在Yocto中可用,但在Buildroot中不可用(2019.02状况)。

  约束:mklibs能够删去歪斜的库(由应用程序“手动”加载),由于它看不到它们。

  3.5.5 快速发动画面显现

  能够运用fbv显现发动画面,

  http://freshmeat.sourceforge.net/projects/fbv

  运用armel,能够只运用咱们的静态编译二进制文件:

  https://github.com/bootlin/staTIc-binaries/tree/master/fbv/

  但是在MicrochipAT91SAM9263体系上很慢为878毫秒!

  为了更快地履行此操作,能够转储帧缓冲区framebuffer中的内容:

  fbv -d 1/root/logo.bmp

  cp /dev/fb0/root/logo.fb

  lzop -9/root/logo.fb

  然后尽早在initramfs中将其仿制回:

  lzopcat/root/logo.fb.lzo 》 /dev/fb0

  修改连载引荐:嵌入式Linux发动时刻优化的隐秘之一东西链/应用程序优化

  修改连载引荐:嵌入式Linux发动时刻优化的隐秘之二文件体系

  修改连载引荐:嵌入式Linux发动时刻优化的隐秘之三-内核

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/86814.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部