栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【鸿蒙OS开发入门】14 - 启动流程代码分析之第一个用户态进程:init 进程 之 post-init 任务详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【鸿蒙OS开发入门】14 - 启动流程代码分析之第一个用户态进程:init 进程 之 post-init 任务详解

【鸿蒙OS开发入门】14 - 启动流程代码分析之第一个用户态进程:init 进程 之 post-init 任务详解
    • 一、/etc/init.cfg 系统默认cfg
    • 二、/system/etc/init/bytrace.cfg:初始化trace框架并使能trace功能
    • 三、post-init 第一阶段之 early-fs 阶段:启动vold服务 volume daemon
      • 3.1 /etc/init.cfg
    • 四、post-init 第二阶段之 fs 阶段:insmod加载内核驱动模块
      • 4.1 /etc/init.Hi3516DV300.cfg
    • 五、post-init 第三阶段之 post-fs 阶段:挂载 rootfs文件系统到根目录,启动udevd_service监听并处理内核udev事件
      • 5.1 /etc/init.cfg
      • 5.2 /system/etc/init/weston.cfg: 启动udevd_service设备事件管理服务
    • 六、post-init 第四阶段之 late-fs 阶段:启动分布式权限管理、应用孵化器组件、用户程序管理等服务
      • 6.1 /etc/init.cfg:修改tracing节点权限为755
      • 6.2 /system/etc/init/distributedpermission_service.cfg:启动分布式权限管理服务
      • 6.3 /system/etc/init/appspawn.cfg:启动 appspawn 应用孵化器组件服务
      • 6.4 /system/etc/init/lmks.cfg:启动 lmks 用户程序管理服务
      • 6.5 /system/etc/init/installs.cfg:启动包管理服务
    • 七、post-init 第五阶段之 post-fs-data 阶段:启动驱动子系统、系统帐号组件、鸿蒙通用密钥库系统、设备认证模块、日志文件系统、布式软总线组件、无线局域网组件、蓝牙、音频组件、分布式任务调度模块等服务
      • 7.1 /etc/init.cfg:初始化系统中/data目录下相关文件夹的权限
      • 7.2 /system/etc/init/hdf_peripheral.cfg:修改 hdf_input、hdf_audio、hdf_disp等节点所属者为system
      • 7.3 /system/etc/init/hdf_devmgr.cfg:启动 hdf_devmgr 用户态驱动子系统服务
      • 7.4 /system/etc/init/accountmgr.cfg:启动accountmgr系统帐号组件服务
      • 7.5 /system/etc/init/huks_service.cfg:启动huks_service鸿蒙通用密钥库系统服务
      • 7.6 /system/etc/init/deviceauth_service.cfg:启动deviceauth_service设备认证模块服务
      • 7.7 /system/etc/init/faultloggerd32.cfg:启动32位系统崩溃临时日志管理模块
      • 7.8 /system/etc/init/faultloggerd64.cfg:启动64位系统崩溃临时日志管理模块
      • 7.9 /system/etc/init/hilogd.cfg: 启动日志文件系统服务,保存在/data/log/
      • 7.10 /system/etc/init/hiview.cfg: 启动终端设备维测服务集
      • 7.11 /system/etc/init/softbus_server.cfg: 启动布式软总线组件服务
      • 7.12 /system/etc/init/wifi_standard.cfg: 启动wifi 无线局域网组件
      • 7.13 /system/etc/init/wifi_hal_service.cfg: 启动wifi hal service
      • 7.14 /system/etc/init/bluetooth_service.cfg: 启动蓝牙服务组件
      • 7.15 /system/etc/init/pulseaudio.cfg: 启动音频组件
      • 7.16 /system/etc/init/distributedsched.cfg: 启动分布式任务调度模块
    • 八、post-init 第六阶段之 load_persist_props_action 阶段: 加载persist属性等参数
      • 8.1 /etc/init.cfg
    • 九、post-init 第七阶段之 firmware_mounts_complete 阶段:删除/dev/.booting
      • 9.1 /etc/init.cfg
    • 十、post-init 第八阶段之 early-boot 阶段:无任务
    • 十一、post-init 第九阶段之 boot 阶段:初始化USB驱动、启动电话、时间、输入法、升级服务引擎、hdcd、媒体库组件、相机组件、媒体组件、分布式数据等服务
      • 11.1 /etc/init.cfg: 初始化/sys 目录下的相关节点权限
      • 11.2 /etc/init.Hi3516DV300.cfg: 初始化graphics图形相关节点权限
      • 11.3 /etc/init.Hi3516DV300.usb.cfg: 挂载configfs文件系统、usb functions驱动
      • 11.4 /system/etc/init/telephony.cfg: 启动电话核心服务模块
      • 11.5 /system/etc/init/timeservice.cfg: 启动时间服务
      • 11.6 /system/etc/init/inputmethodservice.cfg: 启动输入法服务
      • 11.7 /system/etc/init/updater_sa.cfg: 启动升级服务器引擎,查询并下载升级包
      • 11.8 /system/etc/init/init.usb.cfg: 启动hdcd服务,用于调试系统,等通与安卓的adb
      • 11.9 /system/etc/init/foundation.cfg: 启动foundation服务
      • 11.10 /system/etc/init/medialibrary_service.cfg: 启动媒体库组件
      • 11.11 /system/etc/init/camera_service.cfg: 启动相机组件
      • 11.12 /system/etc/init/media_service.cfg: 启动媒体组件
      • 11.13 /system/etc/init/distributed_data.cfg: 启动分布式数据服务


本系列文章汇总:

  1. 《【鸿蒙OS开发入门】01 - 搭建Ubuntu虚拟机开发环境》
  2. 《【鸿蒙OS开发入门】02 - 启动流程代码分析之Uboot 第一阶段:之解压并引导加载u-boot.bin》
  3. 《【鸿蒙OS开发入门】03 - 启动流程代码分析之Uboot 第二阶段:之board_init初始化》
  4. 《【鸿蒙OS开发入门】04 - 启动流程代码分析之Uboot 第二阶段:之U_BOOT_CMD原理》
  5. 《【鸿蒙OS开发入门】05 - 启动流程代码分析之Uboot 第二阶段:之bootm引导加载Kernel OS》
  6. 《【鸿蒙OS开发入门】06 - 启动流程代码分析之KernelOS:之启动Linux-4.19 Kernel内核》
  7. 《【鸿蒙OS开发入门】07 - 安装docker环境编译openharmony 2.0代码》
  8. 《【鸿蒙OS开发入门】08 - 启动流程代码分析之KernelOS:之启动 liteos_a 内核》
  9. 《【鸿蒙OS开发入门】09 - 启动流程代码分析之KernelOS:之启动Linux-4.19 Kernel内核 中do_basic_setup()所干的大事》
  10. 《【鸿蒙OS开发入门】10 - 启动流程代码分析之第一个用户态进程:init 进程》
  11. 《【鸿蒙OS开发入门】11 - 启动流程代码分析之第一个用户态进程:init 进程 之 Services简介》
  12. 《【鸿蒙OS开发入门】12 - 启动流程代码分析之第一个用户态进程:init 进程 之 pre-init 任务详解》
  13. 《【鸿蒙OS开发入门】13 - 启动流程代码分析之第一个用户态进程:init 进程 之 init 任务详解》
  14. 《【鸿蒙OS开发入门】14 - 启动流程代码分析之第一个用户态进程:init 进程 之 post-init 任务详解》
  15. 《【鸿蒙OS开发入门】15 - 启动流程代码分析之第一个用户态进程:init 进程 之 StartParamService 中 libuv 做了啥?》
  16. 《【鸿蒙OS开发入门】16 - 重头搭建Ubuntu新环境编译OpenHarmony 3.0 LTS》

