Fastboot使用参考
1. 概述¶
fastboot主要原理是把点屏相关的必要模块和用户app放到ramdisk提前启动,实现快速亮屏的功能。
-
优点
可以实现快速亮屏
-
缺点
制作ramdisk需要占用额外内存,app size越大,制作的ramdisk就越大,吃的内存越多。所以在确定使用fastboot前,先要评估内存是否够用。
Note:用户app如果很大,不建议使用fastboot。
2. 公版fastboot内存统计¶
以zk_mini_fastboot为例统计公版fastboot内存使用情况。
-
ramdisk占用内存
ramdisk生成的size为6.49M。
对应占用的内存:0x67ffff = 6.66M。
Linux可用内存 = MemTotal - Ramdisk Memory
注:DDR SIZE = MMA SIZE + MemTotal + kernel txt + MMAP IP
3. 打开fastboot配置¶
目前公版Takoyaki nand和nor flash全部共用一套app来demo,app路径如下:
sdk\verify\application\zk_mini_fastboot
公版默认release的config已经把这个app打包到image:
project\release\customer_tailor\nvr_i2m_display_fastboot_glibc_tailor.mk
fastboot的编译config只有kernel和project需要单独配置,boot跟正常启动的config一样。
3.1. Nand flash¶
project:
configs/nvr/i2m/8.2.1/spinand.ram-glibc-squashfs.011a.128 //ssd202 configs/nvr/i2m/8.2.1/spinand.ram-glibc-squashfs.011a.64 //ssd201
kernel:
infinity2m_spinand_ssc011a_s01a_minigui_fastboot_defconfig
3.2. Nor flash¶
project:
configs/nvr/i2m/8.2.1/nor.glibc-ramfs.011a.64 //ssd201 configs/nvr/i2m/8.2.1/nor.glibc-ramfs.011a.128 //ssd202
kernel:
infinity2m_ssc011a_s01a_fastboot_defconfig
Note:编译完kernel,需要先把kernel对应的lib release到project下面,再编译project。
release步骤如下:
进入到project/kbuild/4.9.84 目录
nand flash
./release.sh -k ${RELEASEDIR}/kernel -b 011A-fastboot -p nvr -f spinand -c i2m -l glibc -v 8.2.1
nor flash
./release.sh -k ${RELEASEDIR}/kernel -b 011A-fastboot -p nvr -f nor -c i2m -l glibc -v 8.2.1
4. fastboot主要实现流程¶
fastboot实现的方式主要体现在project\image\configs\i2m\rootfs_fastboot.mk的makefile,它把开机的行为全部放到/etc/profile下面,流程如下:
-
将开机必须用到的模块放到/etc/init.sh
-
在init.sh启动app,sdk\verify\application\zk_mini_fastboot\image.mk
注:app启动显示第一张画面必须的res放在rootfs的customer_app中,其他的放在customer下,这样做可以减少rootfs的大小,加快启动速度。
-
app起来后,再去mount非必要的分区和挂载
5. fastboot客制化需要注意的地方¶
用户在导入fastboot时,主要需要考虑以下几个地方:
-
用户的app大小跟公版不同
app的大小对fastboot至关重要。app越大,制作出来的ramdisk越大,rootfs的分区越大,使用的内存也越大,同时解压ramdisk花的时间也就越长。如果用户的app很大,fastboot并不能发挥优势。
目前app放在rootfs下,如果用户的app大小跟公版不同,可以通过修改如下分区文件来更改rootfs分区的大小:
nand:
project\image\configs\i2m\spinand.ramfs-squashfs.p2.partition.config
nor:
project\image\configs\i2m\nor.ramfs.partition.config
注意:分区总大小不能超过flash的总大小,所以rootfs增大后,需要相应减少其他分区;同时分区大小必须64kb对齐。
-
用户的app内存使用跟公版不同
DDR的内存主要由mma和linux memory组成: DDR SIZE ~= MMA SIZE + linux MemTotal
用户可以根据mma实际使用情况,增大或减少mma大小来调整内存,实际mma的使用可以在最大使用场景通过如下命令dump:
-
用户的app行为跟公版不同
fastboot跟正常启动最大的区别在于fastboot非必要的模块是延迟启动的,所以画面刚出来不能马上使用usb或者wifi等没有启动的模块,需要在app的ui做等待处理。
6. fastboot打开bootlogo¶
开bootlogo必须要运行uboot,具体改动如下:
-
setenv ota_upgrade_status 1 ,通过ota_upgrade_status控制是否运行uboot;
-
setenv autoestart 0,关闭uboot网络功能,加快开机时间;
-
boot\drivers\mstar\spinand\inc\config\infinity2m\drvSPINAND_uboot.h中打开quadmode read,提升load img速度 #define SUPPORT_SPINAND_QUAD (1)
7. 公版测试带开机logo的开机时间¶
启动阶段 | 耗时(ms) |
---|---|
IPL~UBOOT IPL gbf78c2e - runUBOOT() | 65 |
UBOOT~KERNEL runUBOOT() - Starting kernel | 1168 |
KERNEL~KO INSMOD FINISH Starting kernel - mknod: /dev/mi_poll: File exists | 2061 |
INSMOD FINISH - APP START DONE | 667 mknod: /dev/mi_poll: File exists - FB_AllocHWSurface 1303 |
Total: | 3961 |
测试环境: | |
flash型号:MX35LF1GE4AB128M | |
软件版本:TAKOYAKI_DLS00V008 | |
测试条件: 1.打开开机logo: setenv ota_upgrade_status 1 2.uboot打开quadmode: #define SUPPORT_SPINAND_QUAD (1) 3.关闭uart eth:setenv autoestart 0 |