rootfs
注本篇笔记只是在BusyBox Buildroot基础上进行讲解BusyBoxBuildroot和rootfs的关系Buildroot 造出 rootfsBusyBox 住在 rootfs 里负责开机后当 pid 1。BuildrootPC 上构建 │ 编译 BusyBox、拷贝配置/脚本、打包 ▼ rootfs 镜像ext4 / squashfs / tar… │ 烧录 / 挂载 ▼ 板子上的 / ├── /sbin/init ← BusyBox 开机后的第一个程序 ├── /etc/inittab ├── /etc/init.d/rcS └── …阶段一 开机用户态的起点/sbin/initkernel_execve(/sbin/init) → busybox 启动 → 识别 applet 名 init → init_main(argc, argv) // 用户态真正入口init.c里面阶段二init_main 主流程int init_main(int argc, char **argv) { /* 屏蔽一批信号延后处理CAD / halt / reboot / CHLD… */ sigprocmask(SIG_BLOCK, G.delayed_sigset, NULL) if (getpid() ! 1) die(must be run as PID 1); // 内核约定init 必须是 1 号进程 console_init(); set_sane_term(); xchdir(/); setsid(); /* PATH / SHELL / USER 等环境 */ message(..., init started: %s, bb_banner) if (单用户模式参数) new_init_action(RESPAWN, shell, ...); else parse_inittab(); // ★ 读 /etc/inittabinit 的任务清单 /* 一次性阶段 */ run_actions(SYSINIT); // 含 rcS 开机服务总开关脚本 run_actions(WAIT) run_actions(ONCE); while (1) { run_actions(RESPAWN | ASKFIRST); /* 等信号、收尸、必要时重启 respawn 进程 */ check_delayed_sigs(...); waitpid(...); sleep1(); }阶段三解析 /etc/inittab::sysinit:/bin/mount -t proc proc /proc ::sysinit:/bin/mount -o remount,rw / ::sysinit:/bin/mkdir -p /dev/pts /dev/shm ::sysinit:/bin/mount -a ::sysinit:/bin/mkdir -p /run/lock/subsys ::sysinit:/sbin/swapon -a null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr ::sysinit:/bin/hostname -F /etc/hostname # now run any rc scripts ::sysinit:/etc/init.d/rcS ......行格式[id]:[runlevels]:[action]:[process]字段BusyBox 含义id终端节点空 默认 consolettyS0→/dev/ttyS0runlevels忽略BusyBox init无 SysV runlevelactionsysinit/wait/once/respawn/askfirst/shutdown/process要执行的命令行注如果没有inittab的话会有一套默认动作执行阶段四run_actions(SYSINIT) 跑通 sysinitstatic void run_actions(int action_type) { for (a G.init_action_list; a; a a-next) { if (!(a-action_type action_type)) continue; if (a-action_type (SYSINIT | WAIT | ONCE | ...)) { pid_t pid run(a); /* fork/vfork 子进程 exec */ if (a-action_type (SYSINIT | WAIT | ...)) waitfor(pid); /* SYSINIT等子进程结束 */ } /* RESPAWN/ASKFIRST只在 pid0 时启动不等待 */ } }阶段五rcS 按序号执行 init.d只匹配Sxx两位序号名字启动顺序根据字典序来排S00S03S49S99在本项目中建立分区文件的脚本buildroot/board/rockchip/rk3562/ctu-overlay/etc/init.d/S03ctu-mount等。UI合成器的有buildroot/package/weston/S49weston。都是两位序号名字。也可以个性化编写脚本跑系统喂狗或者开机软件等阶段六主循环 respawn / 关机 shutdown主循环while (1) { run_actions(RESPAWN | ASKFIRST); check_delayed_sigs(NULL); while ((wpid waitpid(-1, NULL, WNOHANG)) 0) { a mark_terminated(wpid); /* RESPAWN 项 pid 置 0 → 下次再 run */ } sleep1(); }关机::shutdown:/etc/init.d/rcK ::shutdown:/sbin/swapoff -a ::shutdown:/bin/umount -a -rrcK 反向对 S?? 调stopRootfs 的制作注制作在 PC 上完成启动是板子每次上电跑已经做好的文件。二者别混。制作视角三者关系Buildroot 造出 rootfsBusyBox 被编进 rootfs板上当/sbin/initpid 1。BusyBox 源码 ──make──► busybox ELF /bin/ls、/sbin/init … 链接 │ ▼ 装进某个目录CONFIG_PREFIX / TARGET_DIR 其余材料skeleton、inittab、libc、overlay…──► 完整 rootfs 树 │ ▼ mkfs / Buildroot 打镜像 rootfs.img可烧录通用只用 BusyBox 源码怎么编cd busybox-x.y.z make menuconfig # 打开 Init→init交叉编译设 Cross Compiler prefix make -j$(nproc) # 编出一个多呼 ELF mkdir -p /tmp/myroot make CONFIG_PREFIX/tmp/myroot installmake install会把busybox拷进 CONFIG_PREFIX常见/bin/busybox按 .config 建/sbin/init、/bin/sh、/bin/ls… 链接指向它交叉编译注意必须用板子同架构工具链别用宿主机 gcc 直接编目标程序可选CONFIG_STATICy静态链接可不依赖目标机 libc体积更大没开CONFIG_INIT→ 没有/sbin/init内核 exec 后起不来凑齐可启动 rootfsBusyBox alone 不够此时/tmp/myroot只有 BusyBox 那一层。还要需要作用/etc/proc/sys/dev/tmp…挂载点与配置落点/etc/inittabinit 任务清单/etc/init.d/rcSS??*开机脚本passwd / hostname登录、主机名动态库非静态时否则一 exec 就缺 .so设备节点或 mdev/udevconsole / 串口手搓示意ROOT/tmp/myroot # 已 make CONFIG_PREFIX$ROOT install mkdir -p $ROOT/{etc/init.d,proc,sys,dev,tmp,root} # 放入 inittab含 sysinit getty respawn、简易 rcS # 动态链接则拷 .so 到 $ROOT/lib # 再 mkfs.ext4 / 打包成镜像烧进去Buildroot 怎么自动做上面这些产品不天天手敲 CONFIG_PREFIXBuildroot 内部等价Buildroot make ├─ 准备 TARGET_DIR 即将成为 rootfs 的目录树 ├─ 解压/配置 BusyBox ├─ CROSS_COMPILE… make ├─ make CONFIG_PREFIX$(TARGET_DIR) install ├─ 再装 inittab、initscripts、其它包、overlay └─ 按配置打成 ext4 / squashfs …只重编 BusyBoxcd buildroot make busybox-menuconfig make busybox-rebuild本 SDK./build.sh rootfs → mk-rootfs.sh → mk-buildroot.sh rockchip_kx_rk3562_sp → output/.../target/TARGET_DIR→ rootfs.imgOverlay后写覆盖先写BR2_ROOTFS_OVERLAYboard/rockchip/common/base board/rockchip/rk3562/sp-overlay board/rockchip/rk3562/ctu-overlay想改改哪里init / appletbusybox menuconfig / busybox 配置早期启动动作package/busybox/inittab开机服务overlay 或 package 的S??*如 S03ctu-mount、S49weston整包选型rockchip_kx_rk3562_sp_defconfig做完自检ls -l …/target/sbin/init # 期望指向 busybox cat …/target/etc/inittab ls …/target/etc/init.d/做出来的文件 ↔ 启动阶段镜像里有启动时/sbin/initBusyBox阶段一 init_main/etc/inittab阶段二/三 parse_inittab → SYSINIT/etc/init.d/rcSS??*阶段四/五 按序号起服务getty respawn阶段六 主循环保活登录

