全志linux平台开机启动时间优化(2)常规优化方法总结

本文总结了多种嵌入式系统开机启动的优化方法,包括提高DDR时钟、降低打印等级、优化I²C操作、设置启动延时、硬编码LPJ、省去驱动检测、使用最小BusyBox文件系统、优化开机动画、修改printk函数、init.rc优化、禁用未用外设、删除编译器-g操作、使用静态IP、内存限制、避免ramdisk、禁用内核调试特性等,旨在提升系统启动速度和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  以下技术在盈鹏飞嵌入式的A40I/T3核心板(CoM-X40I)和主控板(SBC-X40I)上经过验证,欢迎 交流! CoM-X40I核心板和SBC-X40I主板见下图)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前言

这篇主要是一些其它的优化方法总结,

以及上篇未写完的....;

(1)开机启动优化除了上篇写的针对一些大模块的优化,还有很多可以尝试的地方,根据自身的需求、时间、产品等有不同程度的优化,这里写的很多方法比较零散、杂乱,有一些我并未试验过,感兴趣的可以都试试

(2)启动优化自我感觉没有终点,只有极致or更极致

常规优化方法总结

1.提高ddr时钟

虽然提高ddr时钟会降低系统稳定性,不过可以实验看看是否有一些提升;

这个ddr时钟参数需要相关模块人员提供。


   
   
  1. [ dram_para]
  2. dram_clk = 648
  3. dram_type = 7
  4. dram_zq = 0x3b3bfb
  5. dram_odt_en = 0x31
  6. dram_para1 = 0x10e410e4
  7. dram_para2 = 0x1000
  8. dram_mr0 = 0x1840
  9. dram_mr1 = 0x40
  10. dram_mr2 = 0x18
  11. dram_mr3 = 0x2
  12. dram_tpr0 = 0x0048A192
  13. dram_tpr1 = 0x01b1a94b
  14. dram_tpr2 = 0x00061043
  15. dram_tpr3 = 0xB47D7D96
  16. dram_tpr4 = 0x0000
  17. dram_tpr5 = 0x198
  18. dram_tpr6 = 0x21000000
  19. dram_tpr7 = 0x2406C1E0
  20. dram_tpr8 = 0x0
  21. dram_tpr9 = 480
  22. dram_tpr10 = 0x0008
  23. dram_tpr11 = 0x44450000
  24. dram_tpr12 = 0x9777
  25. dram_tpr13 = 0x4090950

2. 降低打印等级

开发过程中往往会把系统的打印等级设置为最高,而实际上发布出的固件是不需要这么

的打印等级的,可以修改

lichee\tools\pack\chips\sun8iw11p1\configs\default\env_nor.cf文件中的loglevel减少打印等级到4.  (时间明显减少)

3.优化I2C读写操作

由于camera、LCD等涉及到大量I2C操作,所以可以从这里入手

(1)提高I2C时钟,最高是400Kbps  

修改方法:


   
   
  1. sun8iw11p1_ext.dtsi中twi1即i2c1(可以这样认为),就可以修改对应时钟频率
  2. twi1: twi@ 0x01c2b000{
  3. #address-cells = <1>;
  4. #size-cells = <0>;
  5. compatible = "allwinner,sun8i-twi";
  6. device_type = "twi1";
  7. reg = < 0x0 0x01c2b000 0x0 0x400>;
  8. interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
  9. clocks = <&clk_twi1>;
  10. clock-frequency = < 400000>;

(2)register连续操作

  耗时的i2c操作,能否替换单个i2c寄存器读写为多个i2c寄存器读写,当然这需要硬件支持

4.设置启动延时时间
    uboot #setenv bootdelay 0

5.hard code lpj

在uboot启动参数增加 lpj=3997696. 其中的3997696替换为你的机器启动信息获取的值,这个一般能节省200ms

6.省去驱动检测步骤以及不必要的延时

(1)很多驱动模块里面会有很多设备检测操作,可以将其去掉可以节省很多时间

(2)除修改驱动中不必要的sleep 和delay

7.使用最小busybox文件系统
  减少forking in shell
  构建静态以减少文件系统不使用的代码。小心这些静态链接也能引起你的系统大小的显著增加
 

8. 优化开机动画

  上一篇是直接将开机logo直接去掉了,但是实际中是必须有的,所以可以按照以下优化:

(1)减小logo分辨率大小

(2)优化logo图片格式,数据量越小越好

9. 修改printk函数

尽量去掉printk对时间测量的影响,可以调整kernel/printk.c中的DEFAULT_CONSOLE_LOGLEVEL宏,把级别较低的信息去掉

 改成5之后,没什么明显减少时间

10.init.rc优化

去掉不需要的service;在init.rc里面以及其他平台init.platXX.rc里面把不需要的service,都屏蔽掉不加载

11.禁用未用外设

  例如 USB/MMC/Ethernet/UART

12 .删除编译器-g操作

13.尽可能的使用静态IP
   如果你不需要网络那么完全禁止它
   如果你需要网络性能,但是不是NFS那么在内核启动参数行里确定设置 ip=off


14.通过”mem=“操作设置内存限制
   尽可能的使用更多的需要的内存以避免内存初始化时间

15.避免使用ramdisk或者initramfs

16.禁用内核调试特性
    内核调试
    调试文件系统
    追踪

17.其他主意
     禁止UART启动
     删除镜像验证
     尝试不压缩镜像
     验证内核读到正确的内存位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值