韦东山视频总结之NFS挂载文件系统

韦东山视频总结之NFS挂载文件系统
韦东山视频总结之NFS挂载文件系统

学习韦东山嵌入式linux完全开发手册视频11课4小节的笔记

整理人:KPBoy qq:1056339680

韦东山二期驱动视频教程秒杀价格180元应该是市面上最好的嵌入式学习视频报名只要给我淘宝号和名字就可以了到时自己到他的淘宝店拍下视频的

这里是视频的详细网页介绍https://www.360docs.net/doc/eb1207800.html,/Linuxvideo.html

开发环境:装有红帽企业版6.2的wmware虚拟机一台

交叉工具链是:嵌入式光盘里附送的交叉工具链

arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

Uboot:1.1.6

Linux kernel:linux-2.6.22.6

Filesystem:使用mdev机制的最小根文件系统fs_mini_mdev

还有一个需要注意的地方:

光盘里的linux-2.6.22.6在TQ2440/MINI2440上使用时会导致蜂鸣器响,这是因为JZ2440的LCD用GPB0作为LCD背光使能引脚, 而

TQ2440/MINI2440用GPB0作为蜂鸣器的使能引脚

使用TQ2440/MINI2440时,重新配置内核把自带的LCD驱动去掉即可,方法如下:

在内核目录下执行: make menuconfig

-> Device Drivers

-> Graphics support

<> S3C2410 LCD framebuffer support // 输入N

(以上都是使用韦东山老师提供的源码和补丁,现在先熟悉下,等以后自己熟悉了再自己来移植和完善)

S3C2440开发板一台

好了,根据韦东山前面的9到11课的视频,搭建好上面的uboot和内核之后,我们就开始搭建在产品开发过程中经常使用到的NFS文件系统了。首先我们来看看Linux文件系统时什么?

问:什么是Linux文件系统?

答:通常一个完整的Linux系统有数千上万个文件组成,文件中存储了程序,数据和各种信息。层次化的目录结构对于文件进行编目和分组。期中采用了各种方法来永久存储所需的结构和数据。

为支持各种本机文件系统,而同时允许访问其他操作系统的文件,Linux内核在用户进程(或C标准库)和文件系统实现之间引入了一个抽象层。该抽象层称之为虚拟文件系统(Virtual File system),简称VFS。

VFS的任务并不简单。一方面。它用来提供操作文件,目录及其他对象的统一方法。另一方面都有一些不同之处。但VFS的回报很高,它使得Linux更加灵活了。

内核支持40多种文件系统,其来源各种各样:如用于CD-ROM的iso9660,网络文件系统(NFS文件系统)和虚拟的文件系统(如proc文件系统)。

问:那么linux文件系统有哪些类型呢?

文件系统一般可以分为下面3中。(我们这里是详细学习下网络文件系统)

①基于磁盘的文件系统

②虚拟文件系统(virtual Filesystem),如proc文件系统

③网络文件系统(Network Filesystem):是基于磁盘的文件系统和虚拟文件系统之间的折中。这种文件系统允许访问另一台计算机上的数据,该计算机通过网络连接到本地计算机。在这种情况下,数据实际上是存储在一个不同系统的硬件设备上。这意味着内核无需关注文件的存取,数据的组织和硬件通信的细节,这些有远程计算机的内核处理。对这类文件系统中的文件操作都是通过网络连接进行。在进程向文件写入数据时,数据使用特定的协议(由具体的网络文件系统决定)发送到远程计算机。接下来远程计算机负责储存传输的数据并通知发送者数据已经到达。

尽管是这样,但是内核处理网络文件系统时,依然需要文件长度,文件在目录层次中的位置以及文件的其他重要信息。他必须在提供函数,使得用户进程能够执行通常的文件相关操作,如打开,读,删除等。由于VFS抽象层的存在,用户空间的进程不会看到本地系统与网络文件系统之间的区别。

NFS文件系统的详细使用说明可以参考:linux-2.6.6.22code\linux-2.6.22.6\Documentation\nfsroot.txt(以下是这个文档的内容)

Mounting the root filesystem via NFS (nfsroot)

===============================================

Written 1996 by Gero Kuhlmann

Updated 1997 by Martin Mares

Updated 2006 by Nico Schottelius

Updated 2006 by Horms

In order to use a diskless system, such as an X-terminal or printer server

for example, it is necessary for the root filesystem to be present on a

non-disk device. This may be an initramfs (see Documentation/filesystems/

ramfs-rootfs-initramfs.txt), a ramdisk (see Documentation/initrd.txt) or a filesystem mounted via NFS. The following text describes on how to use NFS

for the root filesystem. For the rest of this text 'client' means the

diskless system, and 'server' means the NFS server.

1.) Enabling nfsroot capabilities

-----------------------------

In order to use nfsroot, NFS client support needs to be selected as

