init/ 源码目录与模块索引
源码路径:
rk3588/kernel-6.1/init/
内核版本:Linux 6.1(RK3588 / ARM64)
文档目录:linuxDoc/init/
一、目录文件清单
| 文件 | 链接对象 | 职责摘要 |
|---|---|---|
main.c |
main.o |
start_kernel、rest_init、kernel_init、initcall、bootconfig、执行 init |
init_task.c |
init_task.o |
静态 init_task / init_stack、信号与 cred 模板 |
do_mounts.c |
mounts.o 之一 |
root=、prepare_namespace、mount_root |
do_mounts_rd.c |
可选 | 块 ramdisk 加载 |
do_mounts_initrd.c |
可选 | initrd 镜像处理 |
do_mounts.h |
— | 挂载相关内部声明 |
initramfs.c |
initramfs.o |
内置 cpio 解包到 rootfs(需 CONFIG_BLK_DEV_INITRD) |
noinitramfs.c |
noinitramfs.o |
无 initrd 时的最小 rootfs 占位 |
calibrate.c |
可选 | calibrate_delay() / lpj= |
version.c |
version.o |
UTS_VERSION 编译期字符串 |
version-timestamp.c |
构建生成 | 最终构建时间戳写入 UTS_VERSION |
build-version |
脚本输入 | 可由 KBUILD_BUILD_VERSION 覆盖版本串 |
Makefile |
— | 对象选择、UTS_VERSION 生成规则 |
Kconfig |
— | 大量全局构建/工具链选项 + 部分 initramfs 相关项 |
文件数量:约 15 个(含 Kconfig、Makefile)。
二、Makefile 对象映射
1 | obj-y := main.o version.o mounts.o init_task.o |
mounts.o 由 mounts-y 中多个 .o 链接而成。
三、main.c 内主要符号(按启动顺序)
| 符号 | 阶段 |
|---|---|
start_kernel |
单线程早期,至 arch_call_rest_init() |
rest_init |
创建 kernel_init 线程、kthreadd,boot CPU idle |
kernel_init |
等待 kthreadd → freeable → exec init |
kernel_init_freeable |
SMP、initcall、initramfs、挂根、integrity |
do_pre_smp_initcalls |
__initcall_start .. __initcall0_start(early) |
do_basic_setup |
driver_init + do_initcalls |
do_initcalls / do_initcall_level |
pure .. late 七级 |
do_one_initcall |
单个 initcall 执行与检查 |
run_init_process |
kernel_execve 用户态 init |
parse_early_param / unknown_bootoption |
启动参数 |
四、Kconfig 说明
init/Kconfig 体积很大,多数条目属于:
- 编译器版本探测(GCC/Clang/LD)
CONFIG_RUST、BUILDTIME_TABLE_SORT等全局构建选项
与 启动行为 更相关的配置通常分散在:
| 配置 | 典型位置 |
|---|---|
INITRAMFS_SOURCE |
init/Kconfig 后部 |
DEFAULT_INIT |
init/Kconfig |
BLK_DEV_INITRD |
drivers/block/Kconfig 等 |
ROCKCHIP_THUNDER_BOOT* |
Rockchip 平台 Kconfig |
ARCH_ROCKCHIP |
arch/arm64/Kconfig 等 |
阅读 RK3588 defconfig 时需结合 arch 与 drivers,不能只看 init/Kconfig。
五、平台相关代码位置(init 内)
| 宏/符号 | 文件 | 说明 |
|---|---|---|
CONFIG_ARCH_ROCKCHIP |
main.c |
分段打印 saved_command_line |
CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK |
main.c |
kthread_run(defer_free_memblock) |
CONFIG_ROCKCHIP_THUNDER_BOOT + CONFIG_ROCKCHIP_HW_DECOMPRESS |
initramfs.c |
wait_initrd_hw_decom_done() |
实现体 defer_free_memblock 在 mm/memblock.c。
六、专题文档对照
| 源码主题 | 文档 |
|---|---|
start_kernel |
01 |
rest_init / kernel_init |
02 |
| initcall | 03 |
do_mounts* |
04 |
initramfs / initrd |
05 |
init_task / version / calibrate |
06 |
| Rockchip 启动优化 | 07 |
正在加载留言…