首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

高通 MSM8K bootloader 之二: SBL1

  • 24-03-05 06:41
  • 3232
  • 11397
blog.csdn.net

续:高通 MSM8K bootloader 之一: SBL1

上篇将我重点关注SBL1的内容1和2基本说明完,本篇继续内容3和4。
1、    CDT : Platform ID和DDR参数 
2、 debug log :
3、 download : msm8K 新平台软件download支持两种协议,sahara和firehose
4、 ramdump :死机异常信息dump

四、SW download

1、软件升级模式

  高通8K以后平台支持如下两种,说到下载模式,忍不住又得骂高通。 
  以前6K, 7K平台不支持紧急下载模式,工厂生产软件要down到手机里,非常复杂。
  要嘛先用烧录器烧一段sbl image,然后剩下的image自己开发升级软件用usb多路升级。
  要嘛全部image用烧录器一次性烧完。
  坑人的高通啊!么得办法,就害苦咱苦命的民工。 好了,介绍一下现在支持的两种下载模式吧! 
  紧急下载模式:pbl负责与PC交互,实现软件下载
  自动进入紧急下载模式:主板刚生产emmc是裸片时,或者sbl运行异常时,系统自动进入紧急下载模式。
            这种情况就不多说了,主要是用于工厂生产,及sbl异常处理。

  手动进入紧急下载模式:通过硬件一个gpio下拉,pbl检测到该gpio后强制进入紧急下载模式。这种主要
             以防不测情况。
   另外一种就是软件通过设置magic number,然后由热重启,pbl检测到magic number后,强制进入下载模式。

  软件切换接口,参考如下boot_dload.c代码:
  1. /*=============================================================================
  2. ** Function : boot_dload_transition_pbl_forced_dload
  3. ** ==========================================================================
  4. */
  5. /*!
  6. *
  7. * @brief
  8. * This function sets the magic numbers for PBL to detect and enter forced
  9. * download mode. It then calls the target specific function to trigger a
  10. * system reset.
  11. *
  12. * @par Dependencies
  13. * None
  14. *
  15. * @retval
  16. * None
  17. *
  18. * @par Side Effects
  19. * Set's PBL magic numbers to enter forced download, resets target, never to
  20. * return.
  21. *
  22. */
  23. void boot_dload_transition_pbl_forced_dload( void )
  24. {
  25. /* PBL uses the last four bits of BOOT_MISC_DETECT to trigger forced download.
  26. Preserve the other bits of the register. */
  27. uint32 register_value =
  28. HWIO_TCSR_BOOT_MISC_DETECT_INM(HWIO_TCSR_BOOT_MISC_DETECT_RMSK);
  29. /* Clear the PBL masked area and then apply HS_USB value */
  30. register_value &= ~(FORCE_DLOAD_MASK);
  31. register_value |= FORCE_DLOAD_HS_USB_MAGIC_NUM;
  32. /* Write the new value back out to the register */
  33. HWIO_TCSR_BOOT_MISC_DETECT_OUTM(FORCE_DLOAD_MASK,
  34. register_value);
  35. boot_hw_reset(BOOT_WARM_RESET_TYPE);
  36. } /* boot_dload_transition_pbl_forced_dload() */
 普通下载模式:sbl负责与PC交互,实现软件下载
 手机第一次下载完软件以后,普通情况下,可不进入pbl紧急下载模式,可由sbl进行软件升级。
 sbl是如何进入普通下载模式的呢?看如下函数boot_dload_check()。
 boot_dload_check()检测到USB D+ 接地、或者sbl发生异常时调用boot_dload_set_cookie()设置了cookie,进自  动进入普通的下载模式。
  1. "code" class="cpp">
  2. /*===========================================================================
  3. ** Function : boot_dload_check
  4. ** ==========================================================================
  5. */
  6. /*!
  7. *
  8. * @brief
  9. * This function will check to see if the downloader should be entered
  10. * for QPST download, and enter the downloader if directed to.
  11. *
  12. * @param[in] bl_shared_data Pointer to the shared data
  13. *
  14. * @par Dependencies
  15. * Download ID must be present in IRAM if downloader is to be entered.
  16. *
  17. * @retval
  18. * None
  19. *
  20. * @par Side Effects
  21. * Boot may be halted and QPST downloader entered.
  22. *
  23. */
  24. void boot_dload_check
  25. (
  26. bl_shared_data_type *bl_shared_data
  27. )
  28. {
  29. /* Check whether USB D+ line is grounded. If it is, then enter
  30. PBL Download mode */
  31. "color:#cc0000;"> if(boot_qhsusb_al_check_for_pbl_dload(0))
  32. {
  33. boot_dload_transition_pbl_forced_dload();
  34. }
  35. /* Determine if the downloader should be entered at this time,
  36. instead of continuing with the normal boot process. */
  37. if ( boot_dload_entry( ) == TRUE )
  38. {
  39. /* Check the UEFI ram dump cookie, we enter download mode
  40. only if UEFI ram dump cookie is NOT set*/
  41. if ( !( boot_shared_imem_cookie_ptr != NULL &&
  42. boot_shared_imem_cookie_ptr->uefi_ram_dump_magic ==
  43. UEFI_CRASH_DUMP_MAGIC_NUM ) )
  44. {
  45. /* Before entering downloader clear RESET_DEBUG[BLOCK_RESIN] so
  46. the next resin_n is not blocked. This is part of the abnormal
  47. reset logic in Bear family */
  48. HWIO_GCC_RESET_DEBUG_OUTM(HWIO_GCC_RESET_DEBUG_BLOCK_RESIN_BMSK,
  49. 0);
  50. /* Enter downloader for QPST */
  51. sbl_dload_entry();
  52. }
  53. }
  54. } /* boot_dload_check() */
 
  1. /*===========================================================================
  2. ** Function : boot_dload_set_cookie
  3. ** ==========================================================================
  4. */
  5. /*!
  6. *
  7. * @brief
  8. * Set the SBL dload mode cookie
  9. **
  10. * @par Dependencies
  11. * None
  12. *
  13. */
  14. void boot_dload_set_cookie()
  15. {
  16. HWIO_TCSR_BOOT_MISC_DETECT_OUTM(SBL_DLOAD_MODE_BIT_MASK,
  17. SBL_DLOAD_MODE_BIT_MASK);
  18. }
