首先执行job,如果开发者的进程在启动之前需要首先执行一些操作(例如创建文件夹),可以把操作放到pre-init中先执行。一般pre-init阶段主要是为后面启动服务做准备的,比如挂载目录,设置权限,启动uevent、watchdog等,uevent主要是有些服务需要响应插拔事件才会被拉起。
执行job介绍:
| job名 |
说明 |
| pre-init |
最先执行的job,如果开发者的进程在启动之前需要首先执行一些操作(例如创建文件夹),可以把操作放到pre-init中先执行。 |
| init |
中间执行的job,例如服务启动。 |
| post-init |
最后被执行的job,如果开发者的进程在启动完成之后需要有一些处理(如驱动初始化后再挂载设备),可以把这类操作放到该job执行。单个job最多支持30条命令(当前仅支持start/mkdir/chmod/chown/mount/loadcfg),命令名称和后面的参数(参数长度≤128字节)之间有且只能有一个空格。 |
pre-init,init,post-init 除了/etc/init.cfg 里定义的jobs外,也包括其他服务配置的jobs。也就是说其他服务进程也可以配置pre-init,init,post-init。
执行流程:

图为一次执行的顺序是pre-init,init,启动所有boot服务,post-init,所有Normal 服务。
pre-init
主要是启动ueventd,watch_dog, 其他的就是设置权限,挂载/data 和 硬件相关的挂载目录。具体看下面注释:
{
"name" : "pre-init",
"cmds" : [
"write /proc/sys/kernel/sysrq 0",
##1、 写为0表示 关闭sysrq,1表示启动。 sysrq 是系统请求,在键盘上对应PrintScreen键。
## 这里是关闭了所有的请求。
"mkdir /acct/uid",
"chown root system /dev/memcg/memory.pressure_level",
"chmod 0040 /dev/memcg/memory.pressure_level",
"mkdir /dev/memcg/apps/ 0755 system system",
"mkdir /dev/memcg/system 0550 system system",
##2、 设置内存压力相关的权限配置。
"start ueventd", ##3、 启动ueventd 服务
"start watchdog_service", ##4、 启动看门狗
"mkdir /data",
"mount_fstab /vendor/etc/fstab.${ohos.boot.hardware}", ##5、 挂载vendor分区,跟硬件产品相关
"chown system system /data", ## 6、 为userdata 分区 会挂载在/data 目录做准备
"chmod 0771 /data", ## 可读可写可执行,其他用户只读
"mkdir /data/service 0711 root root",
"mkdir /data/service/el0 0711 root root",
"load_persist_params ", ##7、 加载常驻参数,类似 persist.sys.usb.config=hdc
"chown access_token access_token /dev/access_token_id", ##8、 token id
"chmod 0666 /dev/access_token_id"
]
}
init
init 是触发所有配置文件中的init字段的命令的。
- /etc/init.cfg
在init.cfg加载了"/etc/init.usb.cfg", "/etc/init.usb.configfs.cfg", /vendor/etc/init.${ohos.boot.hardware}.cfg"这几个config,会把它们的信息全部整合进来。
可以看出,在 init.cfg 中,主要是做了如下事情:
创建相关的目录,修改各设备节点的权限,配置一些参数。 启动 lo 回环网卡,配置hostname为localhost, domainname为localdomain。
{
"import" : [
"/etc/init.usb.cfg",
"/etc/init.usb.configfs.cfg",
"/vendor/etc/init.${ohos.boot.hardware}.cfg"
],
],
"jobs" : [ {
"name" : "init",
"cmds" : [
"copy /proc/cmdline /dev/urandom",
"copy /system/etc/prop.default /dev/urandom",
"symlink /proc/self/fd/0 /dev/stdin",
"symlink /proc/self/fd/1 /dev/stdout",
"symlink /proc/self/fd/2 /dev/stderr",
"symlink /system/bin /bin",
"symlink /system/etc /etc",
"symlink /sys/kernel/debug /d",
"symlink /system/vendor /vendor",
"mkdir /dev/stune/foreground",
"mkdir /dev/stune/background",
"mkdir /dev/stune/top-app",
"mkdir /dev/stune/rt",
"chown system system /dev/stune",
"chown system system /dev/stune/foreground",
"chown system system /dev/stune/background",
"chown system system /dev/stune/top-app",
"chown system system /dev/stune/rt",
"chown system system /dev/stune/tasks",
"chown system system /dev/stune/foreground/tasks",
"chown system system /dev/stune/background/tasks",
"chown system system /dev/stune/top-app/tasks",
"chown system system /dev/stune/rt/tasks",
"chmod 0664 /dev/stune/tasks",
"chmod 0664 /dev/stune/foreground/tasks",
"chmod 0664 /dev/stune/background/tasks",
"chmod 0664 /dev/stune/top-app/tasks",
"chmod 0664 /dev/stune/rt/tasks",
"mkdir /dev/blkio/background",
"chown system system /dev/blkio",
"chown system system /dev/blkio/background",
"chown system system /dev/blkio/tasks",
"chown system system /dev/blkio/background/tasks",
"chmod 0664 /dev/blkio/tasks",
"chmod 0664 /dev/blkio/background/tasks",
"write /dev/blkio/blkio.weight 1000",
"write /dev/blkio/background/blkio.weight 500",
"write /dev/blkio/blkio.group_idle 0",
"write /dev/blkio/background/blkio.group_idle 0",
"mount configfs none /config nodev noexec nosuid",
"chmod 0770 /config/sdcardfs",
"chown system package_info /config/sdcardfs",
"mkdir /mnt/secure 0700 root root",
"mkdir /mnt/secure/asec 0700 root root",
"mkdir /mnt/asec 0755 root system",
"mkdir /mnt/obb 0755 root system",
"mkdir /mnt/media_rw 0750 root media_rw",
"mkdir /mnt/user 0755 root root",
"mkdir /mnt/user/0 0755 root root",
"mkdir /mnt/expand 0771 system system",
"mkdir /mnt/appfuse 0711 root root",
"mkdir /mnt/runtime 0700 root root",
"mkdir /mnt/runtime/default 0755 root root",
"mkdir /mnt/runtime/default/self 0755 root root",
"mkdir /mnt/runtime/read 0755 root root",
"mkdir /mnt/runtime/read/self 0755 root root",
"mkdir /mnt/runtime/write 0755 root root",
"mkdir /mnt/runtime/write/self 0755 root root",
"mkdir /mnt/runtime/full 0755 root root",
"mkdir /mnt/runtime/full/self 0755 root root",
"symlink /storage/self/primary /sdcard",
"symlink /storage/self/primary /mnt/sdcard",
"symlink /mnt/user/0/primary /mnt/runtime/default/self/primary",
"write /proc/sys/kernel/panic_on_oops 1",
"write /proc/sys/kernel/hung_task_timeout_secs 0",
"write /proc/cpu/alignment 4",
"write /proc/sys/kernel/sched_tunable_scaling 0",
"write /proc/sys/kernel/sched_latency_ns 10000000",
"write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000",
"write /proc/sys/kernel/sched_child_runs_first 0",
"write /proc/sys/kernel/randomize_va_space 2",
"write /proc/sys/vm/mmap_min_addr 32768",
"write /proc/sys/net/ipv4/ping_group_range 0 2147483647",
"write /proc/sys/net/unix/max_dgram_qlen 600",
"write /proc/sys/kernel/sched_rt_runtime_us 950000",
"write /proc/sys/kernel/sched_rt_period_us 1000000",
"write /proc/sys/net/core/rmem_max 262144",
"write /proc/sys/net/core/wmem_max 262144",
"write /proc/sys/net/ipv4/fwmark_reflect 1",
"write /proc/sys/net/ipv6/fwmark_reflect 1",
"write /proc/sys/net/ipv4/tcp_fwmark_accept 1",
"write /proc/sys/net/ipv4/conf/all/accept_redirects 0",
"write /proc/sys/net/ipv6/conf/all/accept_redirects 0",
"chmod 0400 /proc/net/fib_trie",
"chown system system /dev/cpuctl",
"chown system system /dev/cpuctl/tasks",
"chmod 0666 /dev/cpuctl/tasks",
"write /dev/cpuctl/cpu.rt_period_us 1000000",
"write /dev/cpuctl/cpu.rt_runtime_us 950000",
"mkdir /dev/cpuset/foreground",
"copy /dev/cpuset/cpus /dev/cpuset/foreground/cpus",
"copy /dev/cpuset/mems /dev/cpuset/foreground/mems",
"mkdir /dev/cpuset/background",
"copy /dev/cpuset/cpus /dev/cpuset/background/cpus",
"copy /dev/cpuset/mems /dev/cpuset/background/mems",
"mkdir /dev/cpuset/system-background",
"copy /dev/cpuset/cpus /dev/cpuset/system-background/cpus",
"copy /dev/cpuset/mems /dev/cpuset/system-background/mems",
"mkdir /dev/cpuset/restricted",
"copy /dev/cpuset/cpus /dev/cpuset/restricted/cpus",
"copy /dev/cpuset/mems /dev/cpuset/restricted/mems",
"mkdir /dev/cpuset/top-app",
"copy /dev/cpuset/cpus /dev/cpuset/top-app/cpus",
"copy /dev/cpuset/mems /dev/cpuset/top-app/mems",
"chown system system /dev/cpuset",
"chown system system /dev/cpuset/foreground",
"chown system system /dev/cpuset/background",
"chown system system /dev/cpuset/system-background",
"chown system system /dev/cpuset/top-app",
"chown system system /dev/cpuset/restricted",
"chown system system /dev/cpuset/tasks",
"chown system system /dev/cpuset/foreground/tasks",
"chown system system /dev/cpuset/background/tasks",
"chown system system /dev/cpuset/system-background/tasks",
"chown system system /dev/cpuset/top-app/tasks",
"chown system system /dev/cpuset/restricted/tasks",
"chmod 0775 /dev/cpuset/system-background",
"chmod 0664 /dev/cpuset/foreground/tasks",
"chmod 0664 /dev/cpuset/background/tasks",
"chmod 0664 /dev/cpuset/system-background/tasks",
"chmod 0664 /dev/cpuset/top-app/tasks",
"chmod 0664 /dev/cpuset/restricted/tasks",
"chmod 0664 /dev/cpuset/tasks",
"chown system system /proc/pressure/memory",
"chmod 0664 /proc/pressure/memory",
"chown root net_bw_acct /proc/net/xt_qtaguid/ctrl",
"chown root net_bw_stats /proc/net/xt_qtaguid/stats",
"chmod 0644 /dev/xt_qtaguid",
"chown root root /dev/cg2_bpf",
"chmod 0600 /dev/cg2_bpf",
"mount bpf bpf /sys/fs/bpf nodev noexec nosuid",
"mkdir /dev/fscklogs 0770 root system",
"mount pstore pstore /sys/fs/pstore nodev noexec nosuid",
"chown system log /sys/fs/pstore",
"chmod 0550 /sys/fs/pstore",
"chown system log /sys/fs/pstore/console-ramoops",
"chmod 0440 /sys/fs/pstore/console-ramoops",
"chown system log /sys/fs/pstore/console-ramoops-0",
"chmod 0440 /sys/fs/pstore/console-ramoops-0",
"chown system log /sys/fs/pstore/pmsg-ramoops-0",
"chmod 0440 /sys/fs/pstore/pmsg-ramoops-0",
"write /proc/sys/abi/swp 1",
"symlink /proc/self/fd /dev/fd",
"export DOWNLOAD_CACHE /data/cache",
"setrlimit RLIMIT_NICE 40 40",
"setrlimit RLIMIT_NOFILE 32768 32768",
"write /sys/class/leds/vibrator/trigger transient",
"write /dev/cpu_variant:${ro.bionic.arch} ${ro.bionic.cpu_variant}",
"chmod 0444 /dev/cpu_variant:${ro.bionic.arch}",
"write /dev/cpu_variant:${ro.bionic.2nd_arch} ${ro.bionic.2nd_cpu_variant}",
"chmod 0444 /dev/cpu_variant:${ro.bionic.2nd_arch}",
"chown system system /sys/power/state",
"chown system system /sys/power/wakeup_count",
"chmod 0660 /sys/power/state",
"ifup lo",
"hostname localhost",
"domainname localdomain"
]
}
- /vendor/etc/init.${ohos.boot.hardware}.cfg
主要是跟硬件产品相关的配置,这里看hi3516dv300, 可见主要是挂载了debugfs(调试子系统),修改设备角色为 peripheral,即设备。
{
"import" : [
"init.${ro.hardware}.usb.cfg"
],
"jobs" : [ {
"name" : "init",
"cmds" : [
"mount debugfs /sys/kernel/debug /sys/kernel/debug mode=755",
"write /sys/kernel/debug/hisi_inno_phy/role peripheral"
]
}
]
}
- foundation.cfg 用户程序框架子系统
挂载cgroup到/dev/memcg主要做了如下事情:
挂载 cgroup 的memory、cpuset、cpu、freezer这几个到 /dev/memcg 目录下 cgroups子系统: Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等),其最早的名称为进程容器(process containers)。
cgroups可控制的子系统主要如下: cpu 子系统,主要限制进程的 cpu 使用率。 cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。 cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。 memory 子系统,可以限制进程的 memory 使用量。 blkio 子系统,可以限制进程的块设备 io。 devices 子系统,可以控制进程能够访问某些设备。 net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。 net_prio — 这个子系统用来设计网络流量的优先级 freezer 子系统,可以挂起或者恢复 cgroups 中的进程。 ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。
{
"jobs" : [{
"name" : "init",
"cmds" : [
"mkdir /dev/memcg",
"mount cgroup none /dev/memcg memory",
"chown system system /dev/memcg",
"chown system system /dev/memcg/tasks",
"chown system system /dev/memcg/memory.oom_control",
"chown system system /dev/memcg/cgroup.event_control",
"chown system system /dev/memcg/memory.pressure_level",
"chmod 0755 /dev/memcg",

本文详细介绍了设备从pre-init到post-fs-data阶段的启动流程,涉及初始化目录、权限设置、服务启动、挂载文件系统、加载内核驱动等多个环节。在pre-init阶段,启动ueventd、watchdog服务,创建目录并挂载vendor分区。init阶段,启动lo回环网卡,设置hostname。post-init阶段,触发各种fs阶段的命令,如early-fs、fs、post-fs、late-fs和post-fs-data。在这些阶段中,分别启动了vold、hdf_devmgr、hdf_host、inputmethodservice、updater_sa、timeservice、telephony等服务,并进行了权限和模块的配置。整个启动过程中,涉及到的硬件相关配置、系统服务和框架组件的初始化是关键步骤。
最低0.47元/天 解锁文章
2439

被折叠的 条评论
为什么被折叠?



