内核启动过程(根据自己心得所整理最全).doc

内核启动过程(根据自己心得所整理最全).doc

ID:50809958

大小:88.50 KB

页数:14页

时间:2020-03-14

内核启动过程(根据自己心得所整理最全).doc_第1页
内核启动过程(根据自己心得所整理最全).doc_第2页
内核启动过程(根据自己心得所整理最全).doc_第3页
内核启动过程(根据自己心得所整理最全).doc_第4页
内核启动过程(根据自己心得所整理最全).doc_第5页
资源描述:

《内核启动过程(根据自己心得所整理最全).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、内核启动过程总结之前配置编译过内核源代码,在交叉编译源代码后产生了三个文件(还有其他文件)分别是vmlinuz、vmlinux、vmlinux32,其中vmlinuz是可引导的、压缩了的内核,将该内核拷贝到系统文件/boot目录下,再配置下/boot/boot.cfg文件,将启动时选择内核的信息和加载内核的地方写入就可以实现内核的移植。其实移植过程和正常内核启动过程的原理是一样的。系统加电启动后,MIPS处理器默认的程序入口时0xBFC00000,此地址在无缓存的KSEG1的地址区域内,对应的物理地址是

2、0x1FC00000,即CPU从0x1FC00000开始取第一条指令,内核是系统引导程序把内核加载到内存中的,如果内核是经过压缩的,那么首先执行/arch/mips/boot/compressed的head.S文件去建立堆栈并解压内核映像文件,然后去执行/arch/mips/kernel下的head.S,如果是没有压缩的内核则直接去执行该head.S。linux内核启动的第一阶段就是从kernel文件夹下的head.S开始的,kernel_entry()函数就是内核启动的入口函数,这个函数是与体系结构相

3、关的汇编语言编写的,它首先初始化内核堆栈段,来为创建系统的第一个进程0进程作准备,接着用一段循环将内核映像的未初始化数据段bss段清零,最后跳转到/init/main.c中的start_kernel()初始化硬件平台相关的代码。kernel_entry()-arch/mips/kernel/head.STLB初始化,Cache初始化清除BSS段准备参数argc/argp/envp设置栈jalstart_kernel(init/main.c)怎么为第一个进程0进程作准备?第一个进程涉及到init_thre

4、ad_union,这个结构体在include/linux/sched.h得到定义externunionthread_unioninit_thread_union;unionthread_union{structthread_infothread_info;unsignedlongstack[THREAD_SIZE/sizeof(long)];};THREAD_SIZE是一个宏定义#defineTHREAD_SIZE(2*PAGE_SIZE)#definePAGE_SIZE(_AC(1,UL)<

5、_SHIFT)PAGE_SHIFT=13算出PAGE_SIZE=2^12=4096;则THREAD_SIZE=8192内核把进程存放在任务队列的双向循环链表中,链表中的每一项都是类型为task_struct、称为进程描述符的结构,进程描述符中包含一个具体进程的所有信息,linux通过slab分配器分配task_struct结构,每个任务都有一个thread_info结构,它在内核栈的尾部分配,结构中的task域中存放的是指向该任务实际task_struct的指针,thread_info结构在文件

6、/thread_info.h>中定义。structthread_info{structtask_struct*task;/*maintaskstructure*/structexec_domain*exec_domain;/*executiondomain*/unsignedlongflags;/*lowlevelflags*/unsignedlongtp_value;/*threadpointer*/__u32cpu;/*currentCPU*/intpreempt_count;/*0=>preemp

7、table,<0=>BUG*/mm_segment_taddr_limit;/*threadaddressspace:0-0xBFFFFFFFforuser-thead0-0xFFFFFFFFforkernel-thread*/structrestart_blockrestart_block;structpt_regs*regs;};/**Initialthreadstructure.**Weneedtomakesurethatthisis8192-bytealignedduetothe*wayproc

8、essstacksarehandled.Thisisdonebymakingsure*thelinkermapsthisinthe.textsegmentrightafterhead.S,*andmakinghead.Sensuretheproperalignment.**Thethingswedoforperformance..*/unionthread_unioninit_thread_union__init_task_data__at

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。