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下面,流程如下:

  1. 将开机必须用到的模块放到/etc/init.sh

  2. 在init.sh启动app,sdk\verify\application\zk_mini_fastboot\image.mk

    注:app启动显示第一张画面必须的res放在rootfs的customer_app中,其他的放在customer下,这样做可以减少rootfs的大小,加快启动速度。

  3. app起来后,再去mount非必要的分区和挂载


5. fastboot客制化需要注意的地方

用户在导入fastboot时,主要需要考虑以下几个地方:

  1. 用户的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对齐。

  2. 用户的app内存使用跟公版不同

    DDR的内存主要由mma和linux memory组成: DDR SIZE ~= MMA SIZE + linux MemTotal

    用户可以根据mma实际使用情况,增大或减少mma大小来调整内存,实际mma的使用可以在最大使用场景通过如下命令dump:

  3. 用户的app行为跟公版不同

    fastboot跟正常启动最大的区别在于fastboot非必要的模块是延迟启动的,所以画面刚出来不能马上使用usb或者wifi等没有启动的模块,需要在app的ui做等待处理。


开bootlogo必须要运行uboot,具体改动如下:

  1. setenv ota_upgrade_status 1 ,通过ota_upgrade_status控制是否运行uboot;

  2. setenv autoestart 0,关闭uboot网络功能,加快开机时间;

  3. boot\drivers\mstar\spinand\inc\config\infinity2m\drvSPINAND_uboot.h中打开quadmode read,提升load img速度 #define SUPPORT_SPINAND_QUAD (1)


启动阶段 耗时(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