在前面,我们分析到:
pre-init 阶段,主要是做了启动ueventd服务,以及挂载vendor、userdata 这两个分区。
init阶段:主要是做了挂载debugfs和cgroup这两个子系统,启动用户程序框架子系统samgr。

本文,我们来看下,post-init 阶段又做了什么呢?

注:本文先看正常开机的流程,有关recover模式,或updater情况下,我们后续再单独分析

# basestartupinit_liteservicessrcmain.c
int main(int argc, char **argv)
{
	......
	// 4. 分别执行pre-init、init、post-init 等相关的事情
    InitReadCfg();
    --------->
    +	ParseInitCfg(INIT_CONFIGURATION_FILE);		//  "/etc/init.cfg"
    +	DumpAllServices();	// 打印所有的服务信息,系统中所有现有的服务保存在 static Service* g_services 中,通过g_servicesCnt来进行索引计数。
    +	DoJob("pre-init");	// 执行 `/etc/init.cfg` 中 `pre-init`的内容
    +	DoJob("init");		// 执行 `/etc/init.cfg` 中 `init`的内容
    +	DoJob("post-init");	// 执行 `/etc/init.cfg` 中 `post-init`的内容
    +	ReleaseAllJobs();	// 释放init.cfg中所有的jobs 命令所占用的空间
    <---------
	......
}

DoJob("post-init");的作用是,触发启动 json cfg文件中所有post-init 字段的命令,我们分别来看看这些命令的功能吧。


一、/etc/init.cfg 系统默认cfg

在init.cfg加载了"/etc/init.usb.cfg", "/etc/init.usb.configfs.cfg", "/etc/init.Hi3516DV300.usb.cfg", "/etc/init.Hi3516DV300.cfg"这几个config,会把它们的信息全部整合进来。

在 init.cfg 中,post-init阶段,又可以把启动过程分成很多个小段,主要如下:

  1. 触发early-fs 阶段的命令
  2. 触发fs 阶段的命令
  3. 触发post-fs 阶段的命令
  4. 触发late-fs 阶段的命令
  5. 触发post-fs-data 阶段的命令
  6. 触发load_persist_props_action 阶段的命令
  7. 触发firmware_mounts_complete 阶段的命令
  8. 触发early-boot 阶段的命令
  9. 触发boot 阶段的命令

有关这些小阶段,我们后面单独来分析各个小阶段所做的事情。

