arm linux 启动之二:start_kernel到创建1号进程

发布者:Mingyue1314最新更新时间:2016-06-16 来源: eefocus关键字:ARM  Linux  启动 手机看文章 扫描二维码
随时随地手机看文章
       本文介绍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 这个函数比较重要。

            i  setup_processor 初始化CPU体系架构, setup_machine初始化平台数据结构

                   ii   init_mm 初始化1号进程的task_struct

                     iii parse_cmdline(cmdline_p, from) 获取default启动参数,取得相关的启动命令信息。

                     iv  paging_init(&meminfo, mdesc); 创建正式页表

                     v  request_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号进程。 

关键字:ARM  Linux  启动 引用地址:arm linux 启动之二:start_kernel到创建1号进程

上一篇:arm 嵌入式LINUX启动过程(1)
下一篇:arm linux 启动之一:汇编启动到start_kernel

推荐阅读最新更新时间:2024-03-16 14:57

ARM 发布最新高端移动技术,提升沉浸式体验
2016年5月30日,北京讯 ARM今日宣布推出最新高端移动处理器技术组合,重新定义2017年推出的旗舰型设备。ARM Cortex-A73 处理器和 ARM Mali-G71 图形处理器提供持久的最佳能效与性能状态,赋予新产品增强的情景与视觉能力。这有助于设备在有限移动功耗预算情况下,更长时间地运行高清内容。 ARM执行副总裁兼产品事业部总裁Pete Hutton 表示: 智能手机是全球最为普及的计算设备,其性能亦随着不断推陈出新而获得提升。凭借持久和出众的性能表现,以及卓绝惊艳的视觉效果,我们将在2017年看到基于Cortex-A73与Mali-G71的设备脱颖而出。这使得通过移动设备感受4K视频,VR和AR成为日常体验。 M
[手机便携]
module方式调试驱动(Micro2440 + linux 2.6.39)
调试驱动时,为了避免每修改一次内核配置或驱动都要重新编译一次内核镜像,可以将驱动配置成模块(module)的方式进行调试,可在LINUX启动时动态地加载驱动模式到内核中,减少了编译时间,也省去了重启LINUX的时间,大大加快调试进度。 以下以Micro2440 + linux 2.6.39的RTC驱动为例子,进行动态编译。 a) 将RTC编译成module,并打开DEBUG输出 # make menuconfig Device Drivers --- * Real Time Clock --- RTC debug suppor
[单片机]
module方式调试驱动(Micro2440 + <font color='red'>linux</font> 2.6.39)
高压电动机启动装置线路工作原理
什么是高压电动机?工作原理是什么? 高压电动机是指额定电压在1000V以上的电动机。常使用的是6000V和10000V电压,由于国外的电网不同,也有3300V和6600V的电压等级。高压电动机产生是由于电机功率与电压和电流的乘积成正比,因此低压电机功率增大到一定程度(如300KW/380V)电流受到导线的允许承受能力的限制就难以做大,或成本过高。需要通过提高电压实现大功率输出。 高压电机优点是功率大,承受冲击能力强;缺点是惯性大,启动和制动都困难。 高压电动机工作原理: 1.电动机输入电源 2.电流在定子与转子之间产生电磁感应 3.电磁同极排斥 4.推动转子(定子是固定的) 5.转动做功 6.传动带动其它设备。 高压电动机
[嵌入式]
高压电动机<font color='red'>启动</font>装置线路工作原理
首条全柔AMOLED生产线启动 显示产业再添“中国屏”
    首条全柔AMOLED生产线启动运行新型显示产业再添“中国屏”   人民日报 张建华     图左为维信诺(固安)第六代全柔AMOLED生产线智能车间,图右为维信诺总裁张德强博士(左一)介绍柔性屏产品终端应用。   新型显示在国民经济中具有重要战略地位,与集成电路并称“一屏一芯”,是先进制造和新一代电子信息领域的核心基础产业。   5月17日,维信诺(固安)第六代全柔AMOLED生产线在华夏幸福运营的河北固安产业新城正式启动运行。这条生产线拥有自主知识产权,技术性能位居世界前列,它的启动运行标志着我国在全柔AMOLED产业化方面,不仅拥有了创新技术研发实力,也同时具备了大规模量产能力,将有效缓解我国新型显示高端产
