Linux开发板启动流程梳理 📅 2026/8/6 13:02:47 系统里的启动配置主要分为“内核启动后第一个进程 init 怎么干”、“系统服务脚本”和“用户自定义脚本”三层。以下是完整的启动“地图”️ 开发板启动流程全览BusyBox 版1. 总指挥/etc/inittab启动入口这是 init 进程PID1读取的第一个配置文件它是整个启动的“总导演”。您添加的行::sysinit:/etc/rc.local—— 这是系统执行第一个用户自定义脚本的入口。默认内容通常里面还会有一行::sysinit:/etc/init.d/rcS。如果存在它会去执行/etc/init.d/rcS脚本系统基础初始化。2. 系统通用初始化/etc/init.d/rcS可能不存在或存在如果/etc/inittab调用了它它会负责挂载/proc、/sys、设置主机名、启动 udev 等底层操作。如果这个文件不存在这些基础操作则由 init 默认逻辑处理。3. 服务脚本大本营/etc/init.d/目录这是存放所有独立服务启动脚本的地方。您可以使用ls /etc/init.d/查看。您已有的S40network—— 这个是您/etc/rc.local里重启的那个脚本负责配置网络 IP读取/etc/network/interfaces。其他可能的S50sshdSSH服务、S99user等。这些脚本通常以S开头加数字数字代表启动顺序。4. 您的自定义大本营/etc/rc.local用户级最终执行这是System V init 预留的、专门给用户放开机自启命令的地方。里面就是纯粹的 Shell 命令。您当前的内容后台重启网络S40network。设置环境变量XDG_RUNTIME_DIR等。启动weston。启动您的qts_demo_qml。调用了您的 CAN 脚本/opt/scripts/can_auto.sh。5. 登录后的环境配置与开机自启无关但容易混淆这些文件只在您SSH 登录或串口登录进入 Shell 后才生效不影响/etc/rc.local里的程序启动/etc/profile全局环境变量如 PATH。/etc/bash.bashrc或/root/.bashrc命令行别名、提示符等。您在终端敲export在这里生效但不影响开机自启的程序。6. 硬件与驱动配置内核模块/etc/modules如果您的 CAN 或显卡驱动需要手动加载这里会列出内核模块名称系统启动时会自动modprobe加载。 怎么查看当前到底启动了哪些东西您可以用以下命令“盘查”系统看哪些脚本被触发了bash# 1. 查看 init 进程的父进程树看看谁拉了谁 ps aux | grep -E init|weston|qts|can # 2. 查看自启动日志您之前在 rc.local 里加的调试日志 cat /tmp/rc_local_debug.log # 3. 查看网络重启日志 cat /tmp/rc_local_network.log # 4. 查看所有服务脚本列表 ls -l /etc/init.d/ 总结您的系统启动链条长这样text硬件上电 ↓ Linux 内核启动 ↓ 第一个进程/sbin/init (BusyBox) ↓ 读取 /etc/inittab ↓ 执行 ::sysinit:/etc/rc.local ← 您自己添加的入口 ↓ [在 /etc/rc.local 中] 1. 后台重启网络 (/etc/init.d/S40network) 2. 启动 Weston (图形界面) 3. 启动 Qt 程序 4. 调用 /opt/scripts/can_auto.sh ├── 配置 can0 ├── 启动心跳循环 (cansend) └── 启动接收记录 (candump) ↓ 执行 inittab 中的其他 respawn如 /sbin/getty提供登录终端