base/startup/init_lite/services/etc/init.cfg
{
    "import" : [
            "/etc/init.usb.cfg",
            "/etc/init.usb.configfs.cfg",
            "/etc/init.usb.cfg",
            "/etc/init.Hi3516DV300.usb.cfg",
            "/etc/init.Hi3516DV300.cfg"
    ],
    "jobs" : [{
            "name" : "post-init",
            "cmds" : [
                "trigger early-fs",						// 触发`early-fs` 阶段的命令
                "trigger fs",							// 触发`fs` 阶段的命令
                "trigger post-fs",						// 触发`post-fs` 阶段的命令
                "trigger late-fs",						// 触发`late-fs` 阶段的命令
                "trigger post-fs-data",					// 触发`post-fs-data` 阶段的命令
                "trigger load_persist_props_action",	// 触发`load_persist_props_action` 阶段的命令
                "trigger firmware_mounts_complete",		// 触发`firmware_mounts_complete` 阶段的命令
                "trigger early-boot",					// 触发`early-boot` 阶段的命令
                "trigger boot"							// 触发`boot` 阶段的命令
            ]
        }



二、/system/etc/init/bytrace.cfg:初始化trace框架并使能trace功能

在bytrace.cfg中主要是初始化trace框架并使能trace功能。

有关 trace 可以参考: 《Linux内核跟踪之trace框架分析》

developtools/bytrace_standard/bin/config/bytrace.cfg
{
    "jobs" : [{
            "name" : "post-init",
            "cmds" : [
                "write /proc/sys/kernel/sched_schedstats 1",
                "write /sys/kernel/debug/tracing/tracing_on 0",
                "chmod 0666 /sys/kernel/debug/tracing/buffer_size_kb",
                "chmod 0666 /sys/kernel/debug/tracing/saved_cmdlines_size",
                "chmod 0666 /sys/kernel/debug/tracing/trace",
                "chmod 0666 /sys/kernel/debug/tracing/trace_clock",
                "chmod 0222 /sys/kernel/debug/tracing/trace_marker",
                "chmod 0666 /sys/kernel/debug/tracing/tracing_on",
                "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_lock/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_locked/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_unlock/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction_received/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction_alloc_buf/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/cgroup/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/cpufreq_interactive/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/dma_fence/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/fence/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_read/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_write/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_result/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_reply/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_read/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_write/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_result/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_reply/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/kmem/rss_stat/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_heap_grow/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_heap_shrink/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/lowmemorykiller/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/lowmemorykiller/lowmemory_kill/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/mm_event/mm_event_record/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/oom/oom_score_adj_update/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_frequency/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_idle/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/power/clock_set_rate/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_frequency_limits/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/power/gpu_frequency/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_switch/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_blocked_reason/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_cpu_hotplug/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_pi_setprio/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_process_exit/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_waking/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/signal/signal_generate/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/signal/signal_deliver/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/sync/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/task/task_rename/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/task/task_newtask/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/block/block_rq_issue/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/block/block_rq_complete/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_da_write_begin/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_da_write_end/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_es_lookup_extent_enter/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_es_lookup_extent_exit/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_load_inode/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_exit/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_get_data_block/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_iget/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_enter/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_exit/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_write_begin/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_write_end/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/filemap/mm_filemap_add_to_page_cache/enable",
                "chmod 0666 /sys/kernel/debug/tracing/events/filemap/mm_filemap_delete_from_page_cache/enable",
                "chmod 0666 /sys/kernel/debug/tracing/options/overwrite",
                "chmod 0666 /sys/kernel/debug/tracing/options/print-tgid",
                "chmod 0666 /sys/kernel/debug/tracing/options/record-tgid",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu0/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu1/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu2/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu3/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu4/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu5/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu6/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu7/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu8/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu9/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu10/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu11/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu12/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu13/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu14/trace",
                "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu15/trace"                                                    



三、post-init 第一阶段之 early-fs 阶段:启动vold服务 volume daemon 3.1 /etc/init.cfg

Vold 就是负责挂载SD卡的,vold 的全称是volume daemon。
实际上是负责完成系统的CDROM,USB 大容量存储,MMC 卡等扩展存储的挂载任务自动完成的守护进程。
它提供的主要特点是支持这些存储外设的热插拔。

# base/startup/init_lite/services/etc/init.cfg
	"jobs" : [{
            "name" : "early-fs",
            "cmds" : [
                "start vold"
            ]
        }



四、post-init 第二阶段之 fs 阶段:insmod加载内核驱动模块 4.1 /etc/init.Hi3516DV300.cfg
  1. 加载 hi_securec.ko 安全模块
  2. 加载 mmz模块驱动 hi_osal.ko
    在海思平台上将内存分为两个部分:os内存和mmz内存。
    os内存指:由linux操作系统管理的内存;
    mmz内存:由mmz驱动模块进行管理供媒体业务单独使用的内存,在驱动加载时可以指定该模块管理内存的大小。
    可以参考:《hisi mmz模块驱动讲解》
  3. 加载中断模块驱动 hi_irq.ko
  4. 加载 proc 虚拟文件系统模块驱动 hi_proc.ko
  5. 加载Hi3516DV300芯片的linux内核驱动模块驱动 sys_config.ko
    sys_config的源码位于:OpenHarmonydevicehisiliconhispark_taurussdk_linuxsocsrcinterdrvhi3516cv500sysconfig
    有关 /device/hisilicon/hispark_taurus/sdk_linux/soc 目录结构如下:
/device/hisilicon/hispark_taurus/sdk_linux/soc
├── ko              # Hi3516DV300芯片的内核模块加载脚本
├── lib             # Hi3516DV300芯片的媒体图形库文件、LICENSE文件
└── src             # Hi3516DV300芯片的linux内核驱动模块源码、LICENSE文件
    ├── interdrv    # 外设模块
    │   ├── common  # 各芯片通用模块
    │   │   ├── cipher    # 加解密模块
    │   │   ├── hi_adc    # adc总线控制器						// 编译生成:hi3516cv500_adc.ko
    │   │   ├── hi_ir     # 红外控制器								// 编译生成:hi3516cv500_ir.ko
    │   │   ├── hi_irq    # 用户态驱动中断注册管理模块  // 编译生成:hi_irq.ko
    │   │   ├── hi_proc   # 调试信息管理模块					// 编译生成:hi_proc.ko
    │   │   └── wtdg      # 看门狗										// 编译生成:hi3516cv500_wdt.ko
    │   └── hi3516cv500   # 芯片相关模块
    │       ├── mipi_rx   # mipi协议rx方向
    │       ├── mipi_tx   # mipi协议tx方向
    │       └── sysconfig  # 系统管脚配置相关配置
    ├── mpp  # 图形媒体相关模块
    │   ├── cbb
    │   │   ├── based # 日志相关功能
    │   │   ├── sysd  # 系统基础模块,提供内存、模块绑定等功能
    │   │   └── vo    # video output
    │   └── component
    │       ├── hdmi  # HDMI接口输出
    │       ├── hifb  # frame buffer管理
    │       └── tde   # Two Dimensional Engine
    └── osal             # 驱动适配层,用于屏蔽系统差异,提供统一接口
  1. 加载device/hisilicon/hispark_taurus/sdk_linux/soc/下面的Hi3516DV300芯片的内核模块
# code-v3.0-LTSOpenHarmonydevicehisiliconhispark_taurussdk_linuxBUILD.gn
sdk_modules_name_list = [
  "hi3516cv500_base.ko",		// device/hisilicon/hispark_taurus/sdk_linux/soc/src/mpp/cbb/based/
  "hi3516cv500_hdmi.ko",		// device/hisilicon/hispark_taurus/sdk_linux/soc/src/mpp/component/hdmi/
  "hi3516cv500_ir.ko",			// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/common/hi_ir/
  "hi3516cv500_sys.ko",			// device/hisilicon/hispark_taurus/sdk_linux/soc/src/mpp/cbb/sysd/
  "hi3516cv500_tde.ko",			// device/hisilicon/hispark_taurus/sdk_linux/soc/src/mpp/component/tde/
  "hi3516cv500_vo_dev.ko",		// device/hisilicon/hispark_taurus/sdk_linux/soc/src/mpp/cbb/vo/vo_dev/
  "hi3516cv500_wdt.ko",			// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/common/wtdg/
  "hi_cipher.ko",				// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/common/cipher/
  "hifb.ko",					// device/hisilicon/hispark_taurus/sdk_linux/soc/src/mpp/component/hifb/
  "hi_irq.ko",					// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/common/hi_irq/
  "hi_mipi_rx.ko",				// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/hi3516cv500/mipi_rx/
  "hi_mipi_tx.ko",				// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/hi3516cv500/mipi_tx/
  "hi_osal.ko",					// device/hisilicon/hispark_taurus/sdk_linux/soc/src/osal/
  "hi_proc.ko",					// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/common/hi_proc/
  "sys_config.ko",				// device/hisilicon/hispark_taurus/sdk_linux/soc/src/interdrv/hi3516cv500/sysconfig/
  "load3516dv300_user",			// device/hisilicon/hispark_taurus/sdk_linux/soc/ko/load3516dv300_user
]
  1. 加载frame buffer管理驱动 hifb.ko, HDMI驱动模块hi3516cv500_hdmi.ko, 及hi_mipi_rx 总线驱动模块

配置文件内容如下:

 device/hisilicon/hi3516dv300/build/rootfs/init.Hi3516DV300.cfg
{	"jobs" : [{
            "name" : "fs",
            "cmds" : [
                "insmod /vendor/modules/hi_securec.ko",
                "insmod /vendor/modules/hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0,0xA8000000,384M || report_error",
                "insmod /vendor/modules/hi_irq.ko",
                "insmod /vendor/modules/hi_proc.ko",
                "insmod /vendor/modules/sys_config.ko chip=hi3516dv300 sensors=sns0=imx335,sns1=NULL,g_cmos_yuv_flag=0",
                "insmod /vendor/modules/hi3516cv500_base.ko",
                "insmod /vendor/modules/hi3516cv500_sys.ko",
                "insmod /vendor/modules/hi3516cv500_tde.ko",
                "insmod /vendor/modules/hi3516cv500_vo_dev.ko",
                "insmod /vendor/modules/hifb.ko video="hifb:vram0_size:16200"",
                "insmod /vendor/modules/hi3516cv500_hdmi.ko",
                "insmod /vendor/modules/hi_mipi_rx.ko"



五、post-init 第三阶段之 post-fs 阶段:挂载 rootfs文件系统到根目录,启动udevd_service监听并处理内核udev事件 5.1 /etc/init.cfg
  1. 运行 /system/bin/vdc,全盘加密相关
  2. 挂载 rootfs 文件系统到根目录
  3. 挂载Sdcard 到 /storage
# base/startup/init_lite/services/etc/init.cfg
{
            "name" : "post-fs",
            "cmds" : [
                "exec - system system -- /system/bin/vdc checkpoint markBootAttempt",
                "mount rootfs rootfs / remount bind ro nodev",
                "mount none /mnt/runtime/default /storage bind rec",			// 挂载Sdcard
                "mount none none /storage slave rec",
                "chown system cache /cache",
                "chmod 0770 /cache",
                "mkdir /cache/recovery 0770 system cache",
                "mkdir /cache/backup_stage 0700 system system",
                "mkdir /cache/backup 0700 system system",
                "chown root log /proc/vmallocinfo",
                "chmod 0440 /proc/vmallocinfo",
                "chown root log /proc/slabinfo",
                "chmod 0440 /proc/slabinfo",
                "chown root system /proc/kmsg",
                "chmod 0440 /proc/kmsg",
                "chown root system /proc/sysrq-trigger",
                "chmod 0220 /proc/sysrq-trigger",
                "chown system log /proc/last_kmsg",
                "chmod 0440 /proc/last_kmsg",
                "chmod 0444 /sys/fs/selinux/policy",
                "mkdir /cache/lost+found 0770 root root"
            ]
        }

5.2 /system/etc/init/weston.cfg: 启动udevd_service设备事件管理服务
  1. 启动 udevd_service 设备事件管理服务,监听内核发出的设备事件, 并根据 udev 规则处理每个事件。
  2. 启动 multimodalinputservice 多模输入标准系统组件服务,主要功能就是对按键、触控、鼠标、语音等功能进行封装,向上提供统一的接口,类似安卓的 getevent
  3. 启动 weston 模块,Weston是Wayland compositor的参考实现,是一套display server(Wayland compositor)与client间的通信协议
  4. 接收内核发送来的设备事件,查看并处理udev事件队列中的事件,等全部处理完就退出。
# third_party/weston/weston.cfg
{
    "jobs" : [{
            "name" : "post-fs",
            "cmds" : [
                "start udevd_service",					// third_party/eudev/src/udev/udevd.c
                "sleep 1",
                "start multimodalinputservice",			// foundation/multimodalinput/input/
                "start mmi_uinput_service",				// 输入事件注入模块 foundation/multimodalinput/input
                "sleep 2",
                "export XDG_RUNTIME_DIR /data/weston",
                "export XKB_CONFIG_ROOT /etc/xkb",
                "export XKB_CONFIG_EXTRA_PATH /etc/xkb",
                "mkdir /data/weston",
                "chmod 777 /data/weston",
                "start weston",							// 启动 weston 模块 /third_party/weston/
                "trigger weston_start",
                "sleep 2",
                "exec /system/bin/udevadm trigger",					// 接收内核发送来的设备事件
                "exec /system/bin/udevadm settle --timeout=30"		// 查看udev事件队列,如果所有事件全部处理完就退出, 超时时间30s
            ]
        }
    ],
    "services" : [{
            "name" : "weston",
            "path" : ["/system/bin/weston", "-c", "/system/etc/weston.ini", "-B", "drm-backend.so", "--tty=1", "--use-pixman"],
            "disabled" : 1
        }, {
            "name" : "hdi_weston",
            "path" : ["/system/bin/weston", "-c", "/system/etc/weston.ini", "-B", "hdi-backend.so"],
            "disabled" : 1
        }, {
            "name" : "multimodalinputservice",
            "path" : ["/system/bin/sa_main", "/system/profile/multimodalinputservice.xml"],
            "uid" : "system",
            "gid" : ["system", "shell", "uhid"]
        }, {
            "name" : "mmi_uinput_service",
            "path" : ["/system/bin/uinput_inject"],
            "uid" : "root",
            "gid" : ["system", "shell", "uhid"]
        }, {
            "name" : "udevd_service",
            "path" : ["/system/bin/udevd"],
            "uid" : "root",
            "gid" : ["system"]
        }
    ]
}



六、post-init 第四阶段之 late-fs 阶段:启动分布式权限管理、应用孵化器组件、用户程序管理等服务 6.1 /etc/init.cfg:修改tracing节点权限为755
# base/startup/init_lite/services/etc/init.cfg
{
            "name" : "late-fs",
            "cmds" : [
                "chmod 0755 /sys/kernel/debug/tracing"
            ]

6.2 /system/etc/init/distributedpermission_service.cfg:启动分布式权限管理服务

启动 dps_service 分布式权限管理服务

# base/security/permission/services/permission_standard/distributedpermissionmanagerservice/distributedpermission_service.cfg
{
    "jobs" : [{
            "name" : "late-fs",
            "cmds" : [
                "start dps_service"
            ]}],
    "services" : [{
            "name" : "dps_service",
            "path" : ["/system/bin/sa_main", "/system/profile/dps_service.xml"],
            "importance" : -20,
            "uid" : "system",
            "gid" : ["system"]
        }]}

6.3 /system/etc/init/appspawn.cfg:启动 appspawn 应用孵化器组件服务

启动appspawn 应用孵化器组件服务

# base/startup/appspawn_standard/appspawn.cfg
{
    "jobs" : [{
            "name" : "late-fs",
            "cmds" : [
                "start appspawn"
            ]}],
    "services" : [{
            "name" : "appspawn",
            "path" : ["/system/bin/appspawn"],
            "importance" : -20,
            "uid" : "root",
            "gid" : ["root"]
        }]}

6.4 /system/etc/init/lmks.cfg:启动 lmks 用户程序管理服务

启动 lmks 用户程序管理服务

# foundation/appexecfwk/standard/services/appmgr/lmks.cfg
{
    "jobs" : [{
            "name" : "late-fs",
            "cmds" : [
                "start lmks"
            ]}],
    "services" : [{
            "name" : "lmks",
            "path" : ["/system/bin/lmks"],
            "importance" : -20,
            "uid" : "root",
            "gid" : ["root"]
        }]}

6.5 /system/etc/init/installs.cfg:启动包管理服务
# foundation/appexecfwk/standard/services/bundlemgr/installs.cfg
{
    "jobs" : [{
            "name" : "late-fs",
            "cmds" : [
                "start installs"
            ]
        }
    ],
    "services" : [{
            "name" : "installs",
            "path" : ["/system/bin/installs"],
            "importance" : -20,
            "uid" : "root",
            "gid" : ["root"]
        }
    ]
}



七、post-init 第五阶段之 post-fs-data 阶段:启动驱动子系统、系统帐号组件、鸿蒙通用密钥库系统、设备认证模块、日志文件系统、布式软总线组件、无线局域网组件、蓝牙、音频组件、分布式任务调度模块等服务 7.1 /etc/init.cfg:初始化系统中/data目录下相关文件夹的权限

初始化系统中/data/目录下一些文件夹,并赋予相关的权限。

# base/startup/init_lite/services/etc/init.cfg
{
            "name" : "post-fs-data",
            "cmds" : [
                "chown system system /data",
                "chmod 0771 /data",
                "mkdir /data/bootchart 0755 shell shell",
                "mkdir /data/app-staging 0750 system system",
                "copy /data/system/entropy.dat /dev/urandom",
                "mkdir /data/misc 01771 system misc",
                "mkdir /data/misc/recovery 0770 system log",
                "copy /data/misc/recovery/ro.build.fingerprint /data/misc/recovery/ro.build.fingerprint.1",
                "chmod 0440 /data/misc/recovery/ro.build.fingerprint.1",
                "chown system log /data/misc/recovery/ro.build.fingerprint.1",
                "write /data/misc/recovery/ro.build.fingerprint ${ro.build.fingerprint}",
                "chmod 0440 /data/misc/recovery/ro.build.fingerprint",
                "chown system log /data/misc/recovery/ro.build.fingerprint",
                "mkdir /data/misc/recovery/proc 0770 system log",
                "copy /data/misc/recovery/proc/version /data/misc/recovery/proc/version.1",
                "chmod 0440 /data/misc/recovery/proc/version.1",
                "chown system log /data/misc/recovery/proc/version.1",
                "copy /proc/version /data/misc/recovery/proc/version",
                "chmod 0440 /data/misc/recovery/proc/version",
                "chown system log /data/misc/recovery/proc/version",
                "mkdir /data/misc/bluedroid 02770 bluetooth bluetooth",
                "chmod 0660 /data/misc/bluedroid/bt_config.conf",
                "chown bluetooth bluetooth /data/misc/bluedroid/bt_config.conf",
                "mkdir /data/misc/bluetooth 0770 bluetooth bluetooth",
                "mkdir /data/misc/bluetooth/logs 0770 bluetooth bluetooth",
                "mkdir /data/misc/keystore 0700 keystore keystore",
                "mkdir /data/misc/gatekeeper 0700 system system",
                "mkdir /data/misc/keychain 0771 system system",
                "mkdir /data/misc/net 0750 root shell",
                "mkdir /data/misc/radio 0770 system radio",
                "mkdir /data/misc/sms 0770 system radio",
                "mkdir /data/misc/carrierid 0770 system radio",
                "mkdir /data/misc/apns 0770 system radio",
                "mkdir /data/misc/zoneinfo 0775 system system",
                "mkdir /data/misc/network_watchlist 0774 system system",
                "mkdir /data/misc/textclassifier 0771 system system",
                "mkdir /data/misc/vpn 0770 system vpn",
                "mkdir /data/misc/shared_relro 0771 shared_relro shared_relro",
                "mkdir /data/misc/systemkeys 0700 system system",
                "mkdir /data/misc/wifi 0770 wifi wifi",
                "mkdir /data/misc/wifi/sockets 0770 wifi wifi",
                "mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi",
                "mkdir /data/misc/ethernet 0770 system system",
                "mkdir /data/misc/dhcp 0770 dhcp dhcp",
                "mkdir /data/misc/user 0771 root root",
                "mkdir /data/misc/perfprofd 0775 root root",
                "chmod 0660 /data/misc/wifi/wpa_supplicant.conf",
                "mkdir /data/local 0751 root root",
                "mkdir /data/misc/media 0700 media media",
                "mkdir /data/misc/audioserver 0700 audioserver audioserver",
                "mkdir /data/misc/cameraserver 0700 cameraserver cameraserver",
                "mkdir /data/misc/vold 0700 root root",
                "mkdir /data/misc/boottrace 0771 system shell",
                "mkdir /data/misc/update_engine 0700 root root",
                "mkdir /data/misc/update_engine_log 02750 root log",
                "mkdir /data/misc/trace 0700 root root",
                "mkdir /data/misc/wmtrace 0700 system system",
                "mkdir /data/misc/profiles 0771 system system",
                "mkdir /data/misc/profiles/cur 0771 system system",
                "mkdir /data/misc/profiles/ref 0771 system system",
                "mkdir /data/misc/profman 0770 system shell",
                "mkdir /data/misc/gcov 0770 root root",
                "mkdir /data/preloads 0775 system system",
                "mkdir /data/vendor 0771 root root",
                "mkdir /data/vendor_ce 0771 root root",
                "mkdir /data/vendor_de 0771 root root",
                "mkdir /data/vendor/hardware 0771 root root",
                "mkdir /data/local/tmp 0771 shell shell",
                "mkdir /data/local/traces 0777 shell shell",
                "mkdir /data/data 0771 system system",
                "mkdir /data/app-private 0771 system system",
                "mkdir /data/app-ephemeral 0771 system system",
                "mkdir /data/app-asec 0700 root root",
                "mkdir /data/app-lib 0771 system system",
                "mkdir /data/app 0771 system system",
                "mkdir /data/ota 0771 root root",
                "mkdir /data/ota_package 0770 system cache",
                "mkdir /data/resource-cache 0771 system system",
                "chown system system /data/resource-cache",
                "chmod 0771 /data/resource-cache",
                "mkdir /data/lost+found 0770 root root",
                "mkdir /data/drm 0770 drm drm",
                "mkdir /data/mediadrm 0770 mediadrm mediadrm",
                "mkdir /data/nfc 0770 nfc nfc",
                "mkdir /data/nfc/param 0770 nfc nfc",
                "mkdir /data/backup 0700 system system",
                "mkdir /data/ss 0700 system system",
                "mkdir /data/system 0775 system system",
                "mkdir /data/system/dropbox 0700 system system",
                "mkdir /data/system/heapdump 0700 system system",
                "mkdir /data/system/users 0775 system system",
                "mkdir /data/system_de 0770 system system",
                "mkdir /data/system_ce 0770 system system",
                "mkdir /data/misc_de 01771 system misc",
                "mkdir /data/misc_ce 01771 system misc",
                "mkdir /data/user 0711 system system",
                "mkdir /data/user_de 0711 system system",
                "symlink /data/data /data/user/0",
                "mkdir /data/media 0770 media_rw media_rw",
                "mkdir /data/media/obb 0770 media_rw media_rw",
                "mkdir /data/cache 0770 system cache",
                "mkdir /data/cache/recovery 0770 system cache",
                "mkdir /data/cache/backup_stage 0700 system system",
                "mkdir /data/cache/backup 0700 system system",
                "setparam sys.use_memfd false",
                "chown root system /dev/fscklogs/log",
                "chmod 0770 /dev/fscklogs/log"
            ]
        }

7.2 /system/etc/init/hdf_peripheral.cfg:修改 hdf_input、hdf_audio、hdf_disp等节点所属者为system
# drivers/peripheral/base/hdf_peripheral.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "chown system system /dev/hdf_disp",
                "chown system system /dev/hdf_input_host",
                "chown system system /dev/hdf_input_event1",
                "chown system system /dev/hdf_input_event2",
                "chown system system /dev/hdf_input_event3",
                "chown system system /dev/hdf_input_event4",
                "chown system system /dev/hdf_input_event5",
                "chown system system /dev/hdf_input_event6",
                "chown system system /dev/hdf_sensor_manager_ap",
                "chown system system /dev/hdf_misc_vibrator",
                "chown system system /dev/hdf_audio_render",
                "chown system system /dev/hdf_audio_capture",
                "chown system system /dev/hdf_audio_control",
                "chown system system /dev/hdf_audio_codec_dev0",
                "chown system system /dev/hdf_audio_smartpa_dev0",
                "chown system system /dev/hdf_dsoftbus"
            ]}]

7.3 /system/etc/init/hdf_devmgr.cfg:启动 hdf_devmgr 用户态驱动子系统服务
# drivers/adapter/uhdf2/manager/hdf_devmgr.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start hdf_devmgr"
            ]}],
    "services" : [{
            "name" : "hdf_devmgr",
            "path" : ["/system/bin/hdf_devmgr"],
            "uid" : "root",
            "gid" : ["system"]
        }]

7.4 /system/etc/init/accountmgr.cfg:启动accountmgr系统帐号组件服务
# base/account/os_account/services/accountmgr/accountmgr.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start accountmgr"
            ]}],
    "services" : [{
            "name" : "accountmgr",
            "path" : ["/system/bin/sa_main", "/system/profile/accountmgr.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"],
            "writepid" : [
                "/dev/cpuset/foreground/tasks",
                "/dev/stune/foreground/tasks",
                "/dev/blkio/foreground/tasks"
            ]}]}

7.5 /system/etc/init/huks_service.cfg:启动huks_service鸿蒙通用密钥库系统服务
# base/security/huks/services/huks_standard/huks_service.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start huks_service"
            ]}],
    "services" : [{
            "name" : "huks_service",
            "path" : ["/system/bin/sa_main", "/system/profile/huks_service.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        }

7.6 /system/etc/init/deviceauth_service.cfg:启动deviceauth_service设备认证模块服务
# base/security/deviceauth/frameworks/src/standard/deviceauth_service.cfg
{
  "jobs" : [{
      "name" : "post-fs-data",
      "cmds" : [
        "start deviceauth_service"
      ]}],
  "services" : [{
      "name" : "deviceauth_service",
      "path" : ["/system/bin/deviceauth_service"],
      "uid" : "system",
      "gid" : ["system", "shell"]
    }]}

7.7 /system/etc/init/faultloggerd32.cfg:启动32位系统崩溃临时日志管理模块

启动崩溃临时日志管理模块,日志保存在/data/log/faultlog/目录下

# base/hiviewdfx/faultloggerd/services/config/faultloggerd32.cfg
{
            "name" : "post-fs-data",
            "cmds" : [
                "mkdir /data/log/faultlog/ 0770 system system",
                "mkdir /data/log/faultlog/temp/ 0770 system system",
                "start faultloggerd"
            ] } ],
    "services" : [{
            "name" : "faultloggerd",
            "path" : ["/system/bin/faultloggerd"],
            "uid" : "root",
            "gid" : ["system", "log"],
            "writepid" : [
                "/dev/cpuset/system-background/tasks"
            ] } ]

7.8 /system/etc/init/faultloggerd64.cfg:启动64位系统崩溃临时日志管理模块
# base/hiviewdfx/faultloggerd/services/config/faultloggerd64.cfg
{
            "name" : "post-fs-data",
            "cmds" : [
                "mkdir /data/log/faultlog/ 0770 system system",
                "mkdir /data/log/faultlog/temp/ 0770 system system",
                "start faultloggerd"
            ]
        }
    ],
    "services" : [{
            "name" : "faultloggerd",
            "path" : ["/system/bin/faultloggerd"],
            "uid" : "root",
            "gid" : ["system", "log"],
            "writepid" : [
                "/dev/cpuset/system-background/tasks"
            ]

7.9 /system/etc/init/hilogd.cfg: 启动日志文件系统服务,保存在/data/log/
# base/hiviewdfx/hilog/services/hilogd/etc/hilogd.cfg
{
            "name" : "post-fs-data",
            "cmds" : [
                "mkdir /data/log/ 0770 system log",
                "mkdir /data/log/hilog/ 0750 logd log",
                "start hilogd"
            ] } ],
    "services" : [{
            "name" : "hilogd",
            "path" : ["/system/bin/hilogd"],
            "disabled" : 1,
            "uid" : "logd",
            "gid" : "log",
            "socket" : [
                "hilogInput dgram 0666 logd logd passcred",
                "hilogControl seqpacket 0600 logd logd false"
            ]

7.10 /system/etc/init/hiview.cfg: 启动终端设备维测服务集
# base/hiviewdfx/hiview/service/config/hiview.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "mkdir /data/log/ 0770 system log",
                "mkdir /data/log/faultlog/ 0770 system system",
                "mkdir /data/log/faultlog/temp/ 0770 system system",
                "mkdir /data/log/faultlog/faultlogger/ 0770 system system",
                "start hiview"
            ] }],
    "services" : [{
            "name" : "hiview",
            "path" : ["/system/bin/hiview"],
            "uid" : "system",
            "gid" : ["system", "log"],
            "writepid" : [
                "/dev/cpuset/system-background/tasks"
            ],
            "socket" : [
                "hisysevent dgram 0666 root system passcred"
            ]} ]

7.11 /system/etc/init/softbus_server.cfg: 启动布式软总线组件服务
# foundation/communication/dsoftbus/core/frame/standard/server/src/softbus_server.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start softbus_server"
            ]
        }
    ],
    "services" : [{
            "name" : "softbus_server",
            "path" : ["/system/bin/sa_main", "/system/profile/softbus_server.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        }
    ]
}

7.12 /system/etc/init/wifi_standard.cfg: 启动wifi 无线局域网组件
# foundation/communication/wifi/services/wifi_standard/etc/init/wifi_standard.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "mkdir /data/dhcp",
                "start wifi_manager_service"
            ]}],
    "services" : [{
            "name" : "wifi_manager_service",
            "path" : ["/system/bin/sa_main", "/system/profile/wifi_manager_service.xml"],
            "uid" : "root",
            "gid" : ["root", "shell"]
        }]}

