首页 > 技术知识 > 正文

1. 前言

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

2.统计内核耗时模块

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

全志平台lichee启动时间优化

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

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运行时钟

dram_clk = 792 dram_type = 3 dram_zq = 0x3b3bfb dram_odt_en = 0x1 dram_para1 = 0x10E410E4 dram_para2 = 0x0 dram_mr0 = 0x1c70 dram_mr1 = 0x40 dram_mr2 = 0x18 dram_mr3 = 0x2 dram_tpr0 = 0x0047194f dram_tpr1 = 0x01b1a94b dram_tpr2 = 0x00061043 dram_tpr3 = 0xB4787896 dram_tpr4 = 0x0 dram_tpr5 = 0x0 dram_tpr6 = 0x0 dram_tpr7 = 0x1e08a1e0 dram_tpr8 = 0x0 dram_tpr9 = 0 dram_tpr10 = 0x0003 dram_tpr11 = 0x33330000 dram_tpr12 = 0x00007777 dram_tpr13 = 0x40929D0
<
7. 去除网络驱动模块

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

WLAN和BT在menuconfig取消之后还有,只有把Network support中的wrieless取消掉之后,就可以彻底取消掉了 8. SPI单线改双线

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

开启方法:

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

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

还需要修改dma读写字节数

另外,可以通过修改spi-sunxi.c中sunxi_spi_config_dma_rx函数中 dma_conf.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; dma_conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; dma_conf.src_maxburst = 1; dma_conf.dst_maxburst = 1; (默认) 例如改为: dma_conf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; dma_conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; dma_conf.src_maxburst = 1; dma_conf.dst_maxburst = 1; 或者 dma_conf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; dma_conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; dma_conf.src_maxburst = 2; dma_conf.dst_maxburst = 2;

猜你喜欢