- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux_mips启动流程_存储相关
Linux-mips启动流程
-存储相关
linux内核启动的第一个阶段是从 /arch/mips/kernel/head.s文件开始的。而此处正是内核入口函数kernel_entry(),该函数定义在 /arch/mips/kernel/head.s文件里。kernel_entry()函数是体系结构相关的汇编语言,它首先初始化内核堆栈段,来为创建系统中的第一个进程进行准备,接着用一段循环将内核映像的未初始化数据段(bss段在_edata和_end之间)清零,最后跳转到/arch/mips/kernel/setup.c 中的 start_kernel()初始化硬件平台相关的代码。下面讲述start_kernel() 函数。在这个函数中跟内存初始化的函数是setup_arch()。
第一部分:以函数调用关系为线索
下面是函数之间调用关系的框图:
第一章:start_kenel()-setup_arch()
setup_arch(command_line);每种体系结构都有自己的 setup_arch() 函数,这些是体系结构相关的。【如何确定编译那个体系结构的 setup_arch() 函数呢?主要由 linux 源码树顶层 Makefile 中 ARCH 变量来决定的。例如: MIPS 体系结构的。SUBARCH := mips
ARCH ?= $(SUBARCH)】。
void __init setup_arch(char **cmdline_p)
{
cpu_probe();
调用函数cpu_probe(),该函数通过MIPS CPU的PRID寄存器来确定CPU类型,
从而确定使用的指令集和其他一些CPU参数,如TLB等
prom_init();
prom_init() 函数是和硬件相关的,做一些低层的初始化,接受引导装载程序传给内核的参数,确定 mips_machgroup,mips_machtype 这两个变量,这两个变量分别对应着相应的芯片组合开发板;
cpu_report();
打印 cpu_probe() 函数检测到的 CPU 的 Processor ID。如果有浮点处理器,也打印浮点处理器的 Processor ID。
【应用程序通过终端接口设备使用特定的接口规程与终端进行交互,与操作系统内核本身交互的终端称为控制台,
它可以是内核本身的内部显示终端,也可以是通过串口连接的外部哑终端。
由于大多数情况下控制台都是内核显示终端,因此内核显示终端也常常直接称为控制台。
内核终端对用户来说具有若干个虚拟终端子设备,它们共享同一物理终端,
但同一时刻只能有一个虚拟终端操作硬件屏幕。
宏 CONFIG_VT 的意思是否支持虚拟终端。
当配置了宏 CONFIG_VGA_CONSOLE 时为内核本身的内部显示终端。
当配置了宏 CONFIG_DUMMY_CONSOLE 时为通过串口连接的外部哑终端。
用变量 conswitchp 来进行指定。
#if defined(CONFIG_VT)
#if defined(CONFIG_VGA_CONSOLE)
conswitchp = vga_con;
#elif defined(CONFIG_DUMMY_CONSOLE)
conswitchp = dummy_con;
#endif
#endif】
arch_mem_init(cmdline_p);
对内存进行初始化。
resource_init();
这个函数遍历每一个内存空间范围(物理地址),在资源管理器中进行资源申请,并对内核代码和数据段进行资源申请。
#ifdef CONFIG_SMP
plat_smp_setup();
#endif
} / /start_kernel函数到此结束(以下均是)。
以下图片是截自版本linux-2.6.34内核版本。
第二章:start_kenel()-setup_arch()-arch_mem_init()
接下来我们看看arch_mem_init()函数中的函数调用关系及各自的功能。
static void __init arch_mem_init(char **cmdline_p)
{
plat_mem_setup();
这个函数是平台具体相关的,移植内核需要自己手动编写。对于开发板的 CPU 和 board 的初始化都是在这个函数中进行的。detects the memory configuration and will record detected mem
您可能关注的文档
最近下载
- 小学数学名师工作室年度工作计划 .docx VIP
- 青少年保健专科建设和管理指南.pptx
- LNG购销总协议-中英文对照.pdf
- 全球及中国婴幼儿辅食行业蓝皮书-CIC灼识咨询-2025.pptx
- 2025中国南水北调集团新能源投资有限公司第一批中层及职员岗位社会招聘模拟试卷含答案解析.docx VIP
- 2025中国南水北调集团新能源投资有限公司第一批中层及职员岗位社会招聘模拟试卷含答案详解.docx VIP
- 部编版五年级语文上册语文园地三.ppt VIP
- 食材配送应急预案.docx VIP
- 《GBT 97.4-2002 平垫圈用于螺钉和垫圈组合件》知识培训.pptx VIP
- 现代化工导论 课件(化工)第10章.pptx VIP
文档评论(0)