板子上电
Linux 上电后,大致是这条链路:
硬件上电
-> Boot ROM / 固件
-> Bootloader
-> Linux Kernel
-> init 进程,通常是 systemd
-> systemd 启动系统服务
-> 用户登录后执行 shell 初始化脚本
1. 固件 / Bootloader
机器刚上电时,CPU 先执行固件代码。
常见有:
BIOS / UEFI
Boot ROM
U-Boot
GRUB
嵌入式板子上常见是:
Boot ROM -> U-Boot -> Linux Kernel
这一阶段主要做硬件初始化、选择内核、加载设备树、传内核启动参数。
2. Linux Kernel
Bootloader 把 Linux 内核加载起来后,内核开始执行。
内核会做:
初始化 CPU / 内存 / 中断
加载驱动
挂载根文件系统
启动第一个用户态进程
第一个用户态进程一般是:
/sbin/init
现在多数系统里它实际指向:
/lib/systemd/systemd
可以查看:
ls -l /sbin/init
3. init / systemd
systemd 是 PID 1,是用户态第一个进程。它负责继续启动整个系统。
它会读取 unit 文件,比如:
/etc/systemd/system/
/lib/systemd/system/
/usr/lib/systemd/system/
然后启动 target 和 service。
常见 target:
basic.target
multi-user.target
graphical.target
你可以理解成以前的运行级别:
multi-user.target 类似命令行多用户系统
graphical.target 类似图形界面系统
查看默认 target:
systemctl get-default
查看本次启动启动了什么:
systemd-analyze blame
systemctl list-units --type=service
4. systemd service
上电后真正自动跑的大多数程序,都是 systemd service。
比如网络、日志、SSH、Docker、你自己的业务程序:
systemd-journald.service
NetworkManager.service
ssh.service
docker.service
your_app.service
查看开机自启服务:
systemctl list-unit-files --type=service | grep enabled
一个 service 大概长这样:
[Unit]
Description=My App
After=network.target
[Service]
ExecStart=/usr/bin/my_app
Restart=always
[Install]
WantedBy=multi-user.target
启用开机启动:
systemctl enable my_app.service
启动:
systemctl start my_app.service
5. 传统启动脚本
老系统或兼容层可能还有:
/etc/init.d/
/etc/rc.local
但现代系统一般推荐 systemd。
检查有没有 rc.local:
ls -l /etc/rc.local
systemctl status rc-local
6. cron 的开机任务
cron 可以配置开机执行:
@reboot /path/to/script.sh
查看当前用户的:
crontab -l
查看 root 的:
sudo crontab -l
但 @reboot 依赖 cron 服务本身启动后执行,不如 systemd 可控。
7. 用户登录后执行的文件
这些不是“上电立即执行”,而是“用户登录/打开终端时执行”。
登录 shell 会读:
/etc/profile
/etc/profile.d/*.sh
~/.profile
~/.bash_profile
交互式 bash 会读:
/etc/bash.bashrc
~/.bashrc
所以你前面说的:
/etc/profile.d/ros2_env.sh
作用是:用户登录 shell 时自动设置环境变量。它不是系统上电阶段执行的,也不会自动给 systemd 服务继承。
8. 一句话总结
上电真正负责自动启动程序的是:
systemd service
终端环境变量通常放:
/etc/profile.d/*.sh
~/.bashrc
如果你要 ROS2 程序上电自动跑,建议写 systemd service;如果只是希望手动打开终端后有 ROS2 环境,放 /etc/profile.d/ros2_env.sh 或 ~/.bashrc。

浙公网安备 33010602011771号