再看看下面的代码!!! 我们又有新的发现!
sbl1_target.c
  1. "code" class="cpp">/*===========================================================================
  2. ** Function : sbl_dload_entry
  3. ** ==========================================================================
  4. */
  5. /*!
  6. *
  7. * @brief
  8. * This function pointer is defined in each SBL* Bootloader to handle SBL-specific
  9. * requirements to enter a download routine. It is initialized to
  10. * boot_dload_transition_pbl_forced_dload by default.
  11. *
  12. * @par Dependencies
  13. * None
  14. *
  15. * @retval
  16. * None
  17. *
  18. * @par Side Effects
  19. * None
  20. *
  21. */
  22. void (*sbl_dload_entry)(void) = boot_dload_transition_pbl_forced_dload;
函数指针sbl_dload_entry默认指向紧急下载模式的入口:boot_dload_transition_pbl_forced_dload ,
该下载方式会切换到pbl,由pbl通过firehose协议实现download。
 
  1. void sbl1_dload_entry ()
  2. {
  3. static uint32 dload_entry_count = 0;
  4. dload_entry_count++;
  5. /* Only execute the pre-dload procedures the first time we try to enter
  6. * dload in case there is an error within these procedures. */
  7. if( dload_entry_count == 1 && &bl_shared_data != NULL )
  8. {
  9. /* Entering dload routine for the first time */
  10. boot_do_procedures( &bl_shared_data, sbl1_pre_dload_procs );
  11. }
  12. pm_device_config_in_dloadmode();
  13. /* Enter boot Sahara */
  14. boot_dload_transition_enter_sahara();
  15. }/* sbl1_dload_entry() */
