ARM Linux从入口到Start_kernel代码分析 - (1)

发布者:温暖的拥抱最新更新时间:2016-07-25 来源: eefocus关键字:ARM  Linux  代码分析 手机看文章 扫描二维码
随时随地手机看文章
以2.6.19内核为版本.

1. Boot loader在跳转到kernel之前,必须完成

    (1). CPU必须处于SVC(supervisor)模式,并且IRQ和FIQ中断都是禁止的;
    (2). MMU(内存管理单元)必须是关闭的, 此时虚拟地址对物理地址;
    (3). 数据cache(Data cache)必须是关闭的
    (4). 指令cache(Instruction cache)可以是打开的,也可以是关闭的,这个没有强制要求;
    (5). CPU 通用寄存器0 (r0)必须是 0;
    (6). CPU 通用寄存器1 (r1)必须是 ARM Linux machine type (关于machine type, 我们后面会有讲解)
    (7). CPU 通用寄存器2 (r2) 必须是 kernel parameter list 的物理地址

          (parameter list 是由boot loader传递给kernel,用来描述设备信息属性的列表,详细内容可参考"Booting ARM Linux"文档).

2. 几个重要的宏

         宏                                      位置                                        默认值                               说明
KERNEL_RAM_ADDR  arch/arm/kernel/head.S +26              0xc0008000              kernel在RAM中的的虚拟地址
PAGE_OFFSET           include/asm-arm/memeory.h +50       0xc0000000              内核空间的起始虚拟地址
TEXT_OFFSET            arch/arm/Makefile +137                     0x00008000              内核相对于存储空间的偏移
TEXTADDR                  arch/arm/kernel/head.S +49              0xc0008000              kernel的起始虚拟地址
PHYS_OFFSET           include/asm-arm/arch-xxx/memory.h   平台相关                   RAM的起始物理地址

 

3. 代码分析

    下面我们将arm linux boot的主要代码列出来进行一个概括的介绍,然后,我们会逐个的进行详细的讲解.
 
 在arch/arm/kernel/head.S中 72 - 94 行,是arm linux boot的主代码:

00072: ENTRY(stext)                                                       
00073:  msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
00074:       @ and irqs disabled       
00075:  mrc p15, 0, r9, c0, c0  @ get processor id        
00076:  bl __lookup_processor_type  @ r5=procinfo r9=cpuid    
00077:  movs r10, r5    @ invalid processor (r5=0)?
00078:  beq __error_p   @ yes, error 'p'          
00079:  bl __lookup_machine_type  @ r5=machinfo             
00080:  movs r8, r5    @ invalid machine (r5=0)? 
00081:  beq __error_a   @ yes, error 'a'          
00082:  bl __create_page_tables                                      
00083:                                                                    
00084:                                                                 
00091:  ldr r13, __switch_data  @ address to jump to after
00092:       @ mmu has been enabled    
00093:  adr lr, __enable_mmu  @ return (PIC) address    
00094:  add pc, r10, #PROCINFO_INITFUNC                               
其中,73行是确保kernel运行在SVC模式下,并且IRQ和FIRQ中断已经关闭,这样做是很谨慎的.

arm linux boot的主线可以概括为以下几个步骤:
 1. 确定 processor type                 (75 - 78行)
 2. 确定 machine type                 (79 - 81行)
 3. 创建页表                  (82行)    
 4. 调用平台特定的__cpu_flush函数        (在struct proc_info_list中) (94 行)                           
 5. 开启mmu                  (93行)
 6. 切换数据                   (91行)
 
 最终跳转到start_kernel                 (在__switch_data的结束的时候,调用了 b start_kernel)

下面,我们按照这个主线,逐步的分析Code.

 

关键字:ARM  Linux  代码分析 引用地址:ARM Linux从入口到Start_kernel代码分析 - (1)

上一篇:ARM Generic Timer
下一篇:arm linux 从入口到start_kernel 代码分析 - 2

推荐阅读最新更新时间:2024-03-16 15:01

基于ARM9的无线电台网络控制系统的设计与研究
   1、引言   在如今的信息时代,由于人们对系统性能和成本控制要求的不断提高,嵌入式系统凭其优良的性价比和独特的便利性得到了越来越多的人们的青睐。无线电台已经由传统的模拟式向数字化演进,由孤立系统向网络互联迈进。网络技术的快速发展极大地推动了嵌入式系统的发展。   随着无线电台技术的飞速发展,越来越多的行业开始使用无线电台,因为用无线电台方式实现数据采集、监视与控制,相对于架设专用的电缆或光缆,具有造价低廉、运行可靠、维护方便等优点 。无线电台的使用从最早的按键电码、电报发展到模拟电台加无线MODEM、数字电台和DSP及软件无线电。数据传输速率从低速走到高速,传输的信号从简单代码发展到遥控遥测数据、数字化语音、动态图像
