全志平台lichee启动时间优化

本文针对全志平台SDK系统启动慢的问题,提出了一套优化方案。包括统计内核耗时模块、降低打印等级、改善VIN相机模块、修改boot_clk、去除网络驱动模块、SPI单线改双线等措施,以缩短启动时间和提升性能。通过这些方法,可以显著减少系统初始化时间,提高用户体验。

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

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

1. 前言

全志平台默认的SDK系统启动+相机出图的时间较长,普遍是十几秒,使用体验较差; 这里尝试通过一些方法优化整体启动时间

2.统计内核耗时模块

打开这个宏initial_debug,每个驱动的初始化起始时间和结束时间都打印出来了。有了这个时间,基本就可以确定哪些部分需要优化了。 我的做法是只关注耗时10000us以上的驱动。

根据上面统计,可根据使用场景的需求, 尝试可以关闭相应不需要的模块

3. 降低打印等级

开发过程中往往会把系统的打印等级设置为最高,而实际上发布出的固件是不需要这么的打印等级的,可以修改 lichee\tools\pack\chips\sun8iw11p1\configs\default\env_nor.cf文件中的loglevel减少打印等级到4. (时间明显减少)

4. 修改printk

尽量去掉printk对时间测量的影响,可以调整kernel/printk.c中的DEFAULT_CONSOLE_LOGLEVEL宏,把级别较低的信息去掉改成5之后, 【没什么明显减少时间】

5. 改善VIN相机模块

vin摄像头时间占用最多,编译成模块, 放在应用程序中加载可以加快初始化时间

6. 修改boot_clk

dram_clk这里可以尝试提升CPU运行时钟

  1. dram_clk = 792
  2. dram_type = 3
  3. dram_zq = 0x3b3bfb
  4. dram_odt_en = 0x1
  5. dram_para1 = 0x10E410E4
  6. dram_para2 = 0x0
  7. dram_mr0 = 0x1c70
  8. dram_mr1 = 0x40
  9. dram_mr2 = 0x18
  10. dram_mr3 = 0x2
  11. dram_tpr0 = 0x0047194f
  12. dram_tpr1 = 0x01b1a94b
  13. dram_tpr2 = 0x00061043
  14. dram_tpr3 = 0xB4787896
  15. dram_tpr4 = 0x0
  16. dram_tpr5 = 0x0
  17. dram_tpr6 = 0x0
  18. dram_tpr7 = 0x1e08a1e0
  19. dram_tpr8 = 0x0
  20. dram_tpr9 = 0
  21. dram_tpr10 = 0x0003
  22. dram_tpr11 = 0x33330000
  23. dram_tpr12 = 0x00007777
  24. dram_tpr13 = 0x40929D0

7. 去除网络驱动模块

由于使用场景未使用网络模块; 和BT,WLAN,相关的模块都可以去除

WLAN和BT在menuconfig取消之后还有,只有把Network support中的wrieless取消掉之后,就可以彻底取消掉了

8. SPI单线改双线

由于系统启动阶段,会通过SPI协议从flash中将内核拷贝到ddr; 这里也会占用一部分时间,统计大概是1s左右; 默认SPI协议是使用单线模式; 可以尝试将SPI协议修改成双线模式

开启方法:

  1. .make ARCH=arm menuconfig
  2. -->Device Drivers
  3. -->Memory Technology Device (MTD) support
  4. -->Self-contained MTD device drivers
  5. -->[*] Use Dual Mode Read OPCode

另外还需要找原厂提供修改patch

还需要修改dma读写字节数

  1. 另外,可以通过修改spi-sunxi.c中sunxi_spi_config_dma_rx函数中
  2. dma_conf.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
  3. dma_conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
  4. dma_conf.src_maxburst = 1;
  5. dma_conf.dst_maxburst = 1; (默认)
  6. 例如改为:
  7. dma_conf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
  8. dma_conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
  9. dma_conf.src_maxburst = 1;
  10. dma_conf.dst_maxburst = 1;
  11. 或者 dma_conf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
  12. dma_conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
  13. dma_conf.src_maxburst = 2;
  14. dma_conf.dst_maxburst = 2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值