相关新闻

AI撸代码越快越烂?真正大佬都在用的「三层约束工程法」

AI撸代码越快越烂?真正大佬都在用的「三层约束工程法」

文章目录一、靠AI快速撸项目,爽只是暂时的假象1. 代码膨胀到离谱,一个组件干到五百行2. 牵一发而动全身,修一个bug炸出俩新问题3. AI总擅自加功能,偷偷篡改数据结构4. 最后项目彻底烂尾,只能删库重来二、核心解法&…

2026/7/30 1:23:21阅读更多 →
如何快速搭建家庭游戏串流服务器:Sunshine完全配置指南

如何快速搭建家庭游戏串流服务器:Sunshine完全配置指南

如何快速搭建家庭游戏串流服务器:Sunshine完全配置指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款功能强大的自托管游戏串流服务器,专为…

2026/7/30 1:23:21阅读更多 →
数据库 AI 助手是什么?智能运维与诊断详解 —— 阿里云 PolarDB-X

数据库 AI 助手是什么?智能运维与诊断详解 —— 阿里云 PolarDB-X

数据库 AI 助手,是指借助大模型与专家知识把数据库的性能诊断、SQL 优化、参数调整、异常处理等运维工作智能化、自动化的能力。阿里云 PolarDB-X(国产分布式数据库)结合云上智能运维体系提供自动诊断与优化建议,让不熟悉分布式数…

