版权声明:本文原创,转载需声明作者ID和原文链接地址。 Hi!大家好,我是CrazyCatJack。今天给大家带来的是Linux内核启动过程概述。希望能够帮助大家更好的理解Linux内核的启动,并且创造出自己的内核^_^ Linux的启动代码真的挺大,从汇编到C,从Ma ...
版权声明:本文原创,转载需声明作者ID和原文链接地址。
Hi!大家好,我是CrazyCatJack。今天给大家带来的是Linux内核启动过程概述。希望能够帮助大家更好的理解Linux内核的启动,并且创造出自己的内核^_^
Linux的启动代码真的挺大,从汇编到C,从Makefile到LDS文件,需要理解的东西很多。毕竟Linux内核是由很多人,花费了巨大的时间和精力写出来的。而且直到现在,这个世界上仍然有成千上万的程序员在不断完善Linux内核的代码。今天我们主要讲解的是Linux-2.6.22.6这个内核版本。说句实话,博主也不确定自己能够讲好今天这个题目,因为这个题目太大太难。但是博主有信心,将自己学会的内容清楚地告诉大家,希望大家也能够有所收获。
1.启动文件head.S和head-common.S
首先,我们必须明确“我们为什么要启动Linux内核”。没错,当然是因为我们想要使用Linux系统,要明确我们的最终目的是使用Linux上的应用程序。这些应用程序可以是纯软件的,也可以是硬件相关的。博主是做嵌入式开发的,那么我想要的当然就是用Linux内核来更好的控制我的硬件。无论是做机器人、无人机或者其他智能硬件这都是必然趋势。首先我们来看内核的启动文件head.S。
.section ".text.head", "ax" .type stext, %functionENTRY(stext) msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode @ and irqs disabled mrc p15, 0, r9, c0, c0 @ get processor id bl __lookup_processor_type @ r5=procinfo r9=cpuid movs r10, r5 @ invalid processor (r5=0)? beq __error_p @ yes, error 'p' bl __lookup_machine_type @ r5=machinfo movs r8, r5 @ invalid machine (r5=0)? beq __error_a @ yes, error 'a' bl __create_page_tables ldr r13, __switch_data @ address to jump to after @ mmu has been enabled adr lr, __enable_mmu @ return (PIC) address add pc, r10, #PROCINFO_INITFUNC
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:Linux内核启动过程概述
关键词:linux
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。