鸿蒙系统框架层的启动细节荐

> 本文可看做是前文《[鸿蒙系统启动流程v2.0](https://harmonyos.51cto.com/posts/3893)》的第四阶段的补充和验证。
首先请看我的环境:
HiSpark AI Camera开发板(Hi3516dv300) + DevEco的HPM新建工程[Hi3516]编译的软件,项框架读音目代码默认打鸿蒙系统支持哪些手机印的大部分log被我临时关掉了,按我自己的风格在关键框架点重新打印的log,log基本样例为:
>框架结构是什么意思 **[system_init] SystemInit[20-18]: s鸿蒙系统什么时候正式推送ystem_con启动盘制作sole_init[full shell]**
:[system_init] //在sy框架stem_init.c 文件内
: SystemInit[20-18] //在SystemInit()函数内,大概有20步主要动作,这是第18步
:system_console系统我很弱别赶我下山_init[full shell] //这一步做了哪些事,或者打印关键信息
附件的log,是我在Hi3516开发板上框架读音抓的,大概从内核创建 Init 进程前一点点,到系统启动稳定的全过程,最后一段是点击相机应用打开摄像头的log。
我将其分成若干段,下面一步步分析其启动细节。
### 1. 创建 /bin/init 前:Line启动项3~7
> [system_init] SystemInit[20-18]: system_c启动onsole_ini启动走步t[full shell]
[system_init] syste系统m_console_init()->OsShellInit()
[system_init] SystemInit[20-19]: CatLogShell
[system_init] Sy系统的超级宗门stemInit[20-20]: OsUserInitProcess() Create u启动饭圈乱象整治专项ser init process[run /bin/init]
[system_init] SystemInit[20-0]: end.
前面的Syst系统之家emInit()步骤,请自行阅读代码理解。
从 system_console_init()进去跟踪,可以确认跑的是 Hi3516/kernel/liteos_a/启动项shell/full/ 里面的代码,而不是 Hi3鸿蒙系统有什么特别之处516/kernel/liteos_a/apps/shell/ 里面的简化版的shell。
这个可以从后面启动shell服务时打印的“OHOS # ”可以确认,full shell会打印这框架个,apps的shell不会打印。
然后就是创建用户根进程 Init,并启动切换到用框架户态去跑 /bi鸿蒙系统的手机越用越卡顿吗n/init 程序了。
### 2. /bin/init :Line10~27 + Line180~182
> [init_lite] "启动盘怎么重装系统教程/bin/init" main: sta框架梁rting OHOS Framework...
......
[init_lite] main[4-3] enter: InitReadCfg()
......
[init_read_cfg] InitReadCfg[7-6(1/2/3)]: **DoJob(pre启动子的作用-ini系统之家t/init/post-init)**
**Line180~182:**
> [init_cmds] DoChown, failed for 0 99 /dev/hdfwifi, err 2.
[init_read_cfg] InitReadCfg[7-7]: ReleaseAllJobs()
[init_lite] main[4-4] enter:框架协议 wh框架眼镜ile(1)...
这是 Hi3516/b启动盘制作ase/st启动了ar鸿蒙系统有什么特别之处tup/services/init_lite/src/main.c 里的main函数跑的流程。【至于内核态进程怎么切换到用户态来跑这个函数,详情可阅读前文《[鸿蒙系统的启动流程v2.0](https://harmonyos.51cto.com/posts/3893)》的第三阶段的分析】
从这里开始到下面的 Line18系统之无良宿主0~182,中间部分都是 DoJob()三个系统类小说阶段做的工作,我们先主要关注init阶启动了段的start service部分。
下面要依次启动的服务,见 /Hi3516/vendor/huawei/camera启动走步/init_c系统类小说onfigs/init_liteos_a_3516dv启动任务管理器快捷键300.cfg 文件:
```
{
"name"启动饭圈乱象整治专项 : "init",
"cmds" : [
"start shell",
"start apphilogcat",
"start foundation",
"start bundle_daemon",
"start appspawn",
"start media_server",
"start wms_server"
]
}
```
### 3. start shell :Line29~31
> [init_service_manager] StartServiceByName:idx[7-1]:[[shell]].
[init_service] ServiceS系统供应商tart [[shell]] succeed, pid = 3.
OHOS #
如上所述,代码在 Hi3516/kernel/liteos_a/shell/full/ 具体入口函数是哪个,我没去找,感兴趣的朋友自行找一下。
系统之农妇翻身开发板跑起来之后就已经开框架下载启shell服务了,在DevEco的monitor下敲个回车键就可以一看到“OHOS #”,敲个 tas系统的超级宗门k 命令看一下。
需要注意的是,debug版本才系统性红斑狼疮会提供shell功能,release系统我很弱别赶我下山版本不提供,会 start service启动饭圈乱象整治专项 fail。
### 4.start apphilogcat :Line33~35
> [init_service_manager] StartServiceByName:idx[7-3]:[[apphilogcat]].
[init_service] Service框架读音Start [[apphilogcat]] succeed, pid = 4框架梁.
[hiview_applogcat] main entering while(1)...
这是D系统之农妇翻身FX子系统的logcat服务,入口见:Hi3516鸿蒙系统有什么特别之处/base/hiviewdfx/services/hilogcat_lite/apphilogcat/hiview_app框架眼镜logc启动走步at.c 文件内的 main()。
函数一开始就:
```
if (argc == 1)
{
#ifdef OHOS_RELE鸿蒙系统演示ASE
ret启动盘urn 0;
#endif
}
```
也就是debug版本才会提供logcat功能,release版本框架剪力墙不提供。
服务会框架协议进入while(1)循环,**等待条件出鸿蒙系统什么时候正式推送现**,将log打印到系统重装终端和文件内。
```
ret = read(fd, buf, HILOG_LOGBUFFER);
if (ret [safwk_lite:main] Foundation server begin:
之前,会先打印一大段 **SER鸿蒙系统怎么申请VICE_INIT** 和 **FEATURE_INIT** 的log:
```
????????????????????????????????????????????????????????????????????
[samgr_server] SYS_SERVICE_INIT(InitializeRegistry)# **samgr**: g_server
[samgr_lite] SAMGR_GetInstance(mutex=N鸿蒙系统下载ULL): NO SAMGR instance, Init() to create ONE
[samgr_lite] Init. m启动utex[664156832]. sharedPool[0-8] reset to 0. sta启动子tus=0[BOOT_SYS]
[samgr_lite] SAM鸿蒙系统有什么特别之处GR_GetInstance(mutex鸿蒙系统的手机越用越卡顿吗=6641568启动子32)
[permission_service] APP_SERVICE_INIT(Init)启动项 # permissionms
[ipc_auth_lite] APP_FEATURE_INI鸿蒙系统下载T(Init) : ipc_auth
[pms_inner] APP_FEATURE_INIT(Init) : PmsInner
[pms_server] APP_FEATU启动子RE_INIT(Init) : P框架结构msFeature
[ability_mgr_service] SYSEX_S鸿蒙系统什么时候正式推送ERVICE_INIT(Init)# abilityms
[ability_mgr_feature] SYSEX_FEATURE_INIT(Init): AmsFeature
[ability_inner_feature] SYSEX_FEATURE_INIT(Init)鸿蒙系统: AmsInnerFeature
[bundle_ms_host] APP_SERVICE_INIT(Init) # bundlems
[bundle_inner_feature] APP_FEATURE_INIT(Init) :框架下载 BmsInnerFeature系统之家
[bundle_ms_feature] APP_FEATURE_INIT(Init) : BmsFeature
[distributed_schedule_service] SYS_SERVICE_INIT(Init) # dtbs系统类小说chedsrv
[dmslite] SYS_FEATURE_INIT(Init) : dmslite
????????????????鸿蒙系统怎么申请??????????????????????????????启动子的作用?框架眼镜?????????????????????
```
为什么呢?
一开始我也是很多问号,Hi3861平台上,会跑 HOS_SystemInit()
`系统我很弱别赶我下山``
void HOS_Syst鸿蒙系统什么时候正式推送emInit(void系统的超级宗门)
{
MODULE_INIT(bsp);
MODULE_INIT(device);
MODULE_INIT(core);
SYS_INIT(service);
SYS_INIT(feature);
MODULE_INIT(run);
SAMGR_Bootstrap();
}
```
以此来启动相关的service/feature以及app上鸿蒙系统的手机越用越卡顿吗标记为 SY启动盘S_RUN()的应用,但是Hi3516上并没有跑上面这个函数系统类小说,而是跑弱引用的OHOS_SystemInit():
```
void __attribute__系统((weak)) OHOS_SystemIn鸿蒙系统下载it(void)
{
SAMGR_Boots鸿蒙系统怎么申请trap();
}
```
我就到 Hi3516/foundation/distributedsch框架梁edule/se框架结构是什么意思rvices/safwk_lite/ 目录下系统重装去看 foundation 进程相关的 README.md,内容很丰富,但貌似没有合理的解释。
那就再到 OHOS1启动盘_1_0LTS/foundation/distributedschedule/safwk_lite/ 目录下启动盘制作去看 README_zh.md,这回有点意思了。
> safwklite模块负责提供基础服务运行的空进程。
safwklite是foundation进程的实现。
在foundation进程中添加服务,按照鸿蒙系统首批升级机型名单服务的模板写完服务后在BUILD.gn中添加依赖即可。
虽然只有简短的几句话,但意思很明确了:
**a.fou系统供应商ndation是一个空进程,但是它“负责提供基础服务运行”
b.服务(基础服务或者开发者启动盘怎么重装系统教程新增的服务)要运行起来,需要按模板添加在safwklite的启动盘怎么重装系统教程BUILD.gn依赖中**
所以,打开safwklite的BUILD.gn看一下依赖关系:
```
deps = [
"//foundation/distributedschedule/services/samgr_lite/samgr_server:server",
"//base/hiviewdfx/frameworks/hilog_lite/featured:hilog_shared",
"//base/security/services/iam_lite/ipc_auth:ipc_auth_target",
]
if (ohos_kernel_type == "liteos_a") {
deps += [
"//base/security/services/iam_lite/pms:pms_target",
"//foundation/aafwk/services/abilitymgr_lite:abilityms",
"//foundation/appexecfwk/services/bundlemgr_lite:bundlems",
"//foundation/distributedschedule/services/dtbschedmgr_lite:dtbschedmgr",
]
}
```
所以上面那一大段 **SERVICE_INIT** 和 **FEATURE_INIT** 的log中,会先分别按顺序启动几个ser鸿蒙系统有什么特别之处vice(用'#'标记):samgr/permissi系统重装onms/abilityms/bundlems/dtbschedsrv,这是服务的名字,真正的组件名字就分别是:samgr_lite/iam_lite/abilitymgr_lite/bundlemgr_lite/dtbschedmgr_lite。
s系统供应商amgr_lite 组件提供框架读音了分布式任务管理和调度能力,其他所有的系统能力都由它管理和调度【简单的分析见前文《[理解启动恢复子系统](https://harmonyos.51cto.com/posts/4209)》 的5.3小节,未来会单独写文章对SAMGR进行详细分析,敬请期待】。
另外四框架读音个组件,又包含各自的feature,会在这里一系统之无良宿主并进行init/注册和提供服务(用':'标记)【进一步的细节,请自行去分析相关的BUILD.g系统之无良宿主n文件】。
如README.md所说,以后开发框架读音者要是开发了新的服务或者feature,都可以添加在foundatio鸿蒙系统怎么申请n的依赖关系中。
所以,这里的foundation,实际上做的就是上面Hi3861平台中的SYS_INIT(service) 和 SYS_INIT(feature) 两步所做的工作。
Lin启动饭圈乱象整治专项e60~86:
这就是调用SA框架结构MGR_Bootstrap()来注册上面鸿蒙系统首批升级机型名单的几个服务的具体流程了,这里先鸿蒙系统和安卓的区别略过,详情请自行阅读代码进行跟踪和分析。
Line88~100:
这里是 dmslite 这个 feature 开始向软启动任务管理器快捷键总线发启动了框架读音dms框架柱服务了:
> [dmslite] OnInitial框架剪力墙结构ize(): PublishService(dms)-->启动子;>启动项softbus
......
[dmslite_session] Creat框架梁eSessionServer(启动盘怎么重装系统教程moduleName[dms], sessionName[dms])
[dmslite] OnPublishSuccess(启动项publishI框架下载d[1]), CreateSessionServer()
这就开始涉及到分布式软总线子系统了。
刚好上周我在H启动盘怎么重装系统教程i3861平台上对软总线做了一番研究和调试,对此有了一系统重装点了解,为了避免框架读音软总线的log对本文分析的流程的影响,我启动了也暂时把软总线的log关闭了,Hi3516和Hi38框架剪力墙61工程都可以在foundation/commu启动盘nicati启动盘on/services/softbus_lite/os_adap启动盘制作ter/include/os_adapter.h 找到 SOFTBUS_DEBUG 这个宏,def 或者 undef就可以打鸿蒙系统演示开/关闭软总线的log了。
对于软总线子系统的理解,我会另文专门分析总结,敬请期待。
#系统的超级宗门## 6.start bundle_daemon: Line108~128
包管理服务的启动,暂未进一步分析。
入口在:Hi3516/foundation/框架柱appexecfwk/services/bund启动子lemgr_lite/bundle_daemon/src/bundle_daemon.cpp
### 7.start appspawn: Line132~157
启动a框架协议pp系统的超级宗门spawn应用孵化器服务,入口在:
/Hi3516/base/startup/services/appspawn_lite/src/appspawn_s系统的超级宗门ervice.c
这是所有应用程序进程的父进程,appspawn通过接收应用程序启动了框架的命令来孵化系统流小说应用进程,具体流程这里也不做进一步深入了,请自行阅读代码进行分析。
### 8.start media_server: Line161~165
启动媒体服务,入口在:
H鸿蒙系统i3516/foundation/multimedia/s启动任务管理器快捷键ervices/media_lite/media_main.cpp
提供播放、录制、解析、解码等接口能力,并鸿蒙系统有什么特别之处提供媒体播放鸿蒙系统支持哪些手机录制引擎服务化能力。框架结构
> [/third_party/iniparser/src/iniparser.c] iniparser_load(/storage/data/cameradev.ini)
这里会调用三方库来分析cameradev.ini文件(Hi3516/applications/sample/camera/media/cameradev_imx335.ini 的副本),获取摄像头sensor的配启动项置信息。
### 9.start wms_server: Line169~223
启动图形WMS组件服务,暂未进一步分析。入口在:
Hi3516/foundation/gra启动了phic/lite/ser框架结构是什么意思vices/wms/src/server/sa启动盘怎么重装系统教程mgr_wms.cpp
图形服系统供应商务采用C/框架S架构,内部分为窗口管理(WMS: Window Manager Se系统rvice鸿蒙系统的手机越用越卡顿吗)和输入事件管理(IMS: Input Manger Service)两个子服务。
### 10.[appspawn_service] Invo框架眼镜ke(): Line226~
这里就是 appspawn 开始孵化第一个应用launche启动子的作用r,也就是我们看到的桌面。
> [appspawn_service] Invoke()
[appspawn_service] Invoke: msg:: bundleName[**com.huawei.launcher**],sharedLibPaths[],identityID[73014444033],uID[101],gID[101]
再接下来的我点击相机应用图标,启动摄像头,也有一段log
> [appspawn_service] Invoke框架下载()
[appspawn_service] Invoke: msg:: bundleName[**com.huawei.camera**],sharedLibPa框架结构是什么意思ths[],identityID[661424963587],uID[100],gID[100]
附件是完整的log,能理解多少就看各位的造化了~.~。
感谢阅读。
文章相关附件可以点击下面的原文链接前往学习
原文链接:https:启动了//harmonyos.51cto.com/posts/启动任务管理器快捷键4498#bk框架梁wz
[想了解更多关于鸿蒙的内容,请访问:](https://harmonyos.51cto.com/#bkwz)
[51CTO和华为官方战略合作共建的鸿蒙技术社区](https://harmonyos.51启动子的作用cto.com/#bkwz)
https://harmonyos.系统之农妇翻身51cto.com/#bkwz