Linux内核简单启动流程以及功能描述

/arch/arm/kernel/head.S
svc mode irqs disabled
get processor id
/arch/arm/kernel/head-common.S
\arch\arm\include\asm\procinfo.h
\arch\arm\kernel\asm-offsets.c
__lookup_processor_type  CPU信息的定义都放到.proc.info.init​段中
CONFIG_XIP_KERNEL 是否片内执行
\arch\arm\kernel\head-common.S
__vet_atags验证atags或设备树(dtb)的合法性。
__create_page_tables 建立一个临时的page table mmu
ldr    r13, =__mmap_switched    
__enable_mmu
跳转到__mmap_switched
b    start_kernel
\init\main.c
asmlinkage void __init start_kernel(void)
smp_setup_processor_id();获取当前正在执行初始化的处理器ID。
lockdep_init()锁的初始化
debug_objects_early_init()初始化obj_hash、obj_static_pool这2个全局变量,这2个全局变量会在调试的时候用到
boot_init_stack_canary()初始化一些除錯相關的功能
cgroup_init_early()控制组进行早期的初始化
local_irq_disable()
tick_init()调用 clockevents_register_notifier 函数向 clockevents_chain 通知链注册元素
boot_cpu_init()
page_address_init()初始化页地址,当然对于arm这里是个空函数  
setup_arch(&command_line)系结构相关的内核初始化过程
mm_init_owner(&init_mm, &init_task)初始化内存管理
setup_command_line(command_line)处理启动命令,这里就是设置的cmd_line
setup_nr_cpu_ids()这个在定义了SMP的时候有作用
setup_per_cpu_areas()CONFIG_SMP宏,每个CPU分配内存
smp_prepare_boot_cpu()则设置boot CPU的一些数据。在引导过程中使用的CPU称为boot CPU
build_all_zonelists(NULL)内存管理
page_alloc_init()初始化page allocation相关结构
parse_early_param()解析内核参数
pidhash_init()初始化hash表,以便于从进程的PID获得对应的进程描述指针,按照实际的物理内存初始化pid hash
vfs_caches_init_early()初始化VFS的两个重要数据结构dcache和inode的缓存
sort_main_extable()把编译期间,kbuild设置的异常表,也就是__start___ex_table和__stop___ex_table之中的所有元素进行排序
trap_init()初始化中断向量表
mm_init()memory map初始化
sched_init()核心进程调度器初始化
preempt_disable()抢占计数器加1
idr_init_cache()idr在linux内核中指的就是整数ID管理机制
perf_event_init()
rcu_init()
radix_tree_init()
early_irq_init()中断
init_IRQ()
prio_tree_init()
init_timers()
hrtimers_init()
softirq_init()
timekeeping_init()
time_init()
profile_init()
kmem_cache_init_late()内存管理初始化
console_init()调试
lockdep_info()同步互斥
locking_selftest()
page_cgroup_init()页面初始化
enable_debug_pagealloc()页面分配debug启用
debug_objects_mem_init()在kmem_caches之后表示建立一个高速缓冲池
kmemleak_init()内存管理初始化
setup_per_cpu_pageset()CPU初始化
numa_policy_init()内存管理初始化
sched_clock_init()进程管理
calibrate_delay()CPU初始化
pidmap_init()进程管理
anon_vma_init()内存管理初始化
thread_info_cache_init()文件系统
cred_init()
fork_init(totalram_pages)进程管理
proc_caches_init()
buffer_init()
key_init()
security_init()
dbg_late_init()调试
vfs_caches_init(totalram_pages)为VFS创建各种SLAB分配器缓存
signals_init()创建信号队列
page_writeback_init()回写相关的初始化
cgroup_init()在proc的根目录下创建了一个名为cgroups的文件.用来从用户空间观察cgroup的状态
cpuset_init()
taskstats_init_early()进程状态初始化,实际上就是分配了一个存储线程状态的高速缓存 
delayacct_init()
check_bugs()测试CPU的各种缺陷,记录检测到的缺陷,以便于内核的其他部分以后可以使用他们工作
acpi_early_init()电源相关的初始化
sfi_init_late()
ftrace_init()
rest_init()创建1号进程,详细分析之
 

上一篇:C#生成验证码


下一篇:2021年度训练联盟热身训练赛第一场——Early Orders(单调栈)