|
本帖最后由 gzm55 于 2024-12-24 11:12 编辑
之前帖子提到可以借用插件调起流程, 实现用户级别启动脚本的持久化.
帖子本身和后面的回复提到两种替换方式, 一个是借用 gamespeederv3 插件, 另一个是借用 opmaintainv3 插件的 ommonitord 检测工具. 但是当我们需要优化插件, 甚至停用前面提到的电信插件时, 也希望保持启动功能不被影响.
于是重头梳理了一下目前测试光猫(中兴, 电信系统)的用户阶段启动流程.
根据这个流程我们可以仅利用电信自带的 saf lxc 管理模块和固件自带的 openwrt 实现灵活的启动方式, 同时按需启动所需自带插件.
用户空间启动流程梳理
主要分析测试光猫, 还是中兴设备, 电信的系统, 只要使用 saf 管理模块的应该大同小异. 需要提前 telnet 拿到 shell.
- 物理设备固件/kernel启动
- 启动 init (busybox), pid=1 进程
- init 运行 /etc/inittab 里面的初始化行, 按照电信的传统, 指向 /etc/init.d/rcS
- /etc/init.d/rcS 会调用 /etc/rc.d/S* 脚本, 主要是启动设备, 安装驱动, kernel mod 等, (比较老的电信天翼设备是都写在 rcS 中的)
- rcS 最后调用了 /sbin/pc 程序 (网上有一些分析是启动了 lxc 脚本, 但是我这里的系统, 已经不再使用脚本, 而是一个独立程序)
- pc 程序应该 listen 了 socket, 帮忙启动后台程序, 同时本身也启动了大量 daemon, 如 telnet, http, cspd, dbus 等
- cspd 一方面负责解析 user.xml, 响应sendcmd 命令等, 同时 cspd 也负责启动 saf 系统, 即电信改造的 lxc 管理模块
- cspd 向 pc 请求执行 saf A B C, 即指定主从两个 rootfs分区和一个插件分区, rootfs 内是电信改造过的 openwrt, 可以适配 saf 模块
- openwrt 启动容器内 1 号进程 procd, 后面是标准的 opewrt 启动流程
- procd 调用 rcS, 按顺序启动/etc/rc.d/ 下注册的服务启动脚本, 其中包括 appmgr, cloudclient, virtual**client 等电信组件, 其中 appmgr 管理了光猫页面上显示的插件
- appmgr 按照配置配置 /etc/config/appmgr 启动插件, 每个插件是一个 rootless lxc in lxc, 如前文提到的gamespeederv3, 此时可以通过 telnet 访问物理系统
- opmaintainv3 插件用来检测 wifi 状态和其他物理资源状态, 通过 saf 框架直接在 host 系统直接启动了ommonitord 常驻程序, 通过ommonitord 实现对物理系统的检测
关闭插件后的启动脚本
常见插件作用
测试了一部分插件停用效果, 结合论坛其他人的说明做了一些整理, 有一些还需要关闭后长时间看看效果.
- inter_conndv3: 可能时信息交换用, appmgr 本身依赖这个插件获取信息, 无法关闭, stop 后, 下次重启会被 appmgr 拉起
- gamespeederv3: 游戏加速, 可能和 virtual**client 有一些交互
- b01odmv3: 电信天翼app 可以从里面获取信息, 非电信用户应该可以关掉
- extccv3: 应该与 app 中远程配置路由器有关
- opmaintainv3: 获取设备资源和网络设备状态
- xrobotv3: 好像是数据收集的
- redictv3: 重定向功能, 会创建两张 iptables chain: ct_redict_dnat, ct_redict_reject, 还不太清楚具体添加什么规则
- u01v3: xrobotv3 依赖这个插件, 不清楚具体作用
- appmgr: openwrt 原生服务, 前面插件的管理器
- cloudclient: openwrt 原生服务, 可能是电信 app 主要功能入口, 与 web 状态页面里面一些远程管理信息有关
- virtual**client: openwrt 原生服务, 可能和gamespeederv3 有关, 不清楚其他作用
|
|