[嵌入式]
Intel 10nm代工 LG两款ARM芯片现身
  苹果最新推出的A11芯片再次证明,只有自主把控芯片才能让设备发挥最大的价值。而除了苹果之外,三星,华为等也在研发自家的芯片,很多人对此可能并不陌生,但可能有些读者可能不曾了解的是,LG也拥有自家的芯片——NUCLUN,尽管最终以失败告终。下面就随网络通信小编一起来了解一下相关内容吧。     现据最新消息,LG似乎正在研发两款全新的处理器。   根据欧盟知识产权局的申请文件,LG提交了两份商标申请文件,分别是“LG KROMAX Processor" 和 "LG EPIK Processor”。LG称它们指的是“芯片 ,多处理器芯片”。        当然,目前还并没有充分的证据表明这两款芯片会运用于智能手机,它们也有
[网络通信]
ARM 内核移植中常见的错误
1.下载linux-2.6.36.1.tar.bz2 问题:tar -zxvf 解压压缩文件出现问题,无法识别. 解决:1.通过file linux-2.6.36.1.tar.bz2 查看压缩格式 2.通过命令 bzip2 -d linux-2.6.36.1.tar.bz2解压 3.再通过tar xvf linux-2.6.36.1.tar解压,不能使用 tar zxvf linux-2.6.22.6.tar解压 4.上面也可以通过一条指令bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf - 其中XX为内核压缩包文件名 2.下载p
[单片机]
英伟达回应与ARM合并案:外界夸大宣传 禁止收购后果严重
Nvidia在2020年9月份宣布斥资400亿美元收购ARM公司,由于NVIDIA股价大涨,这笔交易实际价值超过500亿美元,也就是3000多亿人民币,然而一年多过去,收购ARM的希望越来越小,反对声在加大。 有可能对这起收购案带来致命一击的是美国FTC的介入,去年初宣布起诉NVIDIA收购ARM一事之后,最近FTC又发了长文剖析了这笔交易,数落了NVIDIA收购ARM的120宗罪过,解释为什么不能允许他们收购ARM公司。 简单来说,FTC认为NVIDIA收购ARM之后会影响市场竞争,会用ARM来打击对手,这同时也会损害ARM生态,而让ARM保持中立的话,可以让大家相安无事,谁也控制不了谁。 对于这一番指控,NVIDI
[半导体设计/制造]
ARM的综合实验设计
一、实验目的 学习做一个复杂的应用程序的方法和程序结构,结合应用以前16 次实验所学到的知识,编写一个比较综合的应用。 二、实验内容 用一个列表框作为主菜单,通过键盘可以选择功能,主要的功能有:显示bmp 文件、设定系统时间、USB 下载。同时,使用文本框控件作为系统的一个状态条,显示提示信息和系统的时间。 三、预备知识 1、用ARM SDT 2.5 集成开发环境,编写和调试程序的基本过程。 2、基于操作系统的应用程序的框架结构。 3、会使用Source Insight 3 编辑C 语言源程序 4、会使用消息循环响应键盘消息 5、会使用文本框控件和列表框控件 6、会编写通过USB 连接下载的程序 7、会控制系统的时钟和多线
[单片机]
<font color='red'>ARM</font>的综合实验设计
Timesys为Tensilica处理器提供嵌入式Linux
Tensilica 和 Timesys 日前宣布 ,针对 Tensilica 钻石标准 232L 处理器提供 LinuxLink 订阅服务。 LinuxLink 订阅服务为开发者提供专为 Tensilica 232L 钻石标准处理器测试和集成的全套嵌入式 Linux 平台,包括 Linux 2.625Kernel 、 232L 专用设备驱动、基于 GNU uClibc 的工具链及数百个预先汇编的软件包。通过 Timesys 的 TimeStorm 开发环境及技术支持, LinuxLink 订阅者能快速定制和测试基于针对应用优化的 Tensilica 232L 处理器的嵌入式 Linux 平台。 Tensi
[工业控制]
ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC
1、计数器 计数器就是每隔一段固定的时间计数值就加一,于是我们可以根据计数值来计算时间:经过的时间=计数值x计数时间间隔。 2、定时器 2.1、定时器介绍 定时器具有计时的功能,类似于我们手机自带的倒计时功能。比如我们先给定时器设置计时一小时,当一小时之后定时器就会发出终端信号,提醒CPU该执行提前绑定好的中断处理程序。 2.2、定时器原理 定时器内部有一个计数器,当我们设定好计时的时间后,内部的计数器会通过计数值和计数时间间隔来计算经过的时间。当经过的时间等于设定的 计时时间,定时器就会发出终端信号,提醒CPU时间到了,该去处理相应的中断函数。定时的时间由计数值和计数时间间隔有关,其中计数时间间隔和定时器的时钟频率有关,
[单片机]
<font color='red'>ARM</font>芯片开发(S5PV210芯片)——定时器、看门狗、RTC
Linux 2.6 内核的嵌入式系统应用
  随着多媒体技术与通讯技术相结合的信息技术的快速发展和互联网的广泛应用,PC 时代也过渡到了后PC时代。在数字信息技术和网络技术高速发展的后PC时代,嵌入式技术越来越与人们的生活紧密结合。   操作系统为用户使用计算机及其外部设备提供最基本的接口程序,管理计算机上的资源。随着应用领域的扩大,为了适应不同的应用场合,考虑到系统的灵活性、可伸缩性以及可裁剪性,一种以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统——嵌入式操作系统随之延生。   Linux 操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小、可裁减
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved