您的位置 首页 IC

arm linux 发动之二:start_kernel到创立1号进程

本文介绍armlinux启动的第二部分,C语言编写,主要讲述start_kernel到1号进程的创建。主要讲述大概过程,以后再对子函数进行讲解。…

本文介绍arm linux发动的第二部分,C言语编写,首要叙述start_kernel到1号进程的创立。首要叙述大约进程,今后再对子函数进行解说。

一、start_kernel

  start_kernel坐落init/main.c,首要完结linux一些子系统的初始化。

   1)smp_setup_processor_id() 单CPU位为空。

   2)lock_kernel() 锁CPU,linux是支撑抢占的,多CPU时调用这个函数避免其他CPU抢占。
    3)tick_init() 时刻相关初始化
    4)boot_cpu_init() 确认有多少个CPU可用。现在以单CPU叙述。
    5)page_address_init() 初始化高端内存。linux内核空间为1G,对应最大能支撑的物理内存也是1G。为了可以支撑超越1G的内存,运用高端内存(128M)来进行映射处理。

   6)setup_arch(&command_line),坐落arch/arm/kernel/setup.c这个函数比较重要。

     isetup_processor初始化CPU系统架构,setup_machine初始化渠道数据结构

 ii init_mm 初始化1号进程的task_struct

iiiparse_cmdline(cmdline_p, from) 获取default发动参数,获得相关的发动指令信息。

ivpaging_init(&meminfo, mdesc); 创立正式页表

vrequest_standard_resources(&meminfo, mdesc); 请求IO资源

vi 相关大局变量赋值 init_arch_irq = mdesc->init_irq;
system_timer = mdesc->timer;
init_machine = mdesc->init_machine;

  7)mm_init_owner 初始化init的内存,arm系统为空

   8)setup_command_line(command_line)获取uboot中的bootargs参数,获得相关的发动指令信息

9)setup_nr_cpu_ids();setup_per_cpu_areas();smp_prepare_boot_cpu() 多CPU函数

  10)build_all_zonelists()初始化一切内存办理节点列表,以便后边进行内存办理初始化。

  11)page_alloc_init() 物理内存分配初始化。

  12)parse_early_param() 获取指令行early最早履行部分的参数。

  13)vfs_caches_init_early() vfs cache子系统初始化

  14)mm_init() 内存办理初始化

 15)sched_init() 调度办理初始化

 16)rcu_init()初始化直接读复制更新的锁机制

  17)init_IRQ 中止初始化

  18)timer初始化,高精度time初始化

  19)软中止初始化

20)local_irq_enable 开中止

21)console_init 初始化控制台,初始化之后今后prink就可以输出了,之前是输出到缓冲里边。

22)页表cache初始化

23)thread cache初始化

24)IPC初始化

25)异步信号初始化

26)还有一些其他多CPU相关的初始化。

27)rest_init 创立1号进程。

二、rest_init

1) kernel_thread(kernel_init, NULL, CLONE_FS CLONE_SIGHAND); 创立1号进程init

2)创立kthreadd线程,它是内核线程之父,办理调度其它的内核线程,内核线程列表由kthread_create_list大局链表办理。

3) 创立idle线程耗费空CPU时刻。

接下来,便是第三部分的kernel_init运转,即1号进程。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/277365.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部