问题二:什么是根文件系统 根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
问题三:什么是根文件系统 根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
Linux启动时,第一个必毕枝须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可手孙敏以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
在Linux中,必须要有一个根文件系统的概念。根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。
mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 目前mount已经不仅仅局限于Linux了。在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上,比如Clone CD,Daemon tool,WinMount等。
根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/linuxrc.等其执行完后。切换根目录,再挂载具体的根文件系统.根文件系统执行完之后,也就是到了Start_kernel()函数的最后,执行init的进程,也就第一个用户进程。对系统进行各种初始化的 *** 作。
根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。
问题四:什么是根文件系统 下面是从Undertanding the linux kernel 3rd摘录的 12.4. Filesystem Handling Like every traditional Unix system, Linux makes use of a system 's root filesystem : it is the filesystem that is directly mounted by the kernel during the booting phase and that holds the system initialization scripts and the most essential system programs. Other filesystems can be mountedeither by the initialization scripts or directly by the userson directories of already mounted filesystems. Being a tree of directories, every filesystem has its own root directory. The directory on which a filesystem is mounted is called the mount point. A mounted filesystem is a child of the mounted filesystem to which the mount point directory belongs. For instance, the /proc virtual filesystem is a child of the system 's root filesystem (and the system 's root filesystem is the parent of /proc). The root directory of a mounted filesystem hides the content of the mount point directory of the parent filesystem, as well as the whole subtree of the parent filesystem below the mount point.简单的来说,我认为根文件系统就是一种目录结构,那么根文件系统和普通的文件系统有什么区别呢?我认为根文件系统就是要包括Linux启动时所 必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个 挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux系统启动所必须的文件都可以成为根文件系统。 Linux支持多种文件系统类型,在嵌入式上常用的有:ROMFS,JFFS2,NFS,CRAMFS,YAFFS等等。在Linux系统中是通过mount命令来挂载不同的文件系统。在ARM Linux中常用的文件系统的配置:RAM Disk Driver + EXT2MTD Driver + JFFS2/YAFFSNFSuclinux中常见的文件系统配置为:Blkmem Driver + ROMFS(支持 Nor ......>>
问题五:什么是根文件系统 是文件系统根目录么?就是你分区之后的盘符的首层路径。如:C:/这类的。
问题六:根文件系统的文件系统 (1)jffs2JFFS嵌入式系统文件系统最早是由瑞典 Axis munications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。Jffs2: 日志闪存嵌入式系统文件系统版本2 (Journalling Flash FileSystem v2)主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。(2)yaffs:Yet Another Flash File Systemyaffs/yaffs2是专为嵌入式系统使用 NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统 *** 作。当然,yaffs也可与MTD驱动程序配合使用。yaffs与 yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。(3) Cramfs:pressed ROM File SystemCramfs是Linux的创始人 Linus Torvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比 Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到 RAM中。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。由于以上特性,Cramfs在嵌入式系统中应用广泛。但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs映像通常是放在Flash中......>>
问题七:Linux 根文件系统 为什么 重要 没有根,也就没法向上长成树;当然,Linux里的文件系统一般是一棵倒着的树。
既然根对一棵真树那么重要,在Linux里也可以类推了。
根文件系统是其他文件的最终挂载点,没有根文件系统,就像一棵被砍成七零八落的树,乱七八糟了。。。
问题八:什么是linux根文件系统移植 linux文件系统格式挺复杂多样的,如ext、ext2、ext3、ext4、jsf、 、xfs、ReiserFS等。 一般情况下,linux根分区文件系统多数用ext3、ext4,安装时你可以选择。
问题九:Linux内核中有文件系统模块, 那它和根文件系统什么关系哦? linux内核是linux的真实的 *** 作系统,所有的 *** 作系统的相关功能都是由用户接口程序传递到内核由内核来完成的。
linux文件系统是指linux *** 作系统对整个系统中的所有的数据、文件的管理的一种实现方式。
简单点说:像windows它的文件系统是NTFS文件系统或者FAT文件系统,通过这种方式将windows的各种文件保存在磁盘上,用于存储和访问了。
而linux系统则使用ext这种文件系统来实现。
问题十:Linux 根文件系统 为什么 重要 没有根,也就没法向上长成树;当然,Linux里的文件系统一般是一棵倒着的树。 既然根对一棵真树那么重要,在Linux里也可以类推了。 根文件系统是其他文件的最终挂载点,没有根文件系统,就像一棵被砍成七零八落的树,乱七八糟了。。。如果你还有什么不懂的就去看看《Linux就该这么学》这本书。
为了在虚拟机Ubuntu中挂载nfs成功,期间遇到了很多的问题。今天挂载成功后,才觉得那些问题中有很多都是可以避免的。但也许从另一个角度来讲,也是在锻炼自己的能力。先说一说主要的步骤,然后我就说说要挂载成功的几个关键地方吧,你挂载不成功,很有可能就是这几个关键地方没有做好。
首先第一步就是要为开发板烧写uboot和kernel。
1.先将SD卡格式化为FAT32格式。将启动代码固化到SD卡中。
能出现的问题:1 volume erro之类的。
解决方法:重新插拔SD卡,某些情况下可能要换一张SD卡试一试。
2.下载Uboot到nandflash中并设置或茄Uboot工作参数。注意的就是串口和波特率要设置对。
可能出现的问题:
1.ARNING: OEMMultiBINNotify: Invalid BIN region descriptor(s).
Don't support raw image
解决方法:这种情况请注意选这从USB Port-->UBOOT-->UBOOT”,注意是选Uboot,而不是选transmit。
2.无法将uboot写进nandflash
解决方法:请一直按着ENTER键,直到OK出现。(这一般是nand erase没有干净,一定要等到OK出现。如果不出现,说明没有擦除干净)
3.烧写Kernel。
可能出现的问题一般同上面的2,注意我说的几点即可。
4.安装根文件系统,也是非常重要的一步。如果你要安装yaffs2文件,这其中又会涉及要挂在NFS。
假设我们要安装的是yaffs2文件。
首先第一步:安装NFS
在主机(我是在虚拟机中的Ubuntu)上安装NFS服务软件,因为Debian/Ubuntu上默认是没有安装的。
1、安装端口映射器portmap(可选)
$ sudo apt-get install portmap
2、在终端提示符后键入以下命令安装高团森NFS服务器
$ sudo apt-get install nfs-kernel-server
3、安装NFS客户端(可选)
$ sudo apt-get install nfs-common
注意:nfs- kernel-server和nfs-common都依赖于portmap。另外,在一些文档中提出还需要使用apt-get来手动安装NFS的客户端 nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自戚亩动把它们安装好。
这样,宿主机就相当于NFS Server。同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Debian/Ubuntu系统,则需要安装nfs- common(第3步)。
第二步:配置NFS
1、配置portmap
方法1:编辑/etc/default/portmap,将"-i 127.0.0.1"去掉;
方法2:$ sudo dpkg-reconfigure portmap,出现“正在设定portmap”软件包设置界面,对Should portmap be bound to the loopback address?选择“否(No)”。
第三步:创建共享目录
例如我们采用/home/localhost/arm6410/root作为NFS共享目
$ sudo mkdir arm6410
$ cd arm6410
$ sudo mkdir root
$ chmod 777 arm6410 (更改文件权限,这个一定要改,不然很可能后面会出问题)
$ chmod 777 root (更改文件权限,这个一定要改,不然很可能后面会出问题)
第四步:配置共享目录及yaffs2文件
修改主机上/etc/exports文件的内容,添加一行:/home/localhost/arm6410/root*(rw,sync,no_root_squash)
$ sudo vim /home/localhost/arm6410/root*(rw,sync,no_root_squash)
注:后面设置uboot启动参数的时候,目录名要和这个一样。
其中:
/home/localhost/arm6410/root表示NFS共享目录,它可以通过NFS挂接作为开发板的根文件系统;
* 表示所有的客户机都可以挂接此目录,当然你也可以指定具体的IP,如192.168.x.x;
rw 表示挂接此目录的客户机对该目录有读写的权力;
sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;
no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份
配置好文件共享目录后,将yaffs2文件放置在共享目录下,然后解压即可。
第五步:启动NFS服务
在完成前面的配置后,首先需要启动portmap和NFS这两个服务,并且 portmap服务一定要先于NFS服务启动。
$ sudo /etc/init.d/portmap start
$ sudo /etc/init.d/nfs-kernel-server start
其他可能要用到了:
停止NFS服务
在停止NFS服务的时候,需要先停止NFS服务再停止portmap服务,如果系统中还有其他服务需要使用portmap服务,则可以不停止 portmap服务。
$ sudo /etc/init.d/nfs-kernel-server stop
$ sudo /etc/init.d/portmap stop
重新启动portmap和NFS服务
$ sudo /etc/init.d/portmap restart
$ sudo /etc/init.d/nfs-kernel-server restart
检查portmap和NFS服务状态
$ sudo /etc/init.d/portmap status
$ sudo /etc/init.d/nfs-kernel-server status
第六步:配置目标板和主机(我的是虚拟机中Ubuntu)IP
这两个IP一定要在同一个网段内,否则会出现很多的问题,很多像Root-NFS: Server returned error -5 while mounting /forlinx/root的问题就是由此引起。
假设:
主机IP:192.168.1.20
目标板IP:192.168.1.10
关于怎么知道目标板的IP,在你设置uboot环境变量后,使用printenv,既可以查看到目标板的IP信息。
那么这一步就有两种选择:1是更改主机IP,这个相对简单。(当然以后为了上网可以再改回去)
$ sudo vim etc/network/interfaces
然后设置:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1
保存后重启
sudo /etc/init.d/networking restart
2是更改目标板IP,这个前提是你能够进入开发板环境,一般也就是你已经安装了类似cramfs文件系统,但是你想要用yaffs2文件系统的。
进入开发板环境,进入到/etc/init.d/目录下会看到一个rcS文件,IP就是在这个文件修改的。
# vim /etc/init.d/rcS
加上一段:
/sbin/ifconfig eth0 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.1 up
:wq 保存退出
(//也可以命令更改# ifconfig eth0 202.118.212.168 netmask 255.255.255.0 )
改完后就重启一下开发板。
第七步:在开发板上设定启动参数
通过u-boot设置启动参数
u-boot启动时,在命令提示符下设置启动参数如下:
setenv bootargs "root=/dev/nfs nfsroot=192.168.1.20:/home/localhost/arm6410/root/ ip=192.168.1.10:192.168.1.20:192.168.1.1:255.255.255.0:arm6410:eth0:off console=ttySAC0,115200"
其中:
192.168.1.20为主机IP地址
/home/localhost/arm6410/root为共享目录
192.168.1.10为开发板的IP地址
console=ttySAC0,115200为控制台参数。
保存参数:saveenv
第八部:烧写yaffs2文件
重启后在uboot命令中nand erase x x 也即要烧写的区域
然后重启在开发板环境中,在终端输入writeyaffs即可(不同的开发板命令不同,请注意)
到此基本完成,yaffs2文件系统已经烧写好了。
最后一步:设置启动参数
重启开发板,将yaffs2文件配置为根文件系统。
在uboot命令行中输入以下参数:
setenv bootargs "root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200"
saveenv
由此整个挂载NFS及配置yaffs2文件成功!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)