你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

优化嵌入式Linux初始化脚本和系统启动

[复制链接]
gaosmile 发布时间:2020-3-25 12:09
1.优化初始化脚本和系统启动
有多种方法可以减少启动应用程序之前执行启动脚本中花费的时间:
  • 仅在启动必要的依赖项之后,尽快启动应用程序。
  • 简化shell脚本
  • 可以尝试执行启动脚本之前启动应用程序

1.1.bootchart
如果想更详细地了解用户区的引导顺序,则可以使用使用grabserial中的bootchart来实现,例如:
微信图片_20200325120453.png
那么如何配置并使用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
微信图片_20200325120456.png
1.3. init 进程
在所有依赖项启动之后,应尽快启动:
  • 取决于您的init进程。在这里,我们假设使用sysV init脚本。
  • init脚本按字母数字顺序运行,并以字母开头(K表示停止(杀死),S表示开始)。
  • 将应用程序启动脚本使用最小的号码。
  • 甚至可以用应用程序替换init!如果可以成为第一个启动的应用程序,启动速度无疑大大加快!
  • 直接通过一个启动脚本启动所有服务(例如/etc/init.d/rcS)。这消除了对/ bin / sh的多次调用。
  • 甚至可以直接在应用程序的C代码中挂载文件系统:如

微信图片_20200325120500.png

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

    又例如:
    微信图片_20200325120503.png
    应做如下修改更佳:
    微信图片_20200325120506.png
    仅此一项优化就可以在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,可以只使用我们的静态编译二进制文件:
    http://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

收藏 评论0 发布时间:2020-3-25 12:09

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版