MTK分区之(四)MTK preloader阶段分区相关

本文详细解析了MTK preloader阶段的分区相关调用流程,包括内存初始化、分区初始化、读取分区信息等功能。重点介绍了g_dram_buf、part_init()、read_gpt()等关键函数的作用。此外,还探讨了DA下载烧录阶段分区的特别说明,强调了DA.bin对分区校验的重要性,并提供了问题解决方案。
摘要由CSDN通过智能技术生成

(一)相关调用流程

我们忽略和分区不相干的代码,研究一下preloader阶段分区相关的代码

platform/mt6765/src/core/main.c
    main()
        ...
        bldr_pre_process()
            ...
            platform_init();    //Murphy.liu note:
平台初始化
                mt_mem_init(); //Murphy.liu note:内存Dram初始化
                init_dram_buffer();    //Murphy.liu note:这里你可以理解为保留内存,把内存的一块空间专门拿出来用来存一些数据
                    ...
                    /*Murphy.liu note:
这里CFG_DRAM_ADDR宏是dram的起始地址,platform_memory_size()函数用来获取dram的总大小
                    */
                    if ((u64)CFG_DRAM_ADDR + platform_memory_size() > (u64)DRAM_4GB_SIZE)  // Murphy.liu note:
如果Dram大小大于4GB
                           
g_dram_buf = DRAM_4GB_SIZE - (5*1024*1024);        //Murphy.liu note:这里把“Dram起始地址+4G”位置用来存g_dram_buf
                    else
                        //Murphy.liu note:
如果Dram大小小于等于4GB
                        //Murphy.liu note:
这里把“Dram末尾地址-5M”位置用来存g_dram_buf
                        g_dram_buf = CFG_DRAM_ADDR + platform_memory_size() - (5*1024*1024); // Max DRAM size - 5MB
                    ...
                boot_device_init();    //Murphy.liu note:
启动设备初始化,对于我们来说就是EMMC
                    return (u32)mmc_init_device();
   
                ...
           
part_init();    //Murphy.liu note:来了,分区初始化(下面有重点去说明这个函数)
                /*Murphy.liu note:这个read_gpt用来从pgpt中读取出所需分区的信息*/
               
read_gpt()           //Murphy.liu note:下面有重点去说明这个函数
            ...
            part_dump();    //Murphy.liu note:
这里会打印出分区表信息
            ...
            uart_handshake_init();    //Murphy.liu note:
初始化用于下载的VCOM
        /*Murphy.liu note:
            *  
对于我们来说,这个bldr_handshake最重要的作用就是
            *       去调用usb_handshake函数去和flash tool USB握手,若成功就load DA进入了download模式了
        *    DA.bin的作用就是和flashtool通信,用scatter.txt来烧录
            */
            bldr_handshake(&handler);
        ...
        /*Murphy.liu note:
            *  
这里要关心一下了,这里涉及AB分区的概念了
            *   简单来说,每一个img都有两个区:AB区,AB去都存同样的img,比如laf.img
            *  
这里就是对lk两个区的img文件进行检查,那个区的img文件没问题就用那个
            */
            ab_ota_boot_check();
        ...
        /*Murphy.liu note:
            *  
下面这个bldr_load_images函数加载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Preloader分区是安卓系统中的一个分区,用于存储系统启动所需的预加载器文件。它位于底层存储设备的特定位置,负责引导系统的初始化过程。 Preloader分区的主要作用有以下几个方面: 1. 引导系统:Preloader分区中存储着引导加载程序,它是系统启动的重要组成部分。当我们打开安卓设备时,引导加载程序从Preloader分区中读取必要的文件和设置,然后开始加载操作系统。 2. 系统初始化:Preloader分区中还包含了系统的初始化程序和相关的配置文件。这些程序和文件用于初始化设备的硬件和软件环境,确保系统的正常运行。 3. 提供系统修复:如果设备发生了一些严重的故障,比如刷机失败或损坏系统文件,Preloader分区可以提供一种快速修复的方法。通过使用恢复模式或者刷入预加载器文件,可以修复设备的软件问题,恢复系统的正常运行。 需要注意的是,修改Preloader分区需要谨慎操作。错误的操作可能导致设备无法正常启动或者变得不稳定。因此,在修改Preloader分区之前,最好备份重要数据,并且确保所使用的预加载器文件是正确的,以防出现意外情况。 总结来说,Preloader分区是安卓设备中的一个重要分区,存储着引导加载程序和系统初始化所需的文件和设置。它在系统启动过程中发挥着重要的作用,并提供了一种修复设备的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值