linux内核解析慧知文库

linux内核解析慧知文库

ID:17585805

大小:384.00 KB

页数:65页

时间:2018-09-03

linux内核解析慧知文库_第1页
linux内核解析慧知文库_第2页
linux内核解析慧知文库_第3页
linux内核解析慧知文库_第4页
linux内核解析慧知文库_第5页
资源描述:

《linux内核解析慧知文库》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux内核解析0.6原文地址:http://www.jactc.com/view/2812481901a421483d7f76ba1c2c01b4.htmlLinux内核解析IBootstrap1汇编代码分析2start_kernel函数3准备进入用户态3.1Initrd初始化3.1.0准备知识在讲述如何释放initrd到rootfs之前,有比较讲述一下什么是rootfs,rootfs的初始化相关的函数;以及rootfs的初始化函数是如何被调用的。这里所说的rootfs指的是VFS的根节点/,以及在内存中创建的根目录/下的文

2、件和目录节点,这个文件系统仅仅存在于内存之中,由内核初始化的时候负责创建,该文件系统不会存储到其它非易失性介质上。该rootfs文件系统mnt_init函数调用init_rootfs和init_mount_tree两个函数来负责创建和初始化:void__initmnt_init(void){......//这个函数很简单,就是注册了rootfs的文件系统。init_rootfs();//在这里,将rootfs文件系统挂载,它的挂载点默认为”/”。//最后切换进程的根目录和当前目录为”/”,这也就是根目录的由来。//不过这里只是初

3、始化,等挂载完具体的文件系统之后,//一般都会将根目录切换到具体的文件系统,所以在系统启动之后,//用mount命令是看不到rootfs的挂载信息的。init_mount_tree();}有了rootfs后,就可以将initrd的image释放到rootfs中了,至于哪个函数完成这项工作?在讲述该函数之前,我们首先看看该函数是如何被调用的。首先看kernel_init函数中的do_basic_setup函数:staticint__initkernel_init(void*unused){......do_basic_setup(

4、);}do_basic_setup()是一个很关键的函数,所有直接编译在kernel中的模块都是由它启动的。/**Ok,themachineisnowinitialized.Noneofthedevices*havebeentouchedyet,buttheCPUsubsystemisupand*running,andmemoryandprocessmanagementworks.**Nowwecanfinallystartdoingsomerealwork..*///注意上面的关于该函数的注释:CPU和进程管理模块已经正常工作

5、,但是外设还没初始化。staticvoid__initdo_basic_setup(void){cpuset_init_smp();usermodehelper_init();init_tmpfs();driver_init();init_irq_proc();do_ctors();//启动所有在__initcall_start和__initcall_end段的函数,//而静态编译进内核的modules也会将其入口放置在这段区间里。do_initcalls();}将initrd的image释放到rootfs中的工作是由popul

6、ate_rootfs函数完成,该函数由rootfs_initcall()所引用。注意到有以下初始化函数:rootfs_initcall(populate_rootfs);如此:也就是说会在系统初始化的时候,也就是do_initcalls被调用的时候,会调用populate_rootfs进行初始化。3.1.1释放initrd总的来说,rootfs分为两种:虚拟rootfs和真实rootfs。现在kernel的发展趋势是将更多的功能放到用户空间完成,以保持内核的精简。虚拟rootfs也是各linux发行厂商普遍采用的一种方式,可以将

7、一部份的初始化工作放在虚拟的rootfs里完成,然后切换到真实的文件系统。在虚拟rootfs的发展过程中,又有以下几个版本:Initramfs:Initramfs是在kernel2.5中引入的技术,实际上它的含义就是:在内核镜像中附加一个cpio包,这个cpio包中包含了一个小型的文件系统,当内核启动时,内核将这个cpio包解开,并且将其中包含的文件系统释放到rootfs中,内核中的一部分初始化代码会放到这个文件系统中,作为用户层进程来执行。这样带来的明显的好处是精简了内核的初始化代码,而且使得内核的初始化过程更容易定制。这种这

8、种方式的rootfs是包含在kernelimage之中的。cpio-initrd:cpio格式的rootfsimage-initrd:传统格式的rootfs将在下文具体讲述这两种initrd。populate_rootfs代码如下:/**处理Initramfs/

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

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

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