- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内核启动过程分析(自解压后到start_kernel)
内核启动过程分析
在学习过程中“行走的流云”的博文给了我很大的帮助,我也复制了很多他的总结,在这里感谢他!
本文件的代码主要是讲内核开始工作前的准备工作,其工作主要有一下几点:
进入管理模式,判断处理器ID是否匹配,判断机器ID是否匹配,判断atags指针是否合法。
建立页表,实现虚拟地址和物理地址的映射。
关闭Icache、Dcache、清空write buffer、使TLB无效
使能MMU、使能cache跳转到start kernel开始真正的内核运行。
对于经过压缩的内核(zImage),先运行解压缩decompress_kernel,然后还需要重定位,然后调用内核,就象跳到未压缩的内核中的开始处,内核的startup在arch/arm/kernel/head.S中,进行页表初始化和处理器缓存初始化等工作,然后跳到C代码init/main.c中的start_kernel,接下来的事情就是大众化工作了,在这里,我们继续分析解压缩后的工作,即是arch/arm/kernel/head.S的工作内容。首先先说下内核的启动条件: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?7. CPU 通用寄存器2 (r2) 必须是 kernel parameter list 的物理地址/*
* linux/arch/arm/kernel/head.S
*
* Copyright (C) 1994-2002 Russell King
* Copyright (c) 2003 ARM Limited
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Kernel startup code for all 32-bit CPUs
*/
#include linux/linkage.h
#include linux/init.h
#include asm/assembler.h
#include asm/domain.h
#include asm/ptrace.h
#include asm/asm-offsets.h
#include asm/memory.h
#include asm/thread_info.h
#include asm/system.h
#if (PHYS_OFFSET 0x001fffff)
#error PHYS_OFFSET must be at an even 2MiB boundary!//boundary(分界线)
#endif
#define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET)
#define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)
/*
* swapper_pg_dir is the virtual address of the initial page
* We place the page tables 16K below KERNEL_RAM_VADDR. Therefore, we must
* make sure that KERNEL_RAM_VADDR is correctly set. Currently, we expect
* the least significant 16 bits to be 0x8000, but we could probably
* relax this restriction to KERNEL_RAM_VADDR = PAGE_OFFSET + 0x4000.
*/ swapper_pg_dir 是初始页表的虚拟地址.我们将页表放在KERNEL_RAM_VADDR以下16K的空间中. 因此我们必须保证KERNEL_RAM_
您可能关注的文档
最近下载
- 网络预约出租汽车企业安全生产责任制和事故报告制度.pptx
- SY-T 5051-2009 钻具稳定器-石油天然气行业标准.pdf VIP
- 22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图(独立基础、条形基础、筏形基础、桩基础).docx
- 模板支架验收记录表.doc
- 标准个人租房合同模板.pdf VIP
- 2024年全国疾控系统大学习实验室质量控制规范答案.docx VIP
- 2024-2025学年初中道德与法治七年级(全一册)统编版(五四学制)(2024)教学设计合集.docx
- 小学劳动教育五年级下册第五单元2《维修凳子》教学设计.docx
- 北师大版五年级数学上册第五单元《分数的意义》(大单元教学设计).docx VIP
- 简易呼吸球囊.ppt
文档评论(0)