• (FFOS Gecko & Gaia) OTA


      OTA整体框架里会涉及以下代码,从gaia到gecko都有,而且由于历史原因,复用了desktop browser的一些模块,还有一些冗余代码,分析时走了不少弯路。

    1. Gaia部分

      (a) gaia/apps/settings/js/panels/about/update_check.js

        这个Settings中OTA功能的入口,通过AMD(Asynchronous Module Definition)规范,定义了一个模块UpdateCheck。

      (b) gaia/apps/system/js/update_manager.js

        这是SystemApp导出的全局对象:window.UpdateManager,它是Gaia层与Gecko层通信的桥梁,通过mozContentEvent&mozChromeEvent进行通信。

      (c) gaia/apps/system/js/updatable.js

        这是一个辅助类,updatable.js的开头注释中很好的描述了它的的职责:它代表了一个system update(SystemUpdatable)或者一个application update(AppUpdatable,暂时不分析),XXXUpdatable与window.UpdateManager通信,处理download等相关动作。

    2. Gecko部分

      Gecko中的代码比较分散,大致在3个位置,分别是:gecko/b2g/components/,gecko/dom/system/和gecko/toolkit/mozapps/update/。

      (a) gecko/toolkit/mozapps/update/nsIUpdateService.idl

        这个idl文件十分重要,它定义了很多重要的interface。下面按照代码里的顺序,简单罗列一下所有的interfaces:

        (1) nsIUpdatePatch

          表示一个updatable patch,也就是update.xml中一个patch节点,包含type,URL等属性。

        (2) nsIUpdate

          表示一个update,也就是update.xml中的update节点,可能包含N(N>=1)个nsIUpdatePatch。

        (3) nsIUpdateCheckListener

          nsIUpdateChecker的回调,当check complete或者check error时回调。

        (4) nsIUpdateChecker

          不难理解,定义了update check相关接口,比如:

            void checkForUpdates(in nsIUpdateCheckListener listener, in boolean force);

        (5) nsIApplicationUpdateService

          一个global application service,包含check,download等操作

        (6) nsIUpdateProcessor

          处理下载完成的update package,好像没有文件实现这个interface,但是在nsUpdateService.js有调用这个interface,费解。

        (7) nsIUpdateManager

          维护所有update的状态,包括当前active update的状态

        (8) nsIUpdatePrompt

          由名字可以知道,这是与user notification相关的interface。

          值得注意的是,有2个文件都实现了这个interface,分别是gecko/b2g/components/UpdatePrompt.js和gecko/toolkit/mozapps/update/nsUpdateService.js,但是前者才是b2g中使用的,后者是属于desktop browser的。

      (b) gecko/toolkit/mozapps/update/nsUpdateService.js

        这个文件是对nsIUpdateService.idl的实现,大概有5000行,比较庞大,但是里面有很多desktop browser相关的代码,分析时可以忽略。下面罗列一下它包含的对象('--->'表示实现了):

        (1) UpdatePatch ---> nsIUpdatePatch

        (2) Update ---> nsIUpdate

        (3) UpdateService ---> nsIApplicationUpdateService

        (4) UpdateManager ---> nsIUpdateManager

        (5) Checker ---> nsIUpdateChecker

        (6) Downloader ---> nsIRequestObserver, nsIProcessEventSink

          download worker,表示一个下载任务。

        (7) UpdatePrompt ---> nsIUpdatePrompt

          忽略(for desktop browser)

      (c) gecko/toolkit/mozapps/update/nsUpdateService.manifest

        这里定义了contractID与实现实体的对应关系

        (1) '@mozilla.org/updates/update-service;1' ---> UpdateService

        (2) '@mozilla.org/updates/update-manager;1' ---> UpdateManager

        (3) '@mozilla.org/updates/update-checker;1' ---> Checker

      (d) gecko/toolkit/mozapps/update/UpdateTelemetry.jsm

        telemetry相关的东西,暂时不分析

      (e) gecko/toolkit/mozapps/update/nsUpdateServiceStub.js

        不知何用,呵呵,以后分析

      (f) gecko/toolkit/mozapps/update/updater/

        好像是有关mar文件的读取和更新的一些代码,待分析

      (g) gecko/b2g/components/UpdatePrompt.js

        (1) UpdateCheckListener ---> nsIUpdateCheckListener

        (2) UpdatePrompt ---> nsIUpdatePrompt

          gecko/b2g/components/B2GComponents.manifest里定义了contractID的对应关系:

            '@mozilla.org/updates/update-prompt;1' ---> UpdatePrompt

      (h) gecko/dom/system/nsISystemUpdateProvider.idl

      (i) gecko/dom/system/SystemUpdateService.jsm

      (j) gecko/dom/system/SystemUpdateManager.js

      (k) gecko/dom/system/

      (l) gecko/dom/webidl/SystemUpdate.webidl

    上一张图

  • 相关阅读:
    Go入门笔记-14 EdgeX读取配置文件
    Go入门笔记-13 使用EdgeX日志输出
    Go入门笔记-12 输出unix时间戳
    Go入门笔记-11 Go 获取Linux系统CPU占用率
    htop使用
    Ubuntu子系统默认使用root登录
    函数参数传递数组
    c 'CRTSCTS' undeclared
    c 数组指针使用
    使用SD卡刷OpenWRT后,调整分区大小
  • 原文地址:https://www.cnblogs.com/code-4-fun/p/4701452.html
Copyright © 2020-2023  润新知