linux启动时加载内核到内存中,那这样是不是意味着系统正常启动后就可以把内核删掉了啊?当然就没有办法

黄砚屏 2019-12-21 19:48:00

推荐回答

vmlinuzvmlinuz是可引导的、压缩的内核文件。该文件包含了一个最小功能的内核,在PC上通常是先执行vmlinuz,之后加载initrd.img文件,最后加载根分区。initrd文件initrd是“initialramdisk”的简写。就是由Bootloader初始化的内存盘。在linux内核启动之前,Bootloader会把存储介质中的initrd文件加载到内存,内核启动时会在访问到真正的根文件系统前访问内存中的initrd文件系统。
龙希庆2019-12-21 19:56:06

提示您:回答为网友贡献,仅供参考。

其他回答

  • ,很高兴为您解答。可参考:http://www.educity.cn/linux/1607443.html如若满意,请点击右侧希望我的回答对您有所帮助,!~O∩_∩O~。
    窦连福2019-12-21 20:54:52
  • 开机--加电自检--读取CMOS设置--从硬盘引导记录查找系统所在位置--读取GRUB配置文件,打开默认运行级别,加载相应服务,开机启动项--完成启动过程。
    黄盛琰2019-12-21 20:37:24
  • 这是一个很好的问题;因为如果先加载驱动,那么没有内核启动,他是怎么加载驱动的呢?如果先加载内核那他是怎么识别文件系统和磁盘驱动的呢?是一个先有鸡还是先有蛋的问题;在rel系列的操作系统中;在/boot目录下有grub目录,还有initrd-XXX.img,还有vmlinuz.....其实这3个文件和目录是系统启动的关键;grub第一阶段在MBR中,功能就是引导第2阶段,第1.5阶段和第2阶段在/boot/grub当中;为什么叫他1.5阶段,是因为系统中就这么命名的;而1.5阶段中就启动需要的常见的文件系统类别,当然如果自制系统,可以把文件系统模块放到这个里面;第2阶段就是为了引导系统的;之后系统启动,然后通过rc.sysinit开始加载和初始化各种驱动;所以你的问题的总结是:先部分驱动,然后系统,然后全部驱动;当时学完了这个就自制了在手机上启动一个linux;当然也可以称为安卓;因为我也是用busybox实现的;只是没有好看画面,还有驱动不全;只是能启动而已。
    齐月娥2019-12-21 20:19:43
  •    linux的内核的确是由bootloader装载到内存中的。linux的bootloader有2个部分组成:bootstrap和uboot。所以更准确点的说法是:linux的内核是由uboot装载到内存中的。内核文件本身是存放在硬盘的文件系统中,这句话就是错的。内核和文件系统是分开存储的。uboot读取kernel到内存是从kernel开始存储的地址开始读取的,而读取开始位置和读取大小,是由环境变量决定的。所以这个时候不需要文件系统的。   给你张图片,便于理解吧。这张图片是bootstrap、uboot、环境变量、kernel、文件系统在nandflash里面的存储分布。其中rootfs.jfss2就是文件系统。
    齐旭明2019-12-21 20:05:45

相关问答

转自知乎蓝色我最近和Clang/LLVM打交道比较多,目前游离在LLVMIR和IBMWCode之间。对于学习Clang/LLVM来说,其实需要看你做什么,是研究C,C++,Objective-C在Clang的实现,抑或着是想利用Clang做AST层面的事情,还是说想要利用LLVMIR来做一些事情,抑或着你是想要添加LLVM优化,还是说想要为LLVM添加新的体系结构支持.......Clang/LLVM现在都很大了,所以需要了解好自己想要的是什么,然后去针对的阅读,而非直接就开始一大块的开始,这实在是太大了。而在阅读源代码之前,无论如何,首先是需要基本的编译原理知识。你需要知道我们编译器的几个基本步骤,如词法分析,语法分析,语意分析,代码生成等过程,有了这个基本的思路,你才不至于迷失在Clang的浩海代码中,如看见Sema,AST,CodeGen这样的字眼你也能对应上这是哪个阶段的,若你想要了解C,C++,Objective-C等的实现,大部分都要集中在Lexer,Parser,AST,Sema等部分。与此同时,若你想要理清楚,明白为什么这么实现,如C++。那么,你还需要备一份C++标准,并且熟悉C++标准的常用语,至少可以分清楚Declaration,Definition,L-Value,R-Value等,因为你会看见Clang有很多Decl,若不理解Declaration,你很难理解为什么会有这么多Decl冒出来。而这一部分代码的阅读,我会推荐当你想要了解某一部分的实现时再去挑着读,而非挨着挨着读。而若你如我一样,需要直接面对LLVMIR,那么你更多需要的是学习LLVMIRLanguage,即LLVMLanguageReferenceManual,但是我知道直接看这样的文档是抽象的,是无趣的,我也如此。那么其实最好的办法就是从C/C++程序dump出.ll文件,然后阅读它,修改它,看看会发生什么。同时,在这个阶段,你需要更多的有关链接器,ObjectFile,SymbolTable等知识,这样才能更好的做这件事情。而这阶段的代码,主要都是都在ClangCodeGen里面,所以你要阅读代码这部分是比较集中的,但是你要完整理清楚,你还是不可避免的需要从Driver等部分开始,但是你若是只想知道IR,大部分在CodeGen,Clang的源码大多是CG****。若你是做LLVM后端的话,这部分我了解的比较少,但是LLVM最好的地方就是它文档还算好,如我立马就找到了一个相关的东西:WritinganLLVMBackend然后空明大神补了一个:TheLLVMTarget-IndependentCodeGenerator。