7.13 /system/etc/init/wifi_hal_service.cfg: 启动wifi hal service
# foundation/communication/wifi/services/wifi_standard/wifi_hal/etc/init/wifi_hal_service.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start wifi_hal_service"
            ] }],
    "services" : [{
            "name" : "wifi_hal_service",
            "path" : ["/system/bin/wifi_hal_service"],
            "uid" : "root",
            "gid" : ["root", "shell"]
        }]}

7.14 /system/etc/init/bluetooth_service.cfg: 启动蓝牙服务组件
# foundation/communication/bluetooth/services/bluetooth_standard/etc/init/bluetooth_service.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "mkdir /data/bluetooth",
                "start bluetooth_service"
            ] }],
    "services" : [{
            "name" : "bluetooth_service",
            "path" : ["/system/bin/sa_main", "/system/profile/bluetooth_service.xml"],
            "uid" : "root",
            "gid" : ["root", "shell"]
        }]}

7.15 /system/etc/init/pulseaudio.cfg: 启动音频组件
# foundation/multimedia/audio_standard/services/etc/pulseaudio.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "rm /data/data/.pulse_dir/pid",
                "mkdir /data/data/.pulse_dir",
                "chmod 777 /data/data/.pulse_dir",
                "chown system shell /data/data/.pulse_dir",
                "export PULSE_STATE_PATH /data/data/.pulse_dir",
                "export PULSE_RUNTIME_PATH /data/data/.pulse_dir",
                "start pulseaudio",
                "exec /system/bin/sleep 4",
                "trigger audio_policy_start"
            ]} ],
    "services" : [{
            "name" : "pulseaudio",
            "path" : ["/system/bin/sa_main", "/system/profile/pulseaudio.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"],
            "disabled" : 1
        } ]}

