init和procd进程都来源于procd程序编译(busybox的没有编译)
init最终会通过execv执行procd,这样procd就直接代替了init进程
procd会调用解释/etc/inittab文件并执行初始化动作,其中最重要的一步是sysinit(::sysinit:/etc/init.d/rcS S boot)
sysinit内部实现最终会依次调用/etc/rc.d/*下的脚本
S00sysfixtime:处理系统墙上时间
S00wifi_fw_mount:WIFI_FW挂载
S08boot-ftm:wifi工厂测试模式
S10boot:最重要的初始化文件,主要的工作再细分为 -
文件系统挂载、基本目录创建
内核模块加载
默认配置文件/etc/config/*创建 - (通过/etc/uci-defaults/*目录下的脚本创建【其中最重要的脚本之一在/lib/functions/uci-defaults.sh】,只做一次)
reload_config通过对比配置文件md5值触发配置重新生效 - reload通过ubus直接与procd通信,procd接收到后会实现生效部分
S15qca-hostapd、S15qca-wpa-supplicant启动wifi相关进程
S19firewall防火墙加载
...
本身这些脚本文件都各自设置了一些特殊的环境变量,用于标识是否由procd统一管理、以及触发器的注册等,这些比较复杂,后续再逐一的进行了解
OpenWRT procd启动过程了解
最新推荐文章于 2024-03-08 15:55:54 发布