而sbl1定义了另一个下载模式的入口:sbl1_dload_entry,它支持直接在sbl1中通过sahara协议download,
还支持crash ram dump 功能。包括dump to raw partition ,and dump to sdcard 。
见:boot_do_procedures( &bl_shared_data, sbl1_pre_dload_procs ); 
crash ramdump章节再详细看看。

sbl1_mc.c

  1. "code" class="cpp">/*DLOAD flag for SBL1 to enter PBL error handler*/
  2. #ifdef BOOT_ENTER_PBL_DLOAD_ON_SBL_ERROR
  3. static boot_boolean edload_flag = TRUE;
  4. #else
  5. static boot_boolean edload_flag = FALSE;
  6. #endif
 
 
"code" class="cpp">void sbl1_post_ddr_init(bl_shared_data_type *bl_shared_data)
  • {
  • ..........
  • if (edload_flag != TRUE)
  • {
  • /* Update the dload entry to sbl1 sahara dload entry function */
  • sbl_dload_entry = sbl1_dload_entry;
  • }
  • }
  • 好,既然在sbl1有两个download入口,如何选则呢? 
    sbl1_mc.c 中通过宏BOOT_ENTER_PBL_DLOAD_ON_SBL_ERROR控制。
    如果定义该宏,则dload处理会转交给PBL帮忙处理了。

    2、进入升级模式的方法

      上节描述的高通默认进入下载模式的方法,都是自动的,显然无法满足开发、生产、售后等需求。
      因此如下两种方法,实用于开发、生产、售后。

       sbl1扫描按键组合:
      关机状态下,sbl1扫描按键组合,比如,扫描到power & vol+ 两个按键同时按下,则进入pbl紧急下模模式。

    0 写在前面

    掐指算算,掐头去尾还有半年就要结束我的研究生生活了。翻看自己整个博客,每一篇都记录了自己跌跌撞撞的轨迹。
    犹记得研一时,由于gap一年导致丧失学习能力,计算机视觉课程大作业发布后在宿舍楼走廊里气的痛哭,代码不会,文献看不懂,每天都在自怨自艾。研一下学年,在自己决定躺平的时候,被老师“拽”起来委以重任,靠着自己幼稚的倔强自尊一点一点爬到半山腰。到现在仍然无法确定自己是否是成功的,或者说有没有达到我理想中的成功。但是这么多年我只验证了两件事:一是只要我想做我一定可以做好。一是我能为我所有的决定买单。


    其实就是想直接总结成文字版的东西,省下每来一个学弟学妹就要重新在说一遍的时间(就是懒)。

    1 时间线

    以我自己为例我是2020年09月入学:

    • 202009-202101研一上学年:上课:最优化、数值分析、自然辩证法、工程伦理、毛中特、计算机视觉(灰度分割、X射线、三维点云)、科技论文写作、Matlab(最后大作业)
    • 202103-202107研一下学年:上课+竞赛:水下目标检测比赛、实践课
    • 202109-202201研二上学年:开题+科研:开题答辩很重要(第二年奖学金占比重)——8月-10月,11月结束开题开始找小论文创新点
    • 202203-202206研二下半年:小论文:撰写小论文中英文、投稿、录用
    • 202206-202208研二暑假:实习:实习点技能树。英语和行政等其他感兴趣技能。
    • 202209-202212研三上半年:中期+找工作:硕博连读在夏季,11月可申外校。工作:互联网提前批678,秋招金8银9;国企央企91011
    • 202301-202306研三下半年:毕业

    2 事例详解

    以时间线为例,顺着将每个阶段需要做的事详细解释:
    基础课:数学的最优化和数值分析其实目的都是求最优解,最重要的是矩阵迭代;计算机视觉是视觉课的基础(其实研究生选课思路就是事少分高就行了,因为涉及到奖学金评选,比重为50%以上)。
    分高要点:

    • 尽量别缺勤;
    • 大作业报告卷起来,页眉页脚封面;
    • pre等答辩要不卑不亢,条理清除;
    • 政治类的开卷字迹工整,内容充实;
    • 数学类的考试课需要做书后习题,历年卷纸,以及老师画的重点题型,不会也要写上去公式别空。

    竞赛:竞赛可以尝试一下和自己领域相关的,以我自己为例可以参加一下天池、kaggle、水下机器人目标检测赛之类的。学校对挑战杯和互联网+也比较重视,也可以了解相关竞赛。研究生其实不太重视比赛,比赛在科研类加分中也不会占很大的比重。
    开题报告:开题报告我个人觉得和基础课成绩一样重要(奖学金中比重大),但是重要性相较于基础课更大。
    开题意义:在研究生生涯第一年结束时,属于对之前一年(推免生更久)学习研究方向的一个提纲罗列。起到承上启下作用,对基础知识的一个总结,对接下来的任务做一个规划。
    小论文:科研成绩中小论文部分永远占比最高,以我们学校量化分数为例(SCI Q1高达80分)。小论文可有可无,有则更好。
    小论文意义:是科研思路的一个佐证,能证明在开题中化的饼是有意义的。也能有效检验你对自己研究领域的一个小小推动。
    物化一点的意义是,如果在毕业中有一篇SCI是可以免盲审的,申博也相对容易一些。
    实习:实习是针对性的实习,要带有一定的目的,否则就是浪费青春打白工。互联网实习一般研二下的4月,5月左右开始申请,按自己需求岗位去申请。比如网易有道测试岗,蔚来理想无人驾驶岗。以我个人为例,我实习的目的就是:混口饭吃(真)、学习英语和点技术行政交叉职能,当然就是还有活别太多(平衡好学校任务和公司事务),于是我申请了本地合资大厂子(真厂子)——BBA
    至于后面的阶段我正在经历以及还没经历,未来会考虑出一个手册2,埋个坑在这。

    3 “新手村任务”

    “新手村”任务时开题之前重要的一步,与研一上课同时进行。分为以下步骤:

    • 阅读文献:查找文献、阅读文献、总结文献。
      阅读文献意义:是了解当下你所要研究的方向的一个进展,查阅他人的方法是否能为自己所用,以及从他人的方法中是否产生对自己研究方向的一些见解。
      查找文献和阅读文献的具体方法已在文献阅读方法中罗列。
      科研界有句俗语嘛——“日度文献300篇,不会科研也会编”,足以看出文献的重要意义。阅读文献需要循序渐进,可将方向相关文献查找10篇近五年SCI高区高IF文献,前3篇一周一篇,将每句话用人话翻译。中间三篇一天一篇,最后三篇就可以做到知道如何截取自己需要的内容了。总计耗时1个月。
      中文文献主要分为硕博论文和期刊论文,检索途径是中国知网(天临N年,知网无人不知)。中文文献可以更快一些入门。
    • 总结文献:
      1.Xmind——思维导图:可总结综述(中文:国内外现状,英文:related work);还可按文章方向,内容,方法,实验,意义,效果做总结
      2.CSDN,有道云笔记,Onenote,知乎,github——在线总结:总结完的笔记可以联网,永远不会丢失。
      3.总结英文中比较专有性的名词,比如细粒度、比如全局捕获,这些句子可以用作积累
    • 实验复现:
      实验代码一部分来自于文章中的链接,一部分可以向通讯作者或者第一作者邮件争取,顶会可以从大的公众号查询到代码的库和pdf。传统baseline可以从GitHub上下载。以我的研究方向为例,关于实验需要使用到的工具是Ubuntu系统,因此可以学以下linux命令指令。服务器必要时可以配置一下服务器熟悉整个流程。IDE如果使用深度学习框架的话建议使用PyCharm,VSCODE也是必备的一个IDE。还需要一些插件脚本代码段。

    4 开题报告

    开题算是整个研究生阶段承前启后的一个“里程碑事件”吧,开题成绩占第二年奖学金评审的45%,比重非常大,而且由于答辩时分组,导致即便你是小组第一名成绩但放到整个学院会出现成绩仍然不高的情况,这就需要做好多重准备。
    开题组成成分:开题是由开题报告+开题PPT+开题答辩组成
    开题报告的撰写:

    • 优先借阅师兄师姐的开题报告
    • 满足学校基本要求格式,页眉页脚行间距
    • 参考文献+国内外综述里的引用:使用文献管理器Endnote、zotero,引用以上角标的格式存在
    • 注意错别字和的地得的使用
    • 相应部分的撰写方法已标注在开题报告注意事项中

    开题PPT的制作:
    以我个人开题PPT为例:
    在这里插入图片描述
    在这里插入图片描述

    • 时间限制:我们但是要求开题答辩限制为8分钟,我个人语速较快,因为准备的东西较为丰富,15-20页的ppt是最为合适的,可根据自己的语速,和内容进行增减调节。
    • 目录:选题背景(1page)——研究现状(3p,正常是1p,可根据自己的内容进行适当的增加或者减少)——研究内容(10p根据自己的内容进行适当的增加或者减少)——前期工作(2p)——预期成果(2p)

    选题背景

    P1 由于我是专业硕士,我会从工程背景而不是理论背景来分析问题——工程背景需要考虑实际应用,先由国家政策入手(智慧海洋:法条和文件佐证),在逐步细化,形成逆推过程。
    思考过程:我是研究目标检测的,那我为什么要研究目标检测,因为我想解决水下捕捞问题,人工成本太大了,那我就想使用水下机器人,水下机器人搭载视觉感知系统,而视觉感知系统是水下机器人重要的一环,多妙啊,一个逻辑闭环出现,即海洋强国——水下机器人——水下声光探测识别技术——基于深度学习的目标检测——水下小型生物检测。一个非常强有力的背景出现。

    研究现状

    P1-2 这块没啥好说的就是国内外现状/Related Work/Survey…这种综述类的东西,我个人认为ppt中比较直观的表现形式就是数轴图和树状图。最后使用一句话总结:你的方法和前任比好在哪,他们的不好在哪,即你的贡献是什么。
    P3 需要总结一下当前你所研究的领域有哪些难点与痛点最好以图片的形式展示,随后引出研究目的(1句话)

    研究内容

    P1 研究思路框架图:要区别于技术路线图,主要围绕待解决问题
    P2 研究内容:开题报告中研究内容简化版
    P3 技术路线图:主要是解决问题的概要方法
    P4-10 各部分研究内容相应的解决方法

    前期工作&预期成果&工作计划

    前期工作是老师比较看重的一点,可以说前期工作直接决定了开题成绩的高低

    • 有比赛列比赛,有项目列项目,有论文列论文(非常重要的前提是与自己研究内容相关,尽量找到与自己研究内容相关的那部分)
    • 实在什么都没有,可以将自己读过的论文以综述的形式列出来区别于之前的研究现状,近几年的顶会顶刊,一定要与自己的研究方向相关。
    • 预期成果就是“画大饼”的过程,记得不能画的太离谱
    • 工作计划最好以甘特图的形式出现,会比时间计划更为直观。

    5 实习

    关于实习一般放在研二下的暑假里,一般为期3个月。只是最近几年需要“长点心”看是不是打白工和浪费青春。由于这几年就业形势不太好,很多大厂实习生直接转正的机会比较少,这个时候就需要想清除——为什么实习。而不是为了实习去实习。

    以我个人为例(以下是我实习全过程的一个心路历程,不具有普适性):
    我是在2022年5月中旬这个时间点开始投递实习简历,正常大厂投递实习的时间应该更早些,有需要可关注各个厂的招聘信息。由于时间点的特殊(特殊在封校三个月迫切想相出校,以及小论文到了投稿阶段学校事宜暂告一段)只考虑了本地的一个厂子。考虑本地也是因为我只想留在本地企业,本地有三家我比较感兴趣的厂子:BBA,NEUsoft还有siasun。简单犹豫了一下最后还是选择了BBA。原因有三:

    • BBA是中德合资,有良好的英语环境
    • BBA有全城班车,我可以实现WLB
    • BBA饭好吃(是真的)

    当时是先自己找了公众号投递,但是HR推了一些不太合适的岗位,有拒掉我的也有被我拒掉的,后来找了内部人员帮忙海投,一下收到很多部门的邀请,纠结了一下考虑了自己另外的需求,比如组里有外国人,工作环境轻松,工作内容是我感兴趣但专业不对口的最后选择了BBT-M10这个部门,title是部门助理,主要职责是打杂,顺便交朋友。我只工作了2.3个月,收获有好有坏吧。
    优:

    • 泡在全英环境下,英语无论是口语还是听力都有很大提升。
    • 接触了除自己干了这么多年专业以外的事情,比如人际交往、供应链管理底层知识
    • 交到了一群朋友,一个大组的实习生总是很容易成为好朋友、饭搭子,她们觉得我的研究生身份很厉害,我觉得他们待人接物办事能力很厉害,每天都在取长补短。
    • 收获一张实习证明

    劣:

    • 就是传说中的“打白工”“浪费时间”,因为BBA转正名额很少几乎没有,即便转正后工资也非常少,BBA组织架构非常稳定,几乎没有上升空间,适合跳槽回来。
    • 组里有的同事比较喜欢KTV,CPU,这个应该很多公司都喜欢干这种事
    • 实习工资较低125/d,本硕同价。不同岗位工作量不同。作为一个有想法的硕士生,不建议来这“吃苦”。

    关于实习因人而异,还是要想好,自己有没有需求,以我个人两段车企实习经验来看,我以后应该不太会去车企行业了。

    6 小论文

    以下以我个人小论文准备为例:
    在这里插入图片描述
    文献积累和找创新点的思路都在这里了。

    软件

    • Latex——Overleaf
    • EndNote/Zotero
    • 亿图/Visio/Origin
    • Quillbot/DeepL/Grammarly

    小论文类型

    • Survey/Review
    • Article
    • Letters/Conference

    小论文结构

    • Title
    • Abstract+Key Words
    • Introduction
    • Related work
    • Methodology
    • Experiments
    • Conclution

    查阅小论文

    • CCF分类
    • CVPR/AAAI/ECCV当年会议
    • IEEE Xplore
    • Web of Science
    • 知网(EI)

    7 奖学金&竞赛&杂七杂八(仅供课题组信息学院师弟师妹参考)

    7.1 奖学金(2020版)

    比例:信息学院奖学金覆盖率是80%,其中一等奖学金是40%,二等40%。
    金额:一等奖学金是和学费抵消(学硕8000,专硕10000),二等奖学金是学费抵消一半。
    国家奖学金:硕士20000元,按名额分配。
    命名奖学金:有企业赞助的奖学金1000-10000不等,按名额分配。
    第一年(新生奖学金):按考研成绩分配,推免生直接一等奖学金。
    第二年(研一结束):加权换算。课业成绩53%,科研成绩(由论文,竞赛,专利及其他)34%,德育美育成绩13%。
    第三年(研二结束):加权换算。开题成绩45%,科研成绩42%,德育美育13%。
    以上一学年经验看,研一结束那年的国家奖学金是最好评的,只要成绩高,就可以。德育美育一般是班干加分比较多。第二年参加活动基本上不加分。

    7.2 竞赛

    研究生阶段不想本科阶段那样,会对比赛重视。需要转换一下思想,不过,仍然有很多竞赛是可以参加的。可以参照NEU星级竞赛评分表。

    • 全国水下机器人大赛(湛江赛&大连赛)-目标检测线上赛
    • 挑战杯、互联网+等创新创业类竞赛
    • 研究生数学建模竞赛
    • 蓝桥杯竞赛

    7.3 杂七杂八

    写提纲的时候想起来有一些杂七杂八要说,但是现在想着想着突然忘了,以后再补充一下吧。或者标黑或者更新在手册2中。

    注:本文转载自blog.csdn.net的Fybon的文章"https://blog.csdn.net/Fybon/article/details/37565227"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
    复制链接
    复制链接
    相关推荐
    发表评论
    登录后才能发表评论和回复 注册

    / 登录

    评论记录:

    未查询到任何数据!
    回复评论:

    分类栏目

    后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

    热门文章

    101
    推荐
    关于我们 隐私政策 免责声明 联系我们
    Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
    Scroll to Top