7.16 /system/etc/init/distributedsched.cfg: 启动分布式任务调度模块
# foundation/distributedschedule/dmsfwk/etc/init/distributedsched.cfg
{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start distributedsched"
            ]}],
    "services" : [{
            "name" : "distributedsched",
            "path" : ["/system/bin/sa_main", "/system/profile/distributedsched.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        }]



八、post-init 第六阶段之 load_persist_props_action 阶段: 加载persist属性等参数 8.1 /etc/init.cfg
# base/startup/init_lite/services/etc/init.cfg
{
            "name" : "load_persist_props_action",
            "cmds" : [
                "load_persist_params load_persist_params"
            ]
        }



九、post-init 第七阶段之 firmware_mounts_complete 阶段:删除/dev/.booting 9.1 /etc/init.cfg
# base/startup/init_lite/services/etc/init.cfg
{
            "name" : "firmware_mounts_complete",
            "cmds" : [
                "rm /dev/.booting"
            ]}



十、post-init 第八阶段之 early-boot 阶段:无任务

在所有的cfg,没有配置这一阶段的代码。



十一、post-init 第九阶段之 boot 阶段:初始化USB驱动、启动电话、时间、输入法、升级服务引擎、hdcd、媒体库组件、相机组件、媒体组件、分布式数据等服务 11.1 /etc/init.cfg: 初始化/sys 目录下的相关节点权限
# base/startup/init_lite/services/etc/init.cfg
{
            "name" : "boot",
            "cmds" : [
                "write /proc/sys/net/core/xfrm_acq_expires 3600",
                "write /proc/sys/vm/overcommit_memory 1",
                "write /proc/sys/vm/min_free_order_shift 4",
                "chown root system /sys/module/lowmemorykiller/parameters/adj",
                "chmod 0664 /sys/module/lowmemorykiller/parameters/adj",
                "chown root system /sys/module/lowmemorykiller/parameters/minfree",
                "chmod 0664 /sys/module/lowmemorykiller/parameters/minfree",
                "chown root system /sys/block/zram0/idle",
                "chmod 0664 /sys/block/zram0/idle",
                "chown root system /sys/block/zram0/writeback",
                "chmod 0664 /sys/block/zram0/writeback",
                "write /proc/sys/vm/dirty_expire_centisecs 200",
                "write /proc/sys/vm/dirty_background_ratio 5",
                "write /sys/fs/f2fs/${dev.mnt.blk.data}/cp_interval 200",
                "chown radio system /sys/android_power/state",
                "chown radio system /sys/android_power/request_state",
                "chown radio system /sys/android_power/acquire_full_wake_lock",
                "chown radio system /sys/android_power/acquire_partial_wake_lock",
                "chown radio system /sys/android_power/release_wake_lock",
                "chown system system /sys/power/autosleep",
                "chown radio wakelock /sys/power/wake_lock",
                "chown radio wakelock /sys/power/wake_unlock",
                "chmod 0660 /sys/power/wake_lock",
                "chmod 0660 /sys/power/wake_unlock",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_slack",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_slack",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/target_loads",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/target_loads",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/boost",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boost",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/input_boost",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration",
                "chown system system /sys/devices/system/cpu/cpufreq/interactive/io_is_busy",
                "chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/io_is_busy",
                "chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
                "chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
                "chown system system /sys/class/leds/vibrator/trigger",
                "chown system system /sys/class/leds/vibrator/activate",
                "chown system system /sys/class/leds/vibrator/brightness",
                "chown system system /sys/class/leds/vibrator/duration",
                "chown system system /sys/class/leds/vibrator/state",
                "chown system system /sys/class/timed_output/vibrator/enable",
                "chown system system /sys/class/leds/keyboard-backlight/brightness",
                "chown system system /sys/class/leds/lcd-backlight/brightness",
                "chown system system /sys/class/leds/button-backlight/brightness",
                "chown system system /sys/class/leds/jogball-backlight/brightness",
                "chown system system /sys/class/leds/red/brightness",
                "chown system system /sys/class/leds/green/brightness",
                "chown system system /sys/class/leds/blue/brightness",
                "chown system system /sys/class/leds/red/device/grpfreq",
                "chown system system /sys/class/leds/red/device/grppwm",
                "chown system system /sys/class/leds/red/device/blink",
                "chown system system /sys/module/sco/parameters/disable_esco",
                "chown system system /sys/kernel/ipv4/tcp_wmem_min",
                "chown system system /sys/kernel/ipv4/tcp_wmem_def",
                "chown system system /sys/kernel/ipv4/tcp_wmem_max",
                "chown system system /sys/kernel/ipv4/tcp_rmem_min",
                "chown system system /sys/kernel/ipv4/tcp_rmem_def",
                "chown system system /sys/kernel/ipv4/tcp_rmem_max",
                "chown root radio /proc/cmdline",
                "setparam net.tcp.default_init_rwnd 60"

11.2 /etc/init.Hi3516DV300.cfg: 初始化graphics图形相关节点权限
# device/hisilicon/hi3516dv300/build/rootfs/init.Hi3516DV300.cfg
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "chmod 777 /dev/ttyAMA2",
                "chmod 775 /sys/class/rfkill/rfkill0/state",
                "chmod 777 /dev/rtkbt_dev",
                "chmod 0440 /proc/interrupts",
                "chmod 0440 /proc/stat",
                "chmod 0640 /dev/xt_qtaguid",
                "chmod 0660 /proc/net/xt_qtaguid/ctrl",
                "chmod 0440 /proc/net/xt_qtaguid/stats",
                "chmod 666 /dev/mali0",
                "chown system graphics /dev/mali0",
                "chown system graphics /dev/graphics/fb0",
                "chmod 666 /dev/ion",
                "chown system system /dev/ion"

11.3 /etc/init.Hi3516DV300.usb.cfg: 挂载configfs文件系统、usb functions驱动
  1. 挂载configfs文件系统
  2. 初始化 usb_gadget 相关信息,如pid、vid等
  3. 挂载usb 相关驱动到/dev/usb-ffs/hdc
# device/hisilicon/hi3516dv300/build/rootfs/init.Hi3516DV300.usb.cfg
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "mkdir /dev/usb-ffs 0770 shell shell",
                "mkdir /dev/usb-ffs/hdc 0770 shell shell",
                "mount configfs none /config",						// 挂载configfs文件系统
                "mkdir /config/usb_gadget/g1 0770 shell shell",		// 初始化 usb_gadget 相关信息,如pid、vid等
                "write /config/usb_gadget/g1/idVendor 0x12D1",
                "write /config/usb_gadget/g1/idProduct 0x5000",
                "write /config/usb_gadget/g1/os_desc/use 1",
                "write /config/usb_gadget/g1/bcdDevice 0x0223",
                "write /config/usb_gadget/g1/bcdUSB 0x0200",
                "mkdir /config/usb_gadget/g1/strings/0x409 0770",
                "copy /sys/block/mmcblk0/device/cid /config/usb_gadget/g1/strings/0x409/serialnumber",
                "write /config/usb_gadget/g1/strings/0x409/manufacturer HISILICON",
                "write /config/usb_gadget/g1/strings/0x409/product "HDC Device"",
                "mkdir /config/usb_gadget/g1/functions/ffs.hdc",
                "mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell",
                "mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell",
                "write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1",
                "write /config/usb_gadget/g1/os_desc/qw_sign MSFT100",
                "write /config/usb_gadget/g1/configs/b.1/MaxPower 500",
                "symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1",
                "mount functionfs hdc /dev/usb-ffs/hdc uid=2000,gid=2000",	 // 挂载`usb` 相关驱动到`/dev/usb-ffs/hdc`
                "setparam sys.usb.configfs 1",
                "setparam sys.usb.controller 100e0000.hidwc3_0"
            ]}, {
            "name" : "param:sys.usb.config=none && param:sys.usb.configfs=1",
            "condition" : "sys.usb.config=none && sys.usb.configfs=1",
            "cmds" : [
                "write /config/usb_gadget/g1/os_desc/use 0",
                "setparam sys.usb.ffs.ready 0"
            ]}, {
            "name" : "param:init.svc.hdcd=stopped",
            "condition" : "init.svc.hdcd=stopped",
            "cmds" : [
                "setparam sys.usb.ffs.ready 0"
            ] }, {
            "name" : "param:sys.usb.config=hdc && param:sys.usb.configfs=1",
            "condition" : "sys.usb.config=hdc && sys.usb.configfs=1",
            "cmds" : [
                "write /config/usb_gadget/g1/idProduct 0x5000",
                "write /config/usb_gadget/g1/os_desc/use 1"
            ] } ]}

11.4 /system/etc/init/telephony.cfg: 启动电话核心服务模块
# base/telephony/core_service/etc/init/telephony.cfg
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "exec /system/bin/sleep 4",
                "start telephony_sa"
            ]} ],
    "services" : [{
            "name" : "telephony_sa",
            "path" : ["/system/bin/sa_main", "/system/profile/telephony.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        } ]}

11.5 /system/etc/init/timeservice.cfg: 启动时间服务
# base/miscservices/time/etc/init/timeservice.cfg   
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start time_service"
            ]}],
    "services" : [{
            "name" : "time_service",
            "path" : ["/system/bin/sa_main", "/system/profile/time_service.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"],
            "caps" : ["SYS_TIME", "WAKE_ALARM"]
        }

11.6 /system/etc/init/inputmethodservice.cfg: 启动输入法服务
# base/miscservices/inputmethod/etc/init/inputmethodservice.cfg 
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start inputmethod_service"
            ] } ],
    "services" : [{
            "name" : "inputmethod_service",
            "path" : ["/system/bin/sa_main", "/system/profile/inputmethod_service.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"],
            "caps" : ["SYS_TIME"]
        } ]}