built-in during configuration. Once this has been selected, the nfsroot

option will become available, which should also be selected.

In the networking options, kernel level autoconfiguration can be selected, along with the types of autoconfiguration to support. Selecting all of DHCP, BOOTP and RARP is safe.

2.) Kernel command line

-------------------

When the kernel has been loaded by a boot loader (see below) it needs to be told what root fs device to use. And in the case of nfsroot, where to find both the server and the name of the directory on the server to mount as root. This can be established using the following kernel command line parameters:

root=/dev/nfs

This is necessary to enable the pseudo-NFS-device. Note that it's not a

real device but just a synonym to tell the kernel to use NFS instead of

a real device.

nfsroot=[:][,]

If the `nfsroot' parameter is NOT given on the command line,

the default "/tftpboot/%s" will be used.

Specifies the IP address of the NFS server.

The default address is determined by the `ip' parameter

(see below). This parameter allows the use of different

servers for IP autoconfiguration and NFS.

Name of the directory on the server to mount as root.

If there is a "%s" token in the string, it will be

replaced by the ASCII-representation of the client's

IP address.

Standard NFS options. All options are separated by commas.

The following defaults are used:

port = as given by server portmap daemon

rsize = 4096

wsize = 4096

timeo = 7

retrans = 3

acregmin = 3

acregmax = 60

acdirmin = 30

acdirmax = 60

flags = hard, nointr, noposix, cto, ac

ip=::::::

This parameter tells the kernel how to configure IP addresses of devices and also how to set up the IP routing table. It was originally called

`nfsaddrs', but now the boot-time IP configuration works independently of NFS, so it was renamed to `ip' and the old name remained as an alias for compatibility reasons.

If this parameter is missing from the kernel command line, all fields are assumed to be empty, and the defaults mentioned below apply. In general this means that the kernel tries to configure everything using

autoconfiguration.

