Linux内核解析 0.6

Linux内核解析 0.6

ID:40752872

大小:2.97 MB

页数:259页

时间:2019-08-07

Linux内核解析 0.6_第1页
Linux内核解析 0.6_第2页
Linux内核解析 0.6_第3页
Linux内核解析 0.6_第4页
Linux内核解析 0.6_第5页
资源描述:

《Linux内核解析 0.6》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux内核解析IBootstrap1汇编代码分析2start_kernel函数3准备进入用户态3.1Initrd初始化3.1.0准备知识在讲述如何释放initrd到rootfs之前,有比较讲述一下什么是rootfs,rootfs的初始化相关的函数;以及rootfs的初始化函数是如何被调用的。这里所说的rootfs指的是VFS的根节点/,以及在内存中创建的根目录/下的文件和目录节点,这个文件系统仅仅存在于内存之中,由内核初始化的时候负责创建,该文件系统不会存储到其它非易失性介质上。该rootfs文件系统mnt_init函数调用init_root

2、fs和init_mount_tree两个函数来负责创建和初始化:void__initmnt_init(void){......//这个函数很简单,就是注册了rootfs的文件系统。init_rootfs();//在这里,将rootfs文件系统挂载,它的挂载点默认为”/”。//最后切换进程的根目录和当前目录为”/”,这也就是根目录的由来。//不过这里只是初始化,等挂载完具体的文件系统之后,//一般都会将根目录切换到具体的文件系统,所以在系统启动之后,//用mount命令是看不到rootfs的挂载信息的。init_mount_tree();}有了ro

3、otfs后,就可以将initrd的image释放到rootfs中了,至于哪个函数完成这项工作?在讲述该函数之前,我们首先看看该函数是如何被调用的。首先看kernel_init函数中的do_basic_setup函数:staticint__initkernel_init(void*unused){......do_basic_setup();}do_basic_setup()是一个很关键的函数,所有直接编译在kernel中的模块都是由它启动的。/**Ok,themachineisnowinitialized.Noneofthedevices*hav

4、ebeentouchedyet,buttheCPUsubsystemisupand*running,andmemoryandprocessmanagementworks.**Nowwecanfinallystartdoingsomerealwork..*///注意上面的关于该函数的注释:CPU和进程管理模块已经正常工作,但是外设还没初始化。staticvoid__initdo_basic_setup(void){cpuset_init_smp();usermodehelper_init();init_tmpfs();driver_init();i

5、nit_irq_proc();do_ctors();//启动所有在__initcall_start和__initcall_end段的函数,//而静态编译进内核的modules也会将其入口放置在这段区间里。do_initcalls();}将initrd的image释放到rootfs中的工作是由populate_rootfs函数完成,该函数由rootfs_initcall()所引用。注意到有以下初始化函数:rootfs_initcall(populate_rootfs);如此:也就是说会在系统初始化的时候,也就是do_initcalls被调用的时候,

6、会调用populate_rootfs进行初始化。3.1.1释放initrd总的来说,rootfs分为两种:虚拟rootfs和真实rootfs。现在kernel的发展趋势是将更多的功能放到用户空间完成,以保持内核的精简。虚拟rootfs也是各linux发行厂商普遍采用的一种方式,可以将一部份的初始化工作放在虚拟的rootfs里完成,然后切换到真实的文件系统。在虚拟rootfs的发展过程中,又有以下几个版本:Initramfs:Initramfs是在kernel2.5中引入的技术,实际上它的含义就是:在内核镜像中附加一个cpio包,这个cpio包中包

7、含了一个小型的文件系统,当内核启动时,内核将这个cpio包解开,并且将其中包含的文件系统释放到rootfs中,内核中的一部分初始化代码会放到这个文件系统中,作为用户层进程来执行。这样带来的明显的好处是精简了内核的初始化代码,而且使得内核的初始化过程更容易定制。这种这种方式的rootfs是包含在kernelimage之中的。cpio-initrd:cpio格式的rootfsimage-initrd:传统格式的rootfs将在下文具体讲述这两种initrd。populate_rootfs代码如下:/**处理Initramfs/cpio-initrd/

8、image-initrd三个格式的image。*主要功能实现了将Initramfs/cpio-initrd两种格式的image释放到ro

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

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

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