11.7 /system/etc/init/updater_sa.cfg: 启动升级服务器引擎,查询并下载升级包
# base/update/updateservice/engine/etc/updater_sa.cfg 
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start updater_sa"
            ]}],
    "services" : [{
            "name" : "updater_sa",
            "path" : ["/system/bin/sa_main", "/system/profile/updater_sa.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        }]}

11.8 /system/etc/init/init.usb.cfg: 启动hdcd服务,用于调试系统,等通与安卓的adb
# base/startup/init_lite/services/etc/init.usb.cfg   
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "setparam sys.usb.configfs 0"
            ]
        }, {
            "name" : "boot && param:persist.sys.usb.config=*",
            "condition" : "boot && persist.sys.usb.config=*",
            "cmds" : [
                "setparam sys.usb.config ${persist.sys.usb.config}"
            ]
        }, {
            "name" : "param:sys.usb.config=none && param:sys.usb.configfs=0",
            "condition" : "sys.usb.config=none && sys.usb.configfs=0",
            "cmds" : [
                "stop hdcd"
            ]
        }, {
            "name" : "param:sys.usb.config=hdc && param:sys.usb.configfs=0",
            "condition" : "sys.usb.config=hdc && sys.usb.configfs=0",
            "cmds" : [
                "start hdcd"
            ] }],
    "services" : [{
            "name" : "hdcd",
            "path" : ["/system/bin/hdcd"],
            "socket" : [
                "hdcd seqpacket 660 system system false"
            ],
            "disabled" : 1
        }]}

