以下技术在盈鹏飞嵌入式的A40I/T3核心板(CoM-X40I)和主控板(SBC-X40I)上经过验证,欢迎 交流! CoM-X40I核心板和SBC-X40I主板见下图)
前言
这篇主要是一些其它的优化方法总结,
以及上篇未写完的....;
(1)开机启动优化除了上篇写的针对一些大模块的优化,还有很多可以尝试的地方,根据自身的需求、时间、产品等有不同程度的优化,这里写的很多方法比较零散、杂乱,有一些我并未试验过,感兴趣的可以都试试
(2)启动优化自我感觉没有终点,只有极致or更极致
常规优化方法总结
1.提高ddr时钟
虽然提高ddr时钟会降低系统稳定性,不过可以实验看看是否有一些提升;
这个ddr时钟参数需要相关模块人员提供。
-
[
dram_para]
-
dram_clk =
648
-
dram_type =
7
-
dram_zq =
0x3b3bfb
-
dram_odt_en =
0x31
-
dram_para1 =
0x10e410e4
-
dram_para2 =
0x1000
-
dram_mr0 =
0x1840
-
dram_mr1 =
0x40
-
dram_mr2 =
0x18
-
dram_mr3 =
0x2
-
dram_tpr0 =
0x0048A192
-
dram_tpr1 =
0x01b1a94b
-
dram_tpr2 =
0x00061043
-
dram_tpr3 =
0xB47D7D96
-
dram_tpr4 =
0x0000
-
dram_tpr5 =
0x198
-
dram_tpr6 =
0x21000000
-
dram_tpr7 =
0x2406C1E0
-
dram_tpr8 =
0x0
-
dram_tpr9 =
480
-
dram_tpr10 =
0x0008
-
dram_tpr11 =
0x44450000
-
dram_tpr12 =
0x9777
-
dram_tpr13 =
0x4090950
2. 降低打印等级
开发过程中往往会把系统的打印等级设置为最高,而实际上发布出的固件是不需要这么
的打印等级的,可以修改
lichee\tools\pack\chips\sun8iw11p1\configs\default\env_nor.cf文件中的loglevel减少打印等级到4. (时间明显减少)
3.优化I2C读写操作
由于camera、LCD等涉及到大量I2C操作,所以可以从这里入手
(1)提高I2C时钟,最高是400Kbps
修改方法:
-
sun8iw11p1_ext.dtsi中twi1即i2c1(可以这样认为),就可以修改对应时钟频率
-
-
twi1: twi@
0x01c2b000{
-
#address-cells = <1>;
-
#size-cells = <0>;
-
compatible =
"allwinner,sun8i-twi";
-
device_type =
"twi1";
-
reg = <
0x0
0x01c2b000
0x0
0x400>;
-
interrupts = <GIC_SPI
8 IRQ_TYPE_LEVEL_HIGH>;
-
clocks = <&clk_twi1>;
-
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启动
删除镜像验证
尝试不压缩镜像
验证内核读到正确的内存位置