platform:RK3399
OS:Android 7.1
Kernel:4.4
参考:
1.Younix 《Android启动流程分析》
概述
Uboot最后阶段通过do_bootm_linux跳转到内核,此时内核开始运行,uboot任务完成。之后内核会完成一系列的初始化和注册,最终启动init进程(pid=1)和kthreadd(pid=2),并进入idle.
整体介绍
start_kernel
函数名 | 定义目录 | 简介 |
---|---|---|
lockdep_init() | kernel/locking/lockdep.c | 初始化运行时锁校验器 |
set_task_stack_end_magic | kernel/fork.c | |
smp_setup_processor_id() | arch/arm64/kernel/setup.c | |
debug_objects_early_init() | lib/debugobjects.c | 初始化哈希桶并将静态对象池对象链接到轮询列表中 |
boot_init_stack_canary() | arch/arm64/include/asm/stackprotector.h | |
cgroup_init_early() | kernel/cgroup.c | |
local_irq_disable() | include/linux/irqflags.h | |
boot_cpu_init() | init/main.c | |
page_address_init() | mm/highmem.c | 初始化页地址hash链表 |
setup_arch(&command_line) | arch/arm64/kernel/setup.c | |
mm_init_cpumask(&init_mm) | include/linux/mm_types.h | |
setup_command_line | init/main.c | 保存command line |
setup_nr_cpu_ids() | kernel/smp.c | |
setup_per_cpu_areas() | mm/percpu.c | |
smp_prepare_boot_cpu() | arch/arm64/kernel/smp.c | |
build_all_zonelists | mm/page_alloc.c | 初始化所有build_zonelists |
page_alloc_init() | mm/page_alloc.c | 注册page_alloc_cpu_notify |
parse_early_param() | init/main.c | |
jump_label_init() | kernel/jump_label.c | |
setup_log_buf(0) | kernel/printk/printk.c | |
pidhash_init() | kernel/pid.c | 初始化pid hash表(16~4096) |
vfs_caches_init_early() | fs/dcache.c | dchche/inode init |
sort_main_extable() | kernel/extable.c | exception table |
trap_init() | arch/arm64/kernel/traps.c | register_break_hook |
mm_init() | init/main.c | 内核内存分配器 |
sched_init() | kernel/sched/core.c | 初始化任务调度器 |
preempt_disable() | include/linux/preempt.h | barrier() |
idr_init_cache() | lib/idr.c | |
rcu_init() | kernel/rcu/tree.c | |
trace_init() | kernel/trace/trace.c | |
context_tracking_init() | kernel/context_tracking.c | |
radix_tree_init() | lib/radix-tree.c | |
early_irq_init() | kernel/irq/irqdesc.c | |
init_IRQ() | arch/arm64/kernel/irq.c | irqchip_init() |
tick_init() | kernel/time/tick-common.c | |
rcu_init_nohz() | kernel/rcu/tree_plugin.h | |
init_timers() | kernel/time/timer.c | |
hrtimers_init() | kernel/time/hrtimer.c | 初始化高精度定时器 |
softirq_init() | kernel/softirq.c | |
timekeeping_init() | kernel/time/timekeeping.c | 初始化时钟源和公共时效值 |
time_init() | arch/arm64/kernel/time.c | |
sched_clock_postinit() | kernel/time/sched_clock.c | |
perf_event_init() | kernel/events/core.c | |