11.9 /system/etc/init/foundation.cfg: 启动foundation服务
# foundation/appexecfwk/standard/sa_profile/foundation.cfg 
{
    "jobs" : [{
    		"name" : "boot",
            "cmds" : [
                "chown radio system /sys/power/wake_lock",
                "chown radio system /sys/power/wake_unlock",
                "chmod 0664 /sys/power/wakeup_count",
                "start foundation"
            ]}],
    "services" : [{
            "name" : "foundation",
            "path" : ["/system/bin/sa_main", "/system/profile/foundation.xml"],
            "importance" : -20,
            "uid" : "system",
            "gid" : ["system"],
            "caps" : ["SYS_PTRACE", "KILL"]
        }

11.10 /system/etc/init/medialibrary_service.cfg: 启动媒体库组件
# foundation/multimedia/medialibrary_standard/services/etc/medialibrary_service.cfg 
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start medialibrary_service"
            ]
        }
    ],
    "services" : [{
            "name" : "medialibrary_service",
            "path" : ["/system/bin/sa_main", "/system/profile/medialibrary_service.xml"]
        }
    ]
}

11.11 /system/etc/init/camera_service.cfg: 启动相机组件
# foundation/multimedia/camera_standard/services/etc/camera_service.cfg 
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start camera_service"
            ]} ],
    "services" : [{
            "name" : "camera_service",
            "path" : ["/system/bin/sa_main", "/system/profile/camera_service.xml"],
            "uid" : "cameraserver",
            "gid" : ["system", "shell"]
        }]}

