Linux内核引导时,从哪个文件中读取要加载的文件系统?

Linux内核引导时,从哪个文件中读取要加载的文件系统?,第1张

一、 Linux内核引导时,从文件【 /etc/fstab 】中读取要加载的文件系统。\x0d\x0a\x0d\x0a二、 Linux面试题部分享:\x0d\x0a1. 在Linux系统中,以 文件 方式访问设备 。\x0d\x0a2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。\x0d\x0a3. Linux文件系统中每个文件用 索引节点来标识。\x0d\x0aLinux文件系统使用索引节点来记录文件信息,作用于Windows的文件分配表类似,索引节点是一个数据结构,它包含了一个文件的文件名,位置,大小,建立或修改时间,访问权限,所属关系等文件控制信息,一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引结点数组中的唯一一个元素对应,系统为每个索引结点分配了一个号码,也就是该结点在数组中的索引号,称为索引结点号。\x0d\x0aLinux文件系统将文件索引结点号和文件名同时保存在目录中,所以目录只是将文件的名称和它的索引结点号结合在一起的一张表。目录中每一对文件名称和索引结点号称为一个连接。\x0d\x0a4. 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 和数据存储块。\x0d\x0aLinux系统中的每个文件都被赋予一个唯一的数值,这个数值称做索引节点。索引节点存储在一个称作索引节点表< inode table>中,该表在磁盘格式化时被分配。每个实际的磁盘或分区都有其自己的索引节点表。一个索引节点包含文件的所有信息,包括磁盘上数据的地址和文件类型。文件类型包括如普通文件、目录和特殊文件这样的信息。\x0d\x0alinux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block)。其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置。但是索引结点中不包括文件的名字,文件名是放在目录块里的。目录块里包含有文件的名字以及此文件的索引结点编号。

【系统启动过程简介】初始化代码读取uboot到内存里面,然后跳转到uboot那里去执行uboot,uboot初始化必要的硬件,加载一些驱动,其中包括nandflash的驱动,然后根据uboot里面设置的一个启动命令:nandread0x30007FC00x1000000x200000bootm0x30007FC0意思就是,先去读取nandflash,从0x100000开始,长度为0x200000的数据到memory的0x30007FC0处,然后bootm表示从memory的0x30007FC0开始运行。也就是去运行内核镜像了。然后,内核会自己解压缩,然后执行,初始化硬件,加载驱动模块,最后去挂载rootfs,#defineCONFIG_BOOTARGS"root=/dev/mtdblock2rwinit=/linuxrcconsole=ttyS0,115200mem=16Mrootfstype=yafffs2"此文件系统,也是你实现自己用相应的文件系统制作工具,制作的,然后烧写到对应的位置的。上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是mtd的第3个分区,去加载。而这里的mtd的第3个分区具体对应的nandflash中的的地址,是你在内核中,一般是在core.c自己定义的的nandflash的分区。一般是uboot是第一个分区,内核kernel是第二个,然后就是rootfs是第三个分区,也就是/dev/mtdblock2。例如分区:staticstructmtd_partitionrm9200_partitions[3]={{/*uboot256K*/.name="uboot",.size=0x40000,.offset=0},{/*kernel1.768M*/.name="kernel",.size=0x1C0000,.offset=0x40000},{/*rootfs2M*/.name="rootfs",.size=0x200000,.offset=0x200000},}如果按照上面分区,定义的/dev/mtdblock2的起始地址是0x200000,还算成大小是2M的位置,然后,内核启动挂载rootfs的时候,就是,以上面从uboot传过来的参数中yaffs2格式,到nandflash的2M的地址读取并加载rootfs,加载完成后,这样,里面对应的根目录,以及所有的文件,文件夹就都可以识别了。然后才会去读取并运行初始化脚本相关的东西,最后初始化console控制台,然后才能看到那个常见的#,才可以输入命令,比如ls,才可以和系统交互。所以,实际就是这个rootfs,对应着mtdblock2,对应的某个nandflash上的地址,比如此处的2M的地方。而不是内核kernel这个文件映射的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12002140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存