The parameter can appear alone as the value to the `ip'

parameter (without all the ':' characters before) in which case auto-

configuration is used.

IP address of the client.

Default: Determined using autoconfiguration.

IP address of the NFS server. If RARP is used to determine the client address and this parameter is NOT empty only

replies from the specified server are accepted.

Only required for for NFS root. That is autoconfiguration

will not be triggered if it is missing and NFS root is not

in operation.

Default: Determined using autoconfiguration.

The address of the autoconfiguration server is used.

IP address of a gateway if the server is on a different subnet.

Default: Determined using autoconfiguration.

Netmask for local network interface. If unspecified

the netmask is derived from the client IP address assuming

classful addressing.

Default: Determined using autoconfiguration.

Name of the client. May be supplied by autoconfiguration, but its absence will not trigger autoconfiguration.

Default: Client IP address is used in ASCII notation.

Name of network device to use.

Default: If the host only has one device, it is used.

Otherwise the device is determined using

autoconfiguration. This is done by sending

autoconfiguration requests out of all devices,

and using the device that received the first reply.

Method to use for autoconfiguration. In the case of options which specify multiple autoconfiguration protocols, requests are sent using all protocols, and the first one

to reply is used.

Only autoconfiguration protocols that have been compiled

into the kernel will be used, regardless of the value of

this option.

off or none: don't use autoconfiguration (default) on or any: use any protocol available in the kernel

dhcp: use DHCP

bootp: use BOOTP

rarp: use RARP

both: use both BOOTP and RARP but not DHCP

(old option kept for backwards compatibility)

Default: any

3.) Boot Loader

----------

To get the kernel into memory different approaches can be used.

They depend on various facilities being available:

3.1) Booting from a floppy using syslinux

When building kernels, an easy way to create a boot floppy that uses syslinux is to use the zdisk or bzdisk make targets which use and bzimage images respectively. Both targets accept the

FDARGS parameter which can be used to set the kernel command line.

e.g.

make bzdisk FDARGS="root=/dev/nfs"

Note that the user running this command will need to have

access to the floppy drive device, /dev/fd0

For more information on syslinux, including how to create bootdisks

for prebuilt kernels, see https://www.360docs.net/doc/eb1207800.html,/

N.B: Previously it was possible to write a kernel directly to

a floppy using dd, configure the boot device using rdev, and

boot using the resulting floppy. Linux no longer supports this

method of booting.

3.2) Booting from a cdrom using isolinux

When building kernels, an easy way to create a bootable cdrom that

uses isolinux is to use the isoimage target which uses a bzimage

image. Like zdisk and bzdisk, this target accepts the FDARGS

parameter which can be used to set the kernel command line.

e.g.

make isoimage FDARGS="root=/dev/nfs"

The resulting iso image will be arch//boot/image.iso

This can be written to a cdrom using a variety of tools including

cdrecord.

e.g.

cdrecord dev=ATAPI:1,0,0 arch/i386/boot/image.iso

For more information on isolinux, including how to create bootdisks

for prebuilt kernels, see https://www.360docs.net/doc/eb1207800.html,/

3.2) Using LILO

When using LILO all the necessary command line parameters may be

specified using the 'append=' directive in the LILO configuration

file.

However, to use the 'root=' directive you also need to create

a dummy root device, which may be removed after LILO is run.

mknod /dev/boot255 c 0 255

For information on configuring LILO, please refer to its documentation.

3.3) Using GRUB

When using GRUB, kernel parameter are simply appended after the kernel specification: kernel

3.4) Using loadlin

loadlin may be used to boot Linux from a DOS command prompt without

requiring a local hard disk to mount as root. This has not been

thoroughly tested by the authors of this document, but in general

it should be possible configure the kernel command line similarly

to the configuration of LILO.

Please refer to the loadlin documentation for further information.

3.5) Using a boot ROM

This is probably the most elegant way of booting a diskless client.

With a boot ROM the kernel is loaded using the TFTP protocol. The

authors of this document are not aware of any no commercial boot

ROMs that support booting Linux over the network. However, there

are two free implementations of a boot ROM, netboot-nfs and

etherboot, both of which are available on https://www.360docs.net/doc/eb1207800.html,, and both

of which contain everything you need to boot a diskless Linux client.

3.6) Using pxelinux

Pxelinux may be used to boot linux using the PXE boot loader

which is present on many modern network cards.

When using pxelinux, the kernel image is specified using

"kernel ". The nfsroot parameters

are passed to the kernel by adding them to the "append" line.

It is common to use serial console in conjunction with pxeliunx,

see Documentation/serial-console.txt for more information.

For more information on isolinux, including how to create bootdisks

for prebuilt kernels, see https://www.360docs.net/doc/eb1207800.html,/

4.) Credits

-------

The nfsroot code in the kernel and the RARP support have been written

by Gero Kuhlmann .

The rest of the IP layer autoconfiguration code has been written

by Martin Mares .

In order to write the initial version of nfsroot I would like to thank

Jens-Uwe Mager for his help.

看完上面这个文档之后,我们大概就知道接下来要做的工作了,下面介绍下怎样来实现从NFS起文件系统

1.首先在宿主机(我们的Linux服务器,即虚拟机上的linux系统)上开启nfs服务,首先查看有没有安装nfs-utils的安装包,命令:#rpm -q nfs-utils(我是一开始就已经定制装了NFS 服务器的了,如果你没有安装,可以网上百度下怎样在红帽下安装NFS服务器就可以了)

如果没安装nfs-utils的安装包,那么从对应的Linux操作系统版本安装光盘找到nfa-utils的

安装版并安装。

2.NFS配置,加入允许被那些计算机访问,访问的目录和访问权限。

#gedit /etc/exports

重启NFS服务(输入上图中的命令)。

NFS服务器一般是用于两台不同的linux主机间的挂载

3.下面介绍下从开发板从NFS启动的方法(首先S3C2440开发板从NORFLASH启动,进入到uboot命令行模式,这里我使用的韦东山老师提供的1.1.6版本的uboot)

选择q,

然后设置下NFS服务器的目录,(也就是将下面的这一大串的字符复制,然后paste到securet 中去就可以了,有时可能是格式出错,这个没关系的,你改改这些字母的顺序就可以),至于为什么要这样设置呢,那就要看上面的nfsroot.txt文档了,还有就是先看看韦东山的第11课的第4节有详细介绍的(先看视频,再看上面的那个英文本档)

setenv bootargs noinitrdroor=/dev/nfs nfsroot=/home/mycode/KPBoy/nfs_root/fs_mini_mdev

ip=192.168.1.6:192.168.1.230:192.168.1.1:255.255.255.0::eth0:off

init=linuxrc console=ttySAC0

输入在命令行里saveenv,将设置保存nandflash中去

然后输入boot启动系统,

这样从NFS成功启动我们的linux系统了

NFS文件系统简介及原理

NFS文件系统简介及原理 什么是文件系统,NFS文件系统又是什么?简单的说,文件系统就是通过软件对磁盘上的数据进行组织和管理的一种机制,对其的一种封装或透视。NFS,Network File System。顾名思义,网络文件系统,即通过网络,对在不同主机上的文件进行共享。 为什么需要使用NFS呢?在生产环境,我们很少使用单机部署应用,因为单机存在单点故 障,一旦宕机,将无法为前端业务提供服务,这是客户无法容忍的。现在提倡的高可用及7*24服务,是我们追求的目标。对于一些小的应用,双机成为了主流。我们来看一种简单集群场景,应用分别部署在A及B上,前端通过F5或着web服务器访问应用。如下 图: 那么当客户端发出一个请求时,F5根据一定的机制进行转发,有可能有A服务器进行响应,也有可能由B服务器进行响应。而在web应用中上传一些静态文件是很常见的一种功能,如图片。假设用户在某一时间,上传了一张照片到A服务器上,那么下次访问时,被F5路由到了B服务器上,由于B服务器上并没有存储上传的照片,所以将造成用户无法看到自己上传的照片。 那么很容易想到,是不是可以把文件上传到一个公用的服务器上呢?这样不管访问的是A

还是B,读、取文件都只存在一份。答案是肯定的,这个公用的服务器我们也称之为文件服务器。上面的架构就演变成了下面的架构: 说了这么多,跟NFS又有什么关系呢?NFS提供了一种机制,可以让A、B访问C中的一个共享目录,就像是操作本地文件一样。既然NFS有这么牛逼的能力,又有什么原因不去深入了解一下呢?注:此处当然也可以通过sftp或ftp进行文件上传和下载。 NFS的原理:我们用一个图来进行说明: 首先:NFS包括两部分,服务端及客户端 由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个

mount用法详解

mount用法详解 1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。 对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。 挂载时使用mount命令: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有 -t<文件系统类型> 指定设备的文件系统类型,常见的有: minix linux最早使用的文件系统 ext2 linux目前常用的文件系统 msdos MS-DOS的fat,就是fat16 vfat windows98常用的fat32 nfs 网络文件系统 iso9660 CD-ROM光盘标准文件系统 ntfs windows NT 2000的文件系统 hpfs OS/2文件系统 auto 自动检测文件系统 -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有 codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 nouser 使一般用户无法挂载 user 可以让一般用户挂载设备

提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?) 例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。 # mk /mnt/winc # mk /mnt/floppy # mk /mnt/cdrom # mount -t vfat /dev/hda1 /mnt/winc # mount -t msdos /dev/fd0 /mnt/floppy # mount -t iso9660 /dev/cdrom /mnt/cdrom 现在就可以进入/mnt/winc等目录读写这些文件系统了。 要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时更换的话,我想就不会犯这样的错误了:-> ) 如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到-o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。 当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。 四、自动挂载 每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢? 这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab 文件如下: /dev/hda2 / ext3 defaults 1 1 /dev/hda1 /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0

几种Nand flash文件系统的对比

几种Nand flas文件系统的对比 1.来源:NLE-FFS: A Flash File System with PRAM for Non-linear Editing For thesedevices, NAND flash memory has became the most attractive storage medium due to outstanding characteristics such as its increased capacity, low power consumption, small size and light weight. For the efficient management of NAND flashmemory, several flash file systems have been proposed, including JFFS2, YAFFS2, CFFS and PFFS. several file systems such as MNFS,NAMU and ScaleFFS have been designed for real-time recording /playback and large-capacity storage. A. YAFFS2 YAFFS2 is the most widely employed file system for NAND flash memory. YAFFS2 essentially saves the object ID (file ID) and the chunk (page) number in the spare region to show the offset of a page and the owner file of the page. Therefore, YAFFS2 reads the spare regions and object headers to establish the metadata in memory. Although YAFFS2 is designed to support NAND flash memory, it has scalability problems. With YAFFS2, the location of the updated page is saved in NAND flash pages or spare regions, as shown in Fig. 10 (a); hence, the file system

NFS-网络文件系统实现资源共享

NFS -网络文件系统实现资源共享 NFS 会经常用到,用于在网络上共享存储。假如有三台机器 netbook 、myhost1、myhost2,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到netbook 、myhost1、myhost2。但是使用NFS 只需要放到netbook 上的一个目录中(如:/root/netbook ),然后共享给myhost1、myhost2即可。访问的时候,metbook 主机的用户直接访问/root/netbook 目录即可,而主机myhost1、myhost2则可以通过网络间接地访问该目录的。实现方式如下: 一、为三台主机配置网络信息(以提供照片共享的主机为例) 1.分别修改各主机的IP 地址 [root @localhonst ~]#vi /etc/sysconfig/network -scripts/ifcfg-eth0 2.分别修改各主机的机器名 [root @localhonst ~]#vi /etc/sysconfig/network 3.分别修改各主机的本机路由信息 [root @localhonst ~]#vi /etc/hosts 4.重启计算机,以使配置生效 [root @localhonst ~]#init 6 二、配置NFS 服务器 1.启动系统的NFS 服务功能 方法一: [root @netbook ~]#service nfs start 方法二: [root @netbook ~]# /etc/init.d/nfs start

方法三: [root @netbook ~]#rfsysv NFS 服务需要portmap 服务的支持,在启动NFS 之前,需要启动portmap ,否则将会出现如下的提示。 启动portmap : [root @netbook ~]#service portmap start “”如果允许任何访问用户具有读写权限,则exports 文件的内容可配置为:

linux中如何挂载NFS文件

如何挂载NFS开发环境的方法步骤 ———mount命令及umount命令的用法详解(附图说明)Step1:设置好网络 主机IP:222.204.59.185 网关:192.168.50.1 子网掩码:255.255.255.0 开发板IP:222.204.59.250 网关:192.168.50.1 子网掩码:255.255.255.0 目的是使得两个处于同一个网段。 Step2:在主机的linux中设置共享目录 运行命令 #gedit /etc/exports 编辑nfs 服务的配置文件(注意:第一次打开时该文件是空的),添加以下内容: /root/share *(rw,sync,no_root_squash) 保存退出 其中: /root/share表示nfs 共享目录,它可以作为开发板的根文件系统通过nfs 挂接; *表示所有的客户机都可以挂接此目录 rw表示挂接此目录的客户机对该目录有读写的权力 no_root_squash表示允许挂接此目录的客户机享有该主机的root 身份 使用showmount –e命令可以查看你的挂载点在哪,不加参数-e显示的是网络地址。 在开发板上的/mnt下建立新的nfs文件(可以放在其他地方,名字除了nfs也可以去其他的名字) Step3:通过命令启动和停止nfs 服务 在命令行下运行: #/etc/init.d/nfs restart 这将启动nfs 服务,可以输入以下命令检验nfs 该服务是否启动。 Step4:在minicom中使用mount命令(也可以在超级终端中使用) 确定 进入minicom界面:

# mount -t nfs 222.204.59.185: /root/share /mnt/nfs 上图为minicom中显示的linux(也即开发板中的) 如果提示:mount:RPC:unable to receive; errno =No route to host 说明你主机linux中的防火墙没关闭在主机linux 中使用一下命令就可以解决:#service iptables stop。在次使用mount命令就ok了。 注意:此处222.204.59.185主机的ip地址,使用mount命令是在超级终端或minicom中使用,而不是在主机的linux系统中。在取消挂载命令时也是在超级终端或minicom中使用,具体用法是:#umount /mnt/ 如果没有出现错误信息, 您将可以浏览到/mnt 目录中的内容和/root/share是一致的。 取消挂载: 使用这个命令可以停止nfs 服务: #/etc/init.d/nfs stop 检查nfs服务器是否开启: #service nfs status 启对应的2个服务:#service portmap restart #service nfs restart 检查防火墙看是否屏蔽了nfs端口:#service iptables stop #service iptables status

Linux 创建文件系统及挂载文件系统详解

摘要: 本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述; 主要是为初学者弄清楚这一操作过程; 本文涉及fdisk、mkfs、mount ... ... 等工具; 对/etc/fstab 进行了解说; 还有磁盘扫描工具fsck 等介绍; 如果您想加载一个分区(文件系统),首先您得确认文件系统的类型,然后才能挂载使用,比如通过mount 加载,或者通过修改/etc/fstab来开机自动加载; 如果您想添加一个新的分区,或者增加一个新的硬盘,您要通过分区工具来添加分区,然后要创建分区的文件系统,然后才是挂载文件系统;比如通过mount 加载,或者通过修改/etc/fstab来开机自动加载; 一、对存储设备的分区; 我们这里所指的存储设备主要是本地硬盘、移动硬盘(比如USB 和1394接口的硬盘);由于磁盘很大并且为了满足我们各种需要,所以把硬盘分成若干个分区; 在Linux中进行硬盘分区操作的工具有: fdisk ,目前看来也是最好用的分区工具; parted 和cfdisk在某一方面有点优点,如parted中的数据备份功能; 推荐您用fdisk 分区工具; 二、存储设备进行格式化,即建立文件系统的过程; 1、文件系统的一点介绍 对存储设备分区还是远远不够的,我们还要对这些新增分区进行格式化;一个分区只有建立了某种文件系统后,这个分区才能使用;建立文件系统过程,就是用相应格式化工具格式化分区的过程; 在Linux操作系统中,目前几乎支持目前主流的文件系统,比如NTFS(只读)、FAT(可读可写)、ext2、ext3、reiserfs、hfs (MAC 操作系统的文件系统)、swap 交换分区... ... 还有一些不熟悉的操作系统的文件系统等;

嵌入式Linux根文件系统制作

实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的 了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构 掌握根文件系统的搭建过程 掌握busybox、mkcramfs等工具的使用方法 二. 项目主要任务 使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。 分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程 三. 基本概念 1.文件系统基本概念 Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。随着时间的推移, Linux支持的文件系统数还会增加。Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。该树形层次结构把文件系统表示成一个整个的独立实体。无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。该个目录被称为装配目录或装配点。在文件系统卸载时,装配目录中原有的文件才会显露出来。在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。 2.常见的嵌入式文件系统 嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。 (1)Flash根据结构不同分为 NOR Flash和NAND Flash。基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。

网络文件系统

网络文件系统 网络文件系统,英文Network File System(NFS)。是由SUN公司研制的UNIX表示层协议(pressentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。 ①提供透明文件访问以及文件传输; ②容易扩充新的资源或软件,不需要改变现有的工作环境; ③高性能,可灵活配置。 [1]网络文件系统(NFS)是文件系统之上的一个网络抽象,来允许远程客户端以与本地文件系统类似的方式,来通过网络进行访问。虽然NFS 不是第一个此类系统,但是它已经发展并演变成UNⅨ? 系统中最强大最广泛使用的网络文件系统。NFS 允许在多个用户之间共享公共文件系统,并提供数据集中的优势,来最小化所需的存储空间。 NFS与以往一样有用并在不断演变 网络文件系统(NFS)从1984 年问世以来持续演变,并已成为分布式文件系统的基础。当前,NFS(通过pNFS 扩展)通过网络对分布的文件提供可扩展的访问。探索分布式文件系背后的理念,特别是,最近NFS 文件进展。 NFS 的简短历史 第一个网络文件系统—称为File Access Listener —由Digital Equipment Corporation(DEC)在1976 年开发。Data Access Protocol(DAP)的实施,这是DECnet 协议集的一部分。比如TCP/IP,DEC 为其网络协议发布了协议规范,包括DAP。 NFS 是第一个现代网络文件系统(构建于IP 协议之上)。在20 世纪80 年代,它首先作为实验文件系统,由Sun Microsystems 在内部完成开发。NFS 协议已归档

Linux下的文件系统为树形结构

Linux下的文件系统为树形结构,入口为/树形结构下的文件目录:无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的。各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差不多。 1. /文件系统的入口,最高一级目录; 2. /bin基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, mkdir等。 这个目录中的文件都是可执行的,一般的用户都可以使用。 3. /boot包含Linux内核及系统引导程序所需要的文件,比如vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录; 4. /dev设备文件存储目录,比如声卡、磁盘... ...这是一个非常有趣的目录,是Linux文件系统的一个闪亮的特性- 所有对象都是文件或目录。仔细观察这个目录你会发现hda1, hda2等, 它们代表系统主硬盘的不同分区。 /dev/cdrom和/dev/fd0代表你的CDROM驱动器和floppy驱动器。看上去可能有些奇怪,但比较文件和硬件的特性这却是十分合理的。它们都可以读出和写入。例如/dev/dsp,这个文件代表你的扬声器。那么写入这个文件的数据都回传送到喇叭。试一试'cat /etc/lilo.conf > /dev/dsp' 你会听到一些声音。这是你的lilo.conf 文件的声音!同样,向/dev/ttyS0 ( COM 1 ) 读出或写入数据你可以和接到上面的设备进行通讯。 5. /etc存放系统程序或者一般工具的配置文件。 如安装了apache2之后,配置文件在/etc/apache2/目录下。 /etc/init.d 这个目录是用来存放系统或服务器以System V模式启动的脚

Windows下NFS Server搭建和使用

Windows下NFS Server搭建和使用 Revision History 1.NFS简介 NFS是Network File System的简写,即网络文件系统。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。NFS就是一种Linux系统或Unix系统下的共享文件服务,类似于windows共享。NFS 服务器可以看作是一个文件服务器,它可以让你的PC通过网络将远端的NFS 服务器共享出来的文件挂载到自己的系统中,在客户端看来使用NFS的远端文件就象是在使用本地文件一样。 2.NFS测试所需设备和条件 Windows2008 PC1台作为NFS server Windows2008系统光盘 Windows7 PC1台作为NFS Client 3.NFS Server搭建 用装有Windows2008系统的PC作为NFS server 3.1安装NFS Server 1)插入Windows2008系统光盘,点击开始->管理工具->服务器管理器,在左边的树中选中” 功能”项,右边的窗口中会列出功能的详细信息,点击”添加功能”,如图1所示

图1 2)进入添加功能向导窗口,远程服务器管理工具->文件服务工具->勾选网络文件系统服务 工具,如图2所示,点击下一步

图2 3)点击安装,开始安装,如图3~4所示 图3

图4 4)安装完成后,点击关闭,如图5所示 图5

5)添加角色服务,在服务器管理器的左边的树中选中”角色”, 右边会列出角色的详细信息, 点击”添加角色”,如图6所示 图6 6)进入添加角色向导,点击下一步,如图7所示 图7

实验 文件系统管理

实训项目4 文件系统管理 一、实训目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实训内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实训步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。

●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。 ●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实训思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗?Windows操作

nfs起根文件系统

1为什么要制作nfs起根文件系统 制作用于mini2440开发板使用的内核,并使用nfs起根文件系统。 2应用arm平台的linux2.6.29内核。 首先清理内核中间文件,配置文件 命令#cd /home/guoqian/4-3-1 #cd linux-2.6.29 #make distclean 3选择参考配置文件 为了使制作的内核支持nfs起根文件系统,选择config-mini2440作为配置文件。 修改配置文件CMDLINE,修改代码如下: ******************************************************************************* CMDLINE=”root=/dev/nfs nfsroot=192.168.14.2:/nfsroot/rootfs ip=192.168.1.55 rw console=ttySAC0 mem=64M” ******************************************************************************* 解释:CMDLINE:命令行启动参数定义了内核挂载根文件系统的方式 (1)root=/dev/nfs →表示内核采用nfs方式起根文件系统 (2)nfsroot=192.168.14.2:/nfsroot/rootfs →表示nfs起的根文件系统位于nfs服务器/nfsroot/rootfs目录,服务器IP地址为192.168.14.2 (3)ip=192.168.1.55 →开发板IP地址,要求与服务器IP地址在同一网段 (4)rw →文件系统可读可写 (5)console=ttySAC0 mem=64M →ttySAC0作为控制台,内存64M 4配置内核

使用uboot去挂载根文件系统

1、根文件系统的制作 1)创建根文件系统主目录: mkdir rootfs 2)创建根文件系统的子目录 cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录 mkdir usr/bin usr/lib usr/sbin lib/modules 4)创建设备文件 内核在引导时设备节点console,null必须存在 cd dev/ 注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1 mknod -m 666 null c 1 3 c:表明类型为字符设备 第一个数字(5,1):主设备号 第二个数字(1,3):次设备号 这两个设备文件设备号是固定的 5)安装etc etc目录主要是一些启动时的脚本文件一般不需要修改 tar etc.tar.gz –C /xxx/rootfs

这个命令可能不给用改为: tar xvzf etc.tar.gz –C /xxx/rootfs 6)编译内核模块 内核模块保存在lib下面的module下 配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住 进入Linux内核目录(linux-2.6.32.2) make modules ARCH=arm CROSS_COMPILE=arm-linux- 添加了ARCH=arm表示现在编译的是arm架构的内核 CROSS_COMPILE=arm-linux-表示使用交叉编译工具链 安装内核模块到根文件系统: make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs 7)配置busybox 因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。 Busybox相当于一个命令解析器,根文件中命令被软连接到 busybox,由busybox进行命令解析。 a) 解压busybox tar xvzf busybox-1.13.3 b) 配置busybox

Hi3518内核和文件系统烧写以及nfs挂载

Hi3518内核和文件系统烧写以及NFS挂载

修改履历

第一步编译内核和文件系统 文档说明:涉及到目录的请根据自己的实际情况进行更改,本文档仅根据笔者的测试进行举例说明。 1 安装交叉编译器 cd arm-hisiv100nptl-linux ./cross.install 说明:3518e推荐使用100nptl进行编译,arm-hisiv100nptl-linux-(使用uclibc库,uclibc 工具链支持全规格版本和小型化版本 )arm-hisiv200-linux-(glibc 库glibc 工具链只支持全规格版本),实验时没有使用hisiv200,不确定会出什么问题,不推荐使用。 2 编译步骤 cd ./linux-3.0.y ./mk3518.sh mk3518.sh 脚本里面包含了编译linux内核所需的所有的命令,具体看mk3518.sh文件,编译成功将生成在目录arch/arm/boot/uImage文件,这个就是要烧录到板子上的 注意:大小大约为1M。大于1M也许会出问题,在实验前期都是大于1M,烧录的时候出问题。 制作rootfs文件系统,使用的是最新的squashfs只读文件系统,使用的工具为mksquashfs,目录squashfs4.2为这个工具的代码 rm ./rootfs.squashfs //仅仅为了删除之前存在的文件系统,如果没有,可不执行这一步。 ./mksquashfs ./rootfsrootfs.squashfs -b 256K cp ./rootfs.squashfs ./tftpboot //可不用命令,自己拷贝,黏贴,文件夹根据自己实际情况所定。 生成的rootfs.squashfs这个就是要烧录到板子上的文件 注意:生成的文件大约为1.5M 地址空间说明 | 256K | 1M | 1.5M | |------------|---------------|-----------------------| | boot | kernel | rootfs |

根文件系统制作

Linux根文件系统的制作 1. 根文件系统 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。 2.主要的根文件系统 * Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是 将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。 * RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。 ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk 有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小 随所需要的空间增加或减少,是目前linux常用的ramdisk技术. * initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。 * Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修 改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。 * SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试。 3.Ramdisk制作 RAMDisk的制作方法如下:

在文件系统中使用 NFSv4 ACL

在文件系统中使用 NFSv4 ACL 管理 NFSv4 ACL 级别: 中级 Samyak Jain , 高级软件工程师, IBM 2009 年 7 月 15 日 在不同的文件系统上使用不同的命令管理 NFSv4 ACL 可能很困难。本文讨论并对比的命令可能你在对不同的文件系统操作时会用到。 使用 NFSv4 ACL 的文件系统 NFSv4 (Network File System – Version 4) 协议引入了一种新的 ACL (访问控制列表)格式,这种格式扩展了现有的其他 ACL 格式。NFSv4 ACL 很容易使用,还引入了更详细的文件安全属性,因此 NFSv4 ACL 更安全。IBM? AIX?、Sun Solaris 和 Linux? 等操作系统已经在文件系统中实现了 NFSv4 ACL 。 当前,IBM AIX 5L version 5.3 和更高版本中支持 NFSv4 ACL 的文件系统是 NFSv4、JFS2 with EAv2 (Extended Journaled Filesystem with Extended Attributes format version 2) 和 General Parallel Filesystem (GPFS)。在 Sun Solaris 中,ZFS 支持这种 ACL 模型。在 RedHat Linux 中,NFSv4 支持 NFSv4 ACL 。 什么是 ACL ? 访问控制列表 (ACL) 用来指定文件系统对象(比如文件和目录)的访问权限。它是由许多访问控制项 (ACE) 组成的列表,每个访问控制项定义一个用户或组及其权限。

ubifs文件系统挂载及同步

UBIFS分区制作及UBIFS烧写和启动 (转载) 相关命令工具 ubiattach version 1.0 - a tool to attach MTD device to UB I. Usage: ubiattach [-m ] [-d ] [--mtdn=] [--devn ] Example 1: ubiattach /dev/ubi_ctrl -m 0 - attach MTD device 0 (mtd0) to UBI Example 2: ubiattach /dev/ubi_ctrl -m 0 -d 3 - attach MTD device 0 (mtd0) to UBI and and create UBI device number 3 (ubi3) -d, --devn= the number to assign to the newly created UBI device(the number is assigned automatically if this is not specified) -m, --mtdn= MTD device number to attach -O, --vid-hdr-offset VID header offset (do not specify this unless you really know what you do and the optimal defaults will be used) -h, --help print help m essage -V, --version print program v ersion ubimkvol version 1.0 - a tool to create UBI volumes.

JZ2440开发板网络文件系统搭建nfs

JZ2440网络文件系统nfs搭建 问题描述: 在驱动程序开发阶段,会涉及到频繁的编译调试程序,如果每次都把驱动程序编译到内核去,会浪费大量的时间。所以通常把驱动程序编译成.ko的模块动态加载到内核,这样可以省去编译整个内核的过程,大大提高了驱动开发的效率。那么虚拟机上编译好的驱动模块怎样传递给目标机(开发板)呢,就是通过本文介绍的网络文件系统,PC机共享出一个网络文件系统给开发板,开发板就相当于多了一个本地文件夹一样。 原料: 1、JZ2440开发板+已经移植好的linux系统; 2、USB转UART连接线一根; 3、网线一根; 4、笔记本电脑安装vmware + Ubuntu; 步骤: 1、设置开发板IP地址,使开发板与虚拟机在同一个局域网。这里采用的是笔记本无线上网, 有限网络连接到开发板,该部分不清楚的可以参考我之前的笔记《开发板通过笔记本的有线网络上网》。 a)开发板正常启动后,通过Uart中断: # ifconfig eth0 Link encap:Ethernet HWaddr 00:60:6E:33:44:55 inet addr:192.168.1.17Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:28 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2776 (2.7 KiB) TX bytes:0 (0.0 B) Interrupt:51 Base address:0xa000 b)查看虚拟机上的IP地址: book@book-desktop:~$ ifconfig eth3 Link encap:Ethernet HWaddr 00:0c:29:e4:a7:e1 inet addr:192.168.2.102Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fee4:a7e1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3015 errors:0 dropped:0 overruns:0 frame:0 TX packets:2173 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:940451 (940.4 KB) TX bytes:241758 (241.7 KB) Interrupt:18 Base address:0x2024 eth4 Link encap:Ethernet HWaddr 00:0c:29:e4:a7:eb inet addr:192.168.3.54 Bcast:192.168.3.255 Mask:255.255.255.0

根文件系统挂载

根文件系统挂载 1) 在RamDisk为initramfs时 start_kernel()->vfs_caches_init()->mnt_init()->init_r ootfs()->init_mount_tree()注册了类型为rootfs的fs 然后:start_kernel 最后rest_init->kernel_init kernel_init->do_basic_setup->do_initcalls 调用 rootfs_initcall 注册过的函数 rootfs_initcall(populate_rootfs); populate_rootfs解压initramfs到rootfs, initramfs必须包含init文件,否则还将挂在其他的文件系统然后kernel_init检 查init是否存在,如果有就不会注册其他的根文件系统, if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) 会导致prepare_namespace 不被调用。 否则还会尝试挂在其他的根文件系统。2) 在RamDisk (initrd) 非initramfs时 kernel_init->prepare_namespace->initrd_load->rd_ load_image(加载)->(identify_ramdisk_image) 如果ROOT_DEV != Root_RAM0 则handle_initrd通过linuxrc启动用户态

相关文档
最新文档