11.12 /system/etc/init/media_service.cfg: 启动媒体组件
# foundation/multimedia/media_standard/services/etc/media_service.cfg
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start media_service"
            ] } ],
    "services" : [{
            "name" : "media_service",
            "path" : ["/system/bin/sa_main", "/system/profile/media_service.xml"],
            "uid" : "system",
            "gid" : ["media_rw", "system"]
        }]

11.13 /system/etc/init/distributed_data.cfg: 启动分布式数据服务
# foundation/distributeddatamgr/distributeddatamgr/services/distributeddataservice/app/distributed_data.cfg 
{
    "jobs":[{
        "name" : "boot",
        "cmds" : [
            "start distributeddata"
        ] }
    ],
   "services":[{
        "name" : "distributeddata",
        "path" : ["/system/bin/sa_main","/system/profile/distributeddata.xml"],
        "caps" : ["DAC_READ_SEARCH"],
        "uid" : "system",
        "gid" : ["system","shell","readproc"],
        "writepid":[
            "/dev/cpuset/foreground/tasks",
            "/dev/stune/foreground/tasks",
            "/dev/blkio/foreground/tasks"
        ]}]

好,到此位置,整个鸿蒙系统的启动流程算是分析完了,
不过这样的启动流程还不够直观,接下来,我打算花时间,把这个启动流程以图的形式画出来,这样就会更加清晰直观。
敬请期待吧,周末愉快!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号