[手机便携]
英特尔与高通恩怨难解 ARM服务器处理器恐激化战局
正当英特尔(Intel)企图在人工智能(AI)领域追赶NVIDIA的同时,高效运算(high-performance computing;HPC)市场的竞争也同时激化起来。超微(AMD)已经推出了Epyc服务器处理器,而IBM业已发表旗下Power 9处理器,至于Cavium先前也已释出了Thunder X2 ARM处理器。   上述这3大业者含括了x86阵营以及ARM阵营的服务器处理器供应商,事实上,包括超微、IBM以及Cavium等这3家业者已经在服务器处理器市场耕耘日久,却依然在英特尔的市场影响力冲击下,还未能取得明显的市占率挺进,不过,尽管高通(Qualcomm)相较于这些业者可说是更晚切入服务器处理器的业者,但产业分析师
[半导体设计/制造]
意法半导体高集成度PFC升压转换器,解决启动电路设计挑战
2022 年 9 月 27日, 中国– 意法半导体的 L4985A/B和L4986A/B功率因数校正(PFC) 升压转换器集成 800V 启动电路,以及意法半导体专有的实用的辅助功能,有助于简化应用设计,提高设计灵活性。 芯片内置的高压启动功能可以节省辅助电路,支持“无辅助电路”设计,降低物料清单成本,并确保启动可靠性。在附加的辅助电路中,内部逻辑电路可在交流线路断开时对输入滤波器X电容器执行安全放电操作,解决传统放电电阻的功率损耗问题,并简化IEC 61010-1或IEC 62368-1 等安全法规的合规设计。 这两款转换器可用作PFC预调节器,帮助各种应用符合谐波失真要求,例如,IEC 61000-3-2 和等效
[电源管理]
意法半导体高集成度PFC升压转换器,解决<font color='red'>启动</font>电路设计挑战
ARM cortex M4异常处理
故障处理 故障处理是异常的子集,故障的产生主要由下列方式: 总线错误:包括去指令和中断向量表装载以及数据存取 内部检测错误,像未定义的指令 在包含MPU的设备上,试图存取操作未托管的区域引起MPU故障。 故障的主要类型可以通过下表清楚的看出: 通常情况下,异常的优先级和异常屏蔽寄存器的值共同决定处理器是否进入异常故障处理,是否一个故障处理异常可以打断另一个故障处理异常。故障状态寄存器表明产生故障的原因。 当处理器执行NMI或者硬件故障处理的时候产生故障就会进入锁死状态,当进入锁死状态,处理器将不会执行任何指令,并保持在锁死态直到产生下列情况: 复位 NMI产生 被调试器终止 需要注意的一点是,如果锁死态产生于
[单片机]
嵌入式Linux技术在工业控制网络中的应用
     随着Internet的飞速发展,网络应用越来越广泛,对各种工业控制设备的网络功能要求也越来越高。当前的要求是希望工业控制设备能够支持TCP/IP以及其它Internet协议,从而能够通过用户熟悉的浏览器查看设备状态、设置设备参数,或者将设备采集到的数据通过网络传送到Windows或Unix/Linux服务器上的数据库中。   这就要求工控系统必须具备两方面的功能:   一是要在现场完成复杂的测控任务,因为通常一些任务都具有一定的实时性要求;   二是要求测控系统能够与某一类型的控制网相连,以实现远程监控。在目前应用的大多数测控系统中,嵌入式系统的硬件采用的是8/16位单片机;软件多采用汇编语言编程,由于这些程
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved