在python中用来引入模块的是,python自带模块包括下列哪些
虽然是转载,但是我把我认为有用的点用红色字体标注出来了,我自己的“亚伦注:“===================================================
虽然根文件系统最初是用Busybox创建的,但是根文件系统和普通文件系统的区别有点模糊。我通过查资料总结了自己对根文件系统的认识,欢迎大家一起探讨。
首先,我们需要知道“什么是文件系统”。文件系统是一种在存储设备上组织数据和元数据的机制。这种机制帮助用户与操作系统进行交互。一篇oracle技术文章写道:“虽然内核是Linux的核心,但文件是用户与操作系统交互的主要工具。对于Linux来说尤其如此。这是因为UNIX传统上使用文件I/O机制来管理硬件设备和数据文件。”我明白。如果Linux上没有文件系统,用户与操作系统的交互也会中断。例如,您不能运行最常用的交互式shell,包括其他用户程序。这里可以看出文件系统对于Linux操作系统的重要性。以下是Linux文件系统组件的架构。
用户区包含APP应用(比如文件系统用户)和GNU C库(glibc),为文件系统调用(打开、读取、写入、关闭)提供用户界面。系统调用接口就像一个开关,将系统调用从用户空间发送到内核空间中相应的端点。VFS是底层文件系统的主要接口。该组件导出一系列接口,并将它们抽象成一个文件系统。每个文件系统的行为可能会有很大的不同。文件系统对象有两个缓存(inode和dentry)。缓存最近使用的文件系统对象。对于每个文件系统实现(比如ext2和JFS),将导出一组用于VFS的通用接口。缓冲区缓存缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读/写请求通过缓冲区高速缓存传递。这可以缓存请求,减少对物理设备的访问次数,并缩短访问时间。将缓冲区高速缓存作为最近使用的(LRU)列表进行管理。您可以使用sync命令将缓冲区高速缓存中的请求发送到存储介质。这意味着所有未写入的数据都必须发送到设备驱动程序,然后再发送到存储设备。当我们提到Windows下的文件系统时,你的第一反应是什么?而不是Windows下的Fat32、NTFS等几种文件系统类型。在Linux上,你可能会想到Ext2和Ext3,但是你也需要根文件系统的概念。根文件系统是第一个具有存储常规文件系统数据文件功能的文件系统,但与常规文件系统不同的是,它是内核启动时挂载的第一个文件系统。内核代码映像文件是根文件系统启动启动器,它加载一些初始化脚本(rcS、inittab等)。)和服务加载到内存中,并在挂载根文件系统后运行它们。你必须明白文件系统和内核是两个完全独立的部分。将嵌入式移植内核下载到开发板时,会出现Linux无法正式启动,文件系统无法加载的错误。在系统启动期间,根文件系统是在什么时候装载的?加载/dev/ram0,然后运行/linuxrc。等待跑步结束。切换根目录以挂载特定的根文件系统。根文件系统运行后,也就是Start_kernel()函数结束时,运行第一个用户进程init的进程。在系统上执行各种初始化操作。如果你知道这里的流程,请仔细查看Linux内核的源代码。之所以在根文件系统之前加上“root”,是因为这意味着加载了其他文件系统的“root”。因为它是根,所以没有它就不能加载其他文件系统。包含引导系统和挂载其他文件系统所需的文件。根文件系统包含Linux启动所需的目录和重要文件。例如,当Linux启动时,它需要init目录中的相关文件,但是当Linux挂载分区时,它总是查找名为/etc/fstab的挂载文件。根文件系统包括APP应用hsdxbw等很多目录。启动这些Linux系统所需的文件也是根文件系统。
Linux启动时必须首先挂载根文件系统;如果无法从指定的设备装载根文件系统,系统将出现错误并终止引导。成功后,可以自动或手动挂载其他文件系统。因此,一个系统可以同时拥有不同的文件系统。
在Linux上,将文件系统与存储设备相关联的过程称为挂载。使用mount命令将文件系统连接到当前文件系统层次结构(根)。在挂载时,它提供文件系统类型、文件系统和挂载。当根文件系统挂载到根目录下的“/”时,根目录下有根文件系统的每个目录和文件:/hsdxbw /shsdxbw /mnt等。/mnt目录。
Linux根文件系统通常有几个目录,如下图所示。1./hsdxbw目录
该目录包含所有用户都可以使用的基本命令。/hsdxbw目录必须与根文件系统在同一个分区中,因为这些命令在连接到其他文件系统之前是可用的。
/hsdxbw目录中的一个常用命令是cat。
、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、mknod、[、test和其他"["命令实际上是测试命令。当我们用Busybox做根文件系统的时候,在生成的hsdxbw目录中可以看到一些可执行文件,也就是一些可用的命令。
2./shsdxbw目录
该目录存储系统命令,即只能由管理员使用的命令。系统命令也可以存储在/usr /shsdxbw、/usr/local /shsdxbw目录中。基本系统命令存储在/shsdxbw目录中,用于启动和修复系统。与/hsdxbw目录类似,/shsdxbw可以在挂载其他文件系统之前使用,因此/shsdxbw
/shsdxbw目录下常用的命令有:shutdown reboot fdisk fsck等。本地用户安装的系统命令放在/usr/local/shsdxbw目录中。
3./dev目录
这个目录存储设备文件,这些文件在Linux中是唯一的文件类型。在Linux系统下,你可以以文件的形式访问各种设备,也就是通过读写一个设备文件,你就可以把它作为一个特定的硬件来操作。比如串口0可以用 dev/ttySAC0 文件操作,MTD设备的第二个分区可以用/dev/mtdblock1 访问。4./etc目录
各种配置文件都存储在这个目录中。对于PC上的Linux系统,/etc目录下有很多文件和目录。这些目录文件是可选的,它们取决于系统中拥有的应用程序以及这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大大减少。
5./lib目录
该目录存储共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如/hsdxbw /shsdxbw目录中的程序。(阿龙注:我指定了LD_LIBRARY_PATH的路径,导致/hsdxbw和/shsdxbw下的部分程序无法使用)
6./主目录
用户目录,这是可选的。对于每一个普通用户来说,在/home目录下都有一个以用户名命名的子目录,存放着用户相关的配置文件。
7./根目录
root用户的目录,与此对应,普通用户的目录是/home下的子目录。
8./usr目录
/usr目录的内容可以存储在另一个分区中,然后在系统启动后链接到根文件系统中的/usr目录。它存储共享的、只读的程序和数据,这意味着/usr目录中的内容可以在多台主机之间共享,这主要符合FHS标准。/usr中的文件应该是只读的,与其他主机相关,变量文件应该保存在其他目录中,比如/var。/usr目录在嵌入式系统中可以简化。
9./var目录
与/usr目录相反,/var目录存储可变数据,如spool目录(邮件、新闻)、日志文件和临时文件。
10./proc目录
这是一个空目录,通常用作proc文件系统的挂载点。proc文件系统是一个虚拟文件系统,它没有实际的存储设备。里面的目录和文件是内核临时生成的,用来指示系统的运行状态,也可以操作文件控制系统。
1./mnt目录
用来临时挂载文件系统的挂载点通常是一个空的目录,也可以用普通的笔创建一个空的子目录,比如/mnt/cdram /mnt/hda1。用于临时安装CD。硬盘,
12./tmp目录
用于存储临时文件,通常是一个空目录。一些需要生成临时文件的程序使用/tmp目录,因此/tmp目录必须存在并且可以访问。
然后我们用Busybox做根文件系统,就是在上面创建这些目录,在这些目录下面创建各种文件。
对于嵌入式Linux系统的根文件系统,一般没有上面列举的那么复杂。比如嵌入式系统通常不是针对多用户的,所以一般嵌入式Linux可能很少使用目录/home,目录/boot取决于你正在使用的BootLoader能否在内核从你的根文件系统启动之前重新获得内核镜像。一般来说,只有/hsdxbw、/dev、/etc、/lib、/proc、/var、/usr是必选的,其他都是可选的。根文件系统一直是所有类Unix操作系统的重要组成部分,也可以认为是嵌入式Linux系统区别于其他传统嵌入式操作系统的重要特征。它给Linux带来了许多强大而灵活的功能,但也带来了一些复杂性。我们需要清楚地了解根文件系统的基本结构,仔细选择所需的系统库、内核模块和应用程序,并配置各种初始化脚本文件,以及选择合适的文件系统类型并将其放在实际存储设备的适当位置。下面是一些常用的文件系统。
(1) jffs2 JFFS嵌入式系统文件系统最早是由瑞典Axis通信公司基于Linux2.0内核为嵌入式系统开发的。JFFS2是由JFFS的RedHat公司开发的flash文件系统。它原本是为RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux上。Jffs2:日志闪存文件系统版本2(日志闪存文件系统版本2)主要用于NOR型闪存,基于MTD驱动层。它的特点是可以读写的日志文件系统,支持数据压缩,基于哈希表。它还提供崩溃/电源故障安全保护和“写平衡”支持。主要缺点是当文件系统已满或接近满时,jffs2的运行速度会因为垃圾收集而大大减慢。目前jffs3正在开发中。关于jffs系列文件系统使用的详细文档,请参考MTD补丁包中的MTD-jffs-howto.txt。Jffsx不适合NAND闪存是因为NAND闪存的容量普遍较大,导致jffs维护日志节点占用的内存空间迅速增加。另外,jffsx文件系统挂载时,需要扫描整个闪存,找出所有日志节点,建立文件结构,对于大容量NAND闪存来说,会耗费大量时间。(2) YAFFS:另一种闪存文件系统YAFFS/YAFFS2是专门为使用NAND闪存的嵌入式系统设计的日志文件系统。相比jffs2减少了一些功能(比如不支持数据压缩),所以速度更快,挂载时间更短,占用内存更少。此外,它还是一个跨平台的文件系统。除了Linux和eCos,还支持WinCE、pSOS和ThreadX。Yaffs/yaffs2是NAND芯片的驱动自带的,为嵌入式系统直接访问文件系统提供了一个API。用户可以直接操作文件系统,而不需要使用Linux中的MTD和VFS。当然yaffs也可以配合MTD驱动使用。yaffs和yaffs2的主要区别在于,前者只支持小页(512字节)NAND闪存,而后者可以支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾收集速度、读写速度等方面都有了很大的提升。(3) Cramfs:压缩ROM文件系统Cramfs是由Linux的创始人Linus Torvalds开发的只读压缩文件系统。它也是基于MTD驱动的。在cramfs文件系统中,每个页面(4KB)都是单独压缩的,可以随机访问,其压缩比高达2:1,为嵌入式系统节省了大量的FLASH存储空间,使系统可以通过更低容量的Flash存储相同的文档,从而降低系统成本。Cramfs文件系统以压缩模式存储,并在运行时解压缩,因此它不支持应用程序以XIP模式运行。所有的应用都需要拷贝到RAM中才能运行,但这并不意味着Ramfs需要的RAM空间就大一点,因为Cramfs使用分页压缩来存储文件,在读取文件时,不会一下子消耗太多内存空间。只为当前实际读取的部分分配内存,没有为尚未读取的部分分配内存空间。当我们读取的文件不在内存中时,Cramfs文件系统会自动计算压缩数据的位置,然后立即将其解压缩到RAM中。另外,它的速度快,效率高,只读的特性有助于保护文件系统不被破坏,从而提高系统的可靠性。由于上述特点,Cramfs被广泛应用于嵌入式系统中。但是,它的只读属性也是一大缺陷,这使得用户无法扩展它的内容。Cramfs镜像一般放在Flash中,但也可以放在其他文件系统中,使用环回设备可以安装在其他文件系统中。(4)网络文件系统NFS (Network File System)
NFS是Sun公司开发的一项技术,通过网络在不同的机器和不同的操作系统之间共享文件。在嵌入式Linux系统的开发和调试阶段,利用该技术可以在主机上建立基于NFS的根文件系统,并将其挂载到嵌入式设备上,从而可以方便地修改根文件系统的内容。以上都是基于内存的文件系统,可以作为Linux的根文件系统。其实Linux也支持逻辑或者伪文件系统,比如获取系统信息的procfs(proc文件系统),维护设备文件的devfs(设备文件系统)和sysfs。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。