2026/7/30 1:21:20阅读更多 →
Unity3D开源项目精选:从架构到渲染,十大工具提升开发效率

Unity3D开源项目精选:从架构到渲染,十大工具提升开发效率

1. 项目概述:为什么你需要关注Unity3D开源项目?如果你正在学习或使用Unity3D进行游戏开发,那么你大概率经历过这样的时刻:面对一个复杂的功能需求,比如一个丝滑的镜头跟随系统、一个高效的UI框架,或者一个复…

2026/7/30 2:39:14阅读更多 →
UE5蓝图进阶:变量与函数构建模块化游戏逻辑

UE5蓝图进阶:变量与函数构建模块化游戏逻辑

1. 项目概述:从蓝图新手到架构师的必经之路如果你已经跟着前几天的指南,学会了在UE5蓝图里摆放节点、连接引脚,甚至能做出一个会跳会跑的角色,那么恭喜你,你已经成功“入门”了。但不知道你有没有遇到过这样的场景&…

2026/7/30 2:39:14阅读更多 →
大语言模型输出头详解:语言建模、条件生成与价值评估

大语言模型输出头详解:语言建模、条件生成与价值评估

1. 理解LLM输出头:从语言建模到条件生成在大语言模型(LLM)的架构中,输出头(Output Head)是决定模型最终行为的关键组件。许多开发者在接触LLM时,往往只关注模型的生成结果,却忽略了不…

2026/7/30 2:39:14阅读更多 →
评测全网10款主流降AI率网站:一键锁定高效助手!

评测全网10款主流降AI率网站:一键锁定高效助手!

AI写作工具让论文写作和内容创作变得高效便捷,越来越多的学生和职场人开始依赖它来提升效率。然而,随着各大高校、期刊和平台对AIGC内容的检测标准不断提高,问题也接踵而至。很多用户发现,自己用AI生成的内容很容易被系统识别出AI…

2026/7/30 2:39:14阅读更多 →
2026年GEO信源发稿平台推荐:4大主流平台5大核心维度对比与选购指南

2026年GEO信源发稿平台推荐:4大主流平台5大核心维度对比与选购指南

随着用户信息获取习惯逐步向 AI 问答场景转移,GEO 信源发稿成为企业布局 AI 时代品牌声量、沉淀品牌数字资产的重要方式。选择适配的发稿平台,可帮助企业更高效完成合规内容分发,提升内容被主流大模型采信的概率,逐步搭建稳定的品…

2026/7/30 2:39:14阅读更多 →
Java企业开发中的PO、VO、DTO等对象类型解析

Java企业开发中的PO、VO、DTO等对象类型解析

1. 为什么我们需要这么多"O"?在Java企业级开发中,我们经常会遇到各种以"O"结尾的缩写:PO、VO、DAO、BO、DTO、POJO。这些概念看似简单,但很多开发者在实际项目中经常混淆使用。我第一次接触这些概念时&#x…

2026/7/30 2:37:14阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →