搜档网
当前位置:搜档网 › nfs挂载根文件系统-tftp下载内核运行

nfs挂载根文件系统-tftp下载内核运行

nfs挂载根文件系统-tftp下载内核运行
nfs挂载根文件系统-tftp下载内核运行

Nfs、tftp联合运行调试内核及文件系统

参考:[https://www.sodocs.net/doc/6212023181.html,/course/6_system/linux/Linuxjs/2008831/139066.html]在烧写了u-boot之后,为了减少烧写根文件系统、调试程序之痛苦,本文档介绍如何通过tftp下载内核,nfs服务挂接根文件系统启动系统,不用每次都烧到开发板上。

一、NFS服务挂载根文件系统

1、Linux服务器端NFS服务器的配置

以root身份登陆Linux服务器,编辑/etc目录下的共享目录配置文件exports,指定共享目录及权限等。执行如下命令编辑文件/etc/exports:

#sudo apt-get install nfs-kernel-server

#vi/etc/exports

在该文件里添加如下内容:

/home/lisongqing/ARM/rootfs192.168.0.*(rw,sync,no_root_squash)

然后保存退出(添加的内容意思是:允许ip地址范围在192.168.0.*的计算机以读写的权限来访问/home/lisongqing/ARM/rootfs目录,/home/lisongqing/ARM/rootfs也称为服务器输出共享目录)。

括号内的参数意义描述如下:

1)rw:读/写权限,只读权限的参数为ro;

2)sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘;

3)no_root_squash:NFS服务器共享目录用户的属性,如果用户是非root,那么对于这个共享目录来说就具有root的权限;

如果用户想修改/etc/exports以修改后或添加其它共享目录,可执行命令

1)#sudo exportfs-rv使/etc/exports文件生效

2)接着执行如下命令,启动端口映射:

#/etc/init.d/portmap start(或:#sudo service portmap start)

3)最后启动NFS服务,此时NFS会激活守护进程,然后就开始监听Client端的请求:

#/etc/init.d/nfs-kernel-server restart(或:#sudo service nfs-kernel-server restart)

Linux服务器端NFS服务器的配置到此就已经配置好了。

二、开发板启动参数设置

当在第一步启动Linux主机NFS服务后,现在就可以在超级终端u-boot控制界面修改命令行参数通过NFS启动根文件系统了。假设Linux主机IP为192.168.0.100,NFS目录为/home/lisongqing/ARM/rootfs,就可以如下设置命令行参数后启动内核。

方式一:

#set bootargs noinitrd root=/dev/nfs console=ttySAC0,115200nfsroot=192.168.0. 100:/home/lisongqing/ARM/rootfs ip=192.168.0.150:192.168.0.100:192.168.0.1:255. 255.255.0::eth0:off

方式二:

#set bootargs root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0console=ttySAC0,115200 mem=64M

方式三:

#set bootargs root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs, rsize=1500,wsize=1500ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0 console=ttySAC0,115200mem=64M

增加rsize和wsize参数,增加块大小(默认为1024),我猜想可以减小丢包概率;

#saveenv

命令参数行解释:

Targetboard IP addr:192.168.0.150

Host PC IP addr:192.168.0.100

Gateway:192.168.0.1

Nfs dir:192.168.0.100:/home/lisongqing/ARM/rootfs

各命令行格式:

1、root=/dev/nfs:并非真的设备,而是一个告诉内核经由网络取得根文件系统的旗标

2、nfsroot

参数nfsroot这个参数告诉内核以那一台机器,那个目录以及那个网络文件系统选项作为根文件系统使用,命令格式:

nfsroot=[:][,]

1)--指定网络文件系统服务端的互联网地址(IP address)。如果没有给定此栏位,则使用由nfsaddrs变量(见下面)所决定的值。此参数的用途之一是允许使用不同机器作为反向地址解析协议(RARP)及网络文件系统服务端。通常你可以不管它(设为空白)。

2)--服务端上要作为根挂入的目录名称。如果字串中有个‘%s’符记(token),此符记将代换为客户端互联网地址之ASCII表示法。

3)--标准的网络文件系统选项,所有选项都以逗号分开。如果没有给定此选项栏位则使用下列的预设值:

port=as given by server portmap daemon

rsize=1024

wsize=1024

timeo=7

retrans=3

acregmin=3

acregmax=60

acdirmin=30

acdirmax=60

flags=hard,nointr,noposix,cto,ac

3、nfsaddrs

参数nfsaddrs设定网络通讯所需的各种网络接口地址。如果没有给定这个参数,则内核核会试著使用反向地址解析协议以及/或是启动协议(BOOTP)以找出这些参数。其格式如下:

nfsaddrs=::::::

1)--客户端的名称。如果空白,则使用客户端互联网地址之ASCII-标记法,或由启动协议接收的值;

2)--要使用的网络设备名称。如果为空白,所有设备都会用来发出反向地址解析请求,

启动协议请求由最先找到的设备发出。网络文件系统使用接收到反向地址解析协议或启动协议回应的设备。如果你只有一个设备那你可以不管它。

3)--用以作为自动配置的方法。如果是`rarp'或是`bootp'则使用所指示的协议;如果此值为`both'或空白,若配置核心时有打开这两种协议则都使用;`none'表示不使用自动配置,这种情况下你必须指定前述栏位中所有必要的值。

参数可以作为nfsaddrs的参数单独使用(前面没有任何`:`字符),这种情况下会使用自动配置。然而,此种情况不能使用`none'作为值。

三、内核配置要求

添加内核对NFS的支持:

1)选中networking support->networking options->IP:kernel level auloconfiguralion项

2)选中file systems->network file systems->下的root file system on nfs和nfs file system support

四、TFTP服务器配置

tftpd-hpa是一个功能增强的TFTP服务器。它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统。

1.sudo apt-get install tftp-hpa tftpd-hpa

2.mkdir~/tftproot chmod777tftproot

3.sudo vim/etc/default/tftpd-hpa

原内容为:

#/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/var/lib/tftpboot"

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="--secure"

修改为:

#/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

#TFTP_DIRECTORY="/var/lib/tftpboot"

TFTP_DIRECTORY="~/tftproot"

TFTP_ADDRESS="0.0.0.0:69"

#TFTP_OPTIONS="--secure"

TFTP_OPTIONS="-l-c-s"

4.sudo restart tftpd-hpa或者sudo service tftpd-hpa restart

5.检测tftp

1)>echo hello world>~/a.txt

2)>echo tftp test>~/tftproot/b.txt

3)>cd~

4)>tftp localhost或者tftp127.0.0.1

5)>tftp>put a.txt

6)>tftp>get b.txt

7)>tftp>q

五、设置启动命令

bootcmd=tftp0x32000000uImage;bootm0x32000000

六、启动开发板

1)拷贝内核景象到~/tftproot

2)拷贝文件系统到nfs目录

3)开发板上电

七、挂载问题及解决

1、挂载根文件系统启动内核时出现错误

Starting kernel...

Uncompressing Linux...done,booting the kernel.

Error:unrecognized/unsupported machine ID(r1=0x000003f0). Available machine support:

ID(hex)NAME

0000016a SMDK2440

Please check your kernel config and/or bootloader.

修改方法:

修改bootloader和内核配置一致

内核定义文件:arch/arm/tools/mach-types

smdk2440MACH_SMDK2440SMDK24401008

s3c2440MACH_S3C2440S3C2440362

内核配置开发板:arch/arm/mach-s3c2440/mach-smdk2440.c MACHINE_START(S3C2440,"smdk2440")

Uboot定义文件:include/asm/mach-types.h

#define MACH_TYPE_S3C2440182

#define MACH_TYPE_SMDK24401008

Uboot配置开发板:board/samsung/my2440/my2440.c中的board_init() gd->bd->bi_arch_number=MACH_TYPE_SMDK2440;

方法一:

MACHINE_START(S3C2440,"smdk2440")修改为

MACHINE_START(SMDK2440,"smdk2440")

方法二:

gd->bd->bi_arch_number=MACH_TYPE_SMDK2440;修改为

gd->bd->bi_arch_number=MACH_TYPE_S3C2440;

2、nfs:server192.168.0.100not responding,still trying

挂载文件系统时出现

dm9000dm9000.0:WARNING:no IRQ resource flags set.

eth0:link up,100Mbps,full-duplex,lpa0xC5E1

IP-Config:Complete:

device=eth0,addr=192.168.0.150,mask=255.255.255.0,gw=192.168.0.1,

host=192.168.0.150,domain=,nis-domain=(none),

bootserver=192.168.0.100,rootserver=192.168.0.100,rootpath=

Looking up port of RPC100003/2on192.168.0.100

Looking up port of RPC100005/1on192.168.0.100

VFS:Mounted root(nfs filesystem)on device0:12.

Freeing init memory:144K

----------munt all----------------

network interface

解决方法:

修改启动参数:

setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs,tcp,nolock

ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0::eth0:off console=ttySAC0,115200

尝试后还是不能挂载

然后检查,原来“dm9000dm9000.0:WARNING:no IRQ resource flags set”,原来是网卡没启动好。

修改arch/arm/plat-s3c24xx/devs.c

static struct resource s3c_dm9000_resource[]={

[0]={

.start=S3C24XX_PA_DM9000,

.end=S3C24XX_PA_DM9000+0x3,

.flags=IORESOURCE_MEM

},

[1]={

.start=S3C24XX_PA_DM9000+0x4,//CMD pin is A2

.end=S3C24XX_PA_DM9000+0x4+0x7c,

.flags=IORESOURCE_MEM

},

[2]={

.start=IRQ_EINT7,

.end=IRQ_EINT7,

.flags=IORESOURCE_IRQ

},

};

修改为

static struct resource s3c_dm9000_resource[]={

[0]={

.start=S3C24XX_PA_DM9000,

.end=S3C24XX_PA_DM9000+0x3,

.flags=IORESOURCE_MEM

},

[1]={

.start=S3C24XX_PA_DM9000+0x4,//CMD pin is A2

.end=S3C24XX_PA_DM9000+0x4+0x7c,

.flags=IORESOURCE_MEM

},

[2]={

.start=IRQ_EINT7,

.end=IRQ_EINT7,

.flags=IORESOURCE_IRQ|IRQF_TRIGGER_RISING

},

};

成功。修改uboot参数,以后可以此种方法启动:

setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs,tcp,nolock

ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0::eth0:off console=ttySAC0,115200 setenv bootcmd tftp0x32000000uImage\;bootm0x32000000\;

saveenv

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、实验内容: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作 4、算法与框图 ?因系统小,文件目录的检索使用了简单的线性搜索。 ?文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ?程序中使用的主要设计结构如下:主文件目录和用户文件目录( MFD、UFD); 打开文件目录( AFD)(即运行文件目录) 文件系统算法的流程图如下

三、工具/准备工作: 在开始本实验之前,请回顾教科书的相关内容。并做以下准备: 1) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

实验四 ramdisk 根文件系统的制作

实验四ramdisk根文件系统的制作 一.实验目的 1.熟悉根文件系统组织结构; 2.定制、编译ramdisk根文件系统。 二.实验设备 1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机; 2.软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。 三.实验内容 利用6.3 中的已经完成的文件系统,生成一个根文件系统镜像。 四.实验原理 ramdisk是内核初始化的时候用到的一个临时文件系统,是一个最小的linuxrootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,做为启动引导驱动,包含如下目录: bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin 目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。1.制作ramdisk根文件系统映像 1)单击菜单应用程序->附件->终端打开终端,设置环境变量: $ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh $ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh 2)执行命令切换到ramdisk实验目录下: $cd $SIMPLEDIR/6.4-ramdisk 3)运行脚本文件: $ sudosh ramdisk-install.sh shell 脚本命令说明: #!/bin/bash # # ramdisk-install.sh - Make ramdiskfilesystem. # # Copyright (C) 2002-2007

操作系统实验5文件系统:Linux文件管理

实验5 文件系统:Linux文件管理 1.实验目的 (1)掌握Linux提供的文件系统调用的使用方法; (2)熟悉文件和目录操作的系统调用用户接口; (3)了解操作系统文件系统的工作原理和工作方式。 2.实验内容 (1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:*********** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 复制文件 5. 修改文件权限 6. 查看文件权限 7. 创建子目录 8. 删除子目录 9. 改变当前目录到指定目录 10. 链接操作 *********** 代码: #include #include #include #include #include #include #include #include void menu(void); void openfile(void); void writefile(void); void readfile(void); void copyfile(void); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); void ylj(void); int main() { int choose; int suliangjin=1;

menu(); scanf("%d",&choose); while(choose!=0) { switch(choose) { case 1:openfile();break; case 2:writefile();break; case 3:readfile();break; case 4:copyfile();break; case 5:chmd();break; case 6:ckqx();break; case 7:cjml();break; case 8:scml();break; case 9:ggml();break; case 10:ylj();break; } menu(); scanf("%d",&choose); } return 0; } void menu(void) { printf("文件系统\n"); printf("1.创建新文件\n"); printf("2.写文件\n"); printf("3.读文件\n"); printf("4.复制文件\n"); printf("5.修改文件权限\n"); printf("6.查看文件权限\n"); printf("7.创建子目录\n"); printf("8.删除子目录\n"); printf("9.改变目前目录到指定目录\n"); printf("10.链接操作\n"); printf("0.退出\n"); printf("请输入您的选择...\n"); } void openfile(void) { int fd; if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

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

文件系统实验报告

嵌入式系统实验报告(二) --嵌入式文件系统的构建 138352019陈霖坤一实验目的 了解嵌入式操作系统中文件系统的类型和作用 了解JFFS2文件系统的优点及其在嵌入式系统中的作用 掌握利用Busybox软件制作嵌入式文件系统的方法 掌握嵌入式linux文件系统的挂载过程 二实验内容与要求 编译BusyBox,以BusyBox为基础,构建一个适合的文件系统; 制作ramdisk文件系统映像,用你的文件系统启动到正常工作状态; 研究NFS作为根文件系统的启动过程。 三Busybox介绍 BusyBox最初是由Bruce Perens在1996年为Debian GNU/Linux安装盘编写的,其原始构想是希望在一张软盘上能放入一个开机系统,以作为急救盘和安装盘。后来它变成了嵌入式Linux设备和系统和Linux发布版安装程序的实质标准,因为每个Linux可执行文件需要数Kb的空间,而集成两百多个程序的BusyBox可以节省大量空间。Busybox集成了包括mini-vi编辑器、/sbin/init、文件操作、目录操作、系统配置等应用程序。 Busybox支持多种体系结构,可以选择静态或动态链接,以满足不同需要。 四linux文件系统 文件系统是对一个存储设备上的数据和元数据进行组织的机制,linux文件系统接口设计为分层的体系结构,从而将用户接口层、文件系统实现层和操作存储设备的驱动程序分隔开。 在文件系统方面,linux可以算得上操作系统中的“瑞士军刀”。Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统,而且对于使用标准的和比较奇特的文件系统以及开发文件系统来说,linux是极好的平台,这得益于linux内核中的虚拟文件系统(VFS,也称虚拟文件系统交换器)。 文件结构 Windows的文件结构是多个并列的树状结构,不同的磁盘分区各对应一个树。Linux的文件结构是单个的树,最上层是根目录,其它目录都从根目录生成。不同的linux发行版集

实验四 文件系统实验报告

实验四文件系统实验 一 . 目的要求 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二 . 例题: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4、算法与框图: ①因系统小,文件目录的检索使用了简单的线性搜索。 ②文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ③程序中使用的主要设计结构如下: 主文件目录和用户文件目录( MFD、UFD) 打开文件目录( AFD)(即运行文件目录)

文件系统算法的流程图如下: 三 . 实验题: 1、增加 2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。 #include #include #include #include #define MAXSIZE 100 #define ADDSIZE 50 #define PT elem+l-> length #define N 4 typedef struct term{/*班级和学期的结构体*/ char class1[10]; char term1[10]; }term; typedef struct student{/*学生成绩信息的结构体*/ term st;/*班级和学期结构体放于此结构体中*/ char num[10]; char name[12]; float course[4]; float total; float average; int bit; }lnode,*stu; typedef struct{ lnode *elem;/*指向上个结构体的指针*/ int size;/*最大能放lnode结构体成员的个数*/ int length;/*当前长度*/ }sqack,*sq; sqack *l; void init(void)/*动态分配存储空间*/ { l-> elem=(stu)malloc(MAXSIZE*sizeof(lnode)); l-> length =0; l-> size=MAXSIZE; } void input(void)/*输入学生的信息*/ { lnode *newbase,*p; char cla[10],ter[10],ch; int n,i; if(l-> length> =l-> size){ newbase=(stu)realloc(l-> elem,(l-> size +ADDSIZE)*sizeof(lnode));/*追加存储空间*/ l-> elem =newbase; l-> size +=ADDSIZE; } p=l-> elem; do { printf( "输入班级和学期(学期用这种格式,如2005年上学期2005 1,2005年下学期2005 2;先输入班级,回车后再输入学期)\n "); gets(cla); gets(ter); printf( "要输入多少个名单?"); scanf( "%d ",&n); printf( "输入学生的成绩\n学号\t姓名\t科目1\t科目2\t科目3\t科目4\n "); for(i=0;i num ,p-> name,p-> course[0],p-> course[1],p-> course[2],p-> course[3]); strcpy(p-> st.class1,cla); strcpy(p-> st.term1,ter); ++l-> length ; } printf( "要继续吗?(y/n) ");

嵌入式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开发的文件系统。

实验4 文件操作

齐鲁工业大学实验报告成绩 一、实验目的及要求 1.熟悉Linux下常用的操作指令。 2.加深对文件,目录,文件系统等概念的理解。 3.掌握Linux文件系统的目录结构。 4.掌握有关Linux文件系统操作的常用命令。 5.了解有关文件安全方面的知识。 二、实验过程及结果 1.浏览文件系统 〈1〉运行pwd命令,确定你当前的工作目录。 〈2〉利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。) 〈3〉运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号) ls –ai 〈4〉使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。 〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。 〈6〉使用cd命令,将工作目录改到根目录(/)上。 ①用相对路径将工作目录改到根目录。 ②用绝对路径将工作目录改到根目录。

2.查看你的文件 〈1〉利用cd命令,将工作目录改到你的主目录上。 〈2〉将工作目录改到你的子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中。 Ls –l 反馈信息中有新文件 file1。 〈3〉使用cat命令查看file1文件的内容。 〈4〉利用man命令显示date命令的用法(说明文件): 〈5〉将date命令的用法(说明文件内容)附加到文件file1的后面: 3.文件存取权限 mv file_a file1 恢复文件file1; ls –l 显示文件file1的权限为 rw-rw-r—; 1).取消同组用户g和其他用户o 对文件可读的权利; 2).显示文件file1的权限。 3).恢复同组用户g和其他用户o 对文件可读的权利;

根文件系统移植

实验五根文件系统移植 实验目的: 通过本次实验,使大家学会根文件系统移植的具体步骤,并对根文件系统有更近一步的感官认识。让同学理解由于根文件系统是内核启动时挂在的第一个文件系统,那么根文件系统就要包括Linux启动时所必须的目录和关键性的文件,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。 实验硬件条件: 1、实验PC机一台,TINY6410开发板一台 2、电源线,串口线,数据线。 实验软件条件: 1、VMware Workstation, 2、Ubuntu10.04 3、mktools-20110720.tar.gz 4、busybox-1.13.3-mini2440.tgz, 5、SecureCRT以及dnw烧写工具 实验步骤: 一、实验步骤 1.进入rootfs目录,查看压缩文件,具体操作指令如下:

2.发现有两个压缩文件夹,分别进行解压: 3.tar xvzf busybox-1.13.3-mini2440.tgz, 4.tar xvzf mktools-20110720.tar.gz,解压完成后, 5.查看文件夹#ls

二、实验步骤 1.修改架构,编译器#cd busybox-1.13.3/ 2.进入后查看#ls 3.#gedit Makefile 4.修改 164行 CROSS_COMPILE ?=arm-linux- 5.修改190行 ARCH ?= arm 6.保存后,退出!

三、实验步骤 1.修改配置 #make menuconfig 2.若出现如下提示

3.需调整到最大化。

4.把Busybox Settings -----→>Build Option ------→> Build BusyBox as astatic binary (no shared libs) 选择上,其他的默认即可。 然后一直退出,保存即可 5.接着执行 make接着执行 make install 6.最终生成的文件在_install 中 #cd _install

操作系统实验---文件系统

实验报告 实验题目:文件系统 姓名: 学号: 课程名称:操作系统 所在学院:信息科学与工程学院 专业班级:计算机 任课教师:

实验项目名称文件系统 一、实验目的与要求: 1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。 2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。 3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。 4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 二、实验设备及软件: 一台PC(Linux系统) 三、实验方法(原理、流程图) 试验方法 (1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。主目录和子 目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建文件,可以编号存储于磁盘上。如file0,file1,file2…并以编号作为物理地 址,在目录中登记。 文件系统功能流程图 图1.文件系统总体命令分析

图 2.登录流程图图 3. ialloc流程图 图4.balloc流程图图5.密码修改流程图

图6.初始化磁盘 图 7.显示所有子目录 dir/ls 操作流程图

图8.创建文件 creatfile 、创建目录 mkdir 流程图 图9.改变当前路径 cd 操作流程图

实验原理 1.文件操作 ◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。具体流程图查看第二节,系统流程图设计部分。 ◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。具体流程图查看第二节,系统流程图设计部分。 ◆ls 显示当前目录下所有目录的模块,输入 ls 命令,回车 ,即会在屏幕上显示当前目录下的所有目录。在该过程中要判断该目录中是否为空,如果为空就没有必要执行该操作了。执行操作时,要调用 readdir (INode inode )函数 ,先读入文件内容到 content 里面,然后直接输出。如果子目录里面还有子目录,则通过递归,一并输出来。具体流程图查看第二节,系统流程图设计部分。 ◆chmod 改变文件权限模块,输入 chmod 命令,回车,输入文件名,回车,即会根据不同类别的用户在屏幕上提示要改变哪一类用户的权限。如果是文件拥有者执行该操作,他可以选择修改自己、其他用户的权限;如果是文件所属组成员执行该操作,他可以选择修改自己、其他用户的权限;如果是其他用户执行该操作,他只能选择修改自己的权限;在该过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了。执行操作时,要判断对该文件有没有执行写操作的权利,没有就不能进行。具体流程图查看第二节,系统流程图设计部分。 ◆cd 改变当前所在目录的模块。输入 cd,回车,相应的字符串,回车,则会根据输入字符串的不同跳转到不同的目录下。如果字符串是‘ .’ ,则到当前目录;如果字符串是‘ ..’ ,则到父目录;如果字符串是‘/’ ,则到根目录;如果字符串是当前目录下的子目录,则到该子目录;如果字符串是一个决定路径,则到该绝对路径。当然在执行的时候要判断有没有该子目录或者该绝对路径,如果没有的话,就不能执行。具体流程图查看第二节,系统流程图设计部分。 2. 用户操作 ◆login 用户注销模块,输入 login ,回车,当前用户就退出了,需要重新登录。 ◆pw 用户修改口令模块,输入 pw ,回车,则会提示输入原始密码,输入正确了才可以提示输入新密码,并且要求新密码输入两次,两次一样了才能通过修改密码成功。具体流程图查看第二节,系统流程图设计部分。 ◆logout 用户退出系统模块,输入 logout ,回车,系统自动退出。

FAT文件系统操作系统课程设计实验报告

操作系统课程设计之三 设计任务:模拟OS文件系统 在任一OS(Window或者Dos;也可以是在Linux下,但要求能将结果演示给老 师看)下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟OS 字 ,第 ⑤、每个目录实际能放下文件或子目录30项。 ⑸、文件系统空间分配: ①、第0个盘块(1k)存放磁盘信息(可以设定为格式说明“FAT32”、盘块大小,盘块数等 内容) ②、第1个盘块起,至125盘块,共125个盘块(125k)存放FAT内容 ③、第126、127(2个)盘块,存放位示图

④、从第128盘块至10000盘块,皆为数据(区)盘块,其逻辑编号从0开始,至 9872号数据盘块,即第0数据盘块为128号盘块,第1数据盘块为129号盘块,… ⑤、第0数据盘块(即128号盘块),存放根目录(同样只用一个盘块作根目录), 由于第0、1目录项为“.”(本目录), “..”(父目录),因此根目录下同样只能存放30个文件或目录,并且从第2个目录项开始。 ⑥、文件或子目录数据,放在第1数据盘块及以后的数据盘块中,由用户按需要使 用。 内容 ⑺、删除文件 #DelFile 文件名.扩展名,在文件所在的目录项中,将第一个字节变为0xE5,并同时修改FAT内容和位示图内容;如果文件不存在,给出出错信息 ⑻、文件拷贝 #CopyFile 老文件,新文件,为新文件创建一个目录项,并将老文件内容复制到新文件中,并同时修改FAT内容和位示图内容 ⑼、显示位示图内容

#ShowBitMP,将位示图内容(已有信息部分),显示在屏幕上(按十六进制)⑽、显示FAT内容 #ShowFAT,将FAT内容(已有信息部分),显示在屏幕上(按十六进制) 4、程序的总体流程为: ⑴、输出提示符#,等待接受命令,分析键入的命令; ⑵、对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令 关于对FAT表和MAP表的用法 1.当要用到数据块是,查询MAP表(因为只做比较查询即可),查询到的未用位置 置1,然后在FAT表上进行相应记录,在本程序做出的规定是,当文件夹FAT 表做-1,若是文件则按照FAT做对应的顺序记录,最后一块同样是-1结束,2.回收的时候,是按照FAT表的首项,做顺序置0,然后MAP也在相应位置置0

使用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

在硬盘上制作根文件系统.doc

在硬盘上制作根文件系统 一、实验目标: 在硬盘上建立一个根文件系统,硬盘镜像文件的名称为:hdc-0.11.new.img 二、实验环境: 1、Vmware workation, bochs虚拟机,ultraedit编辑环境 2、用到的四个重要的镜像文件:bootimage-0.11-hd,hdc-0.1.img,并将他们放到 mylinux0.11文件夹中。 3、实验环境:redhat linux 三、实验理论依据: 1、Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括以下一些子目录和文件: etc/ 目录主要含有一些系统配置文件; dev/ 含有设备特殊文件,用于使用文件操作语句操作设备; bin/ 存放系统执行程序。例如sh、mkfs、fdisk等; usr/ 存放库函数、手册和其它一些文件; usr/bin 存放用户常用的普通命令; var/ 用于存放系统运行时可变的数据或者是日志等信息。 存放文件系统的设备就是文件系统设备。Linux 0.11内核所支持的文件系统是MINIX 1.0文件系统。 2、inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬 盘、软盘、U盘... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode 值最快的找到相对应的文件。每一个文件开头都是一个inode。 做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。

实验2.3_内核模块_实验报告

<内核模块>实验报告 题目: 内核模块实验 1、实验目的 模块是Linux系统的一种特有机制,可用以动态扩展操作系统内核功能。编写实现某些特定功能的模块,将其作为内核的一部分在管态下运行。本实验通过内核模块编程在/porc文件系统中实现系统时钟的读操作接口。 2、实验内容 设计并构建一个在/proc文件系统中的内核模块clock,支持read()操作,read()返回值为一字符串,其中包块一个空格分开的两个子串,分别代表https://www.sodocs.net/doc/6212023181.html,_sec和https://www.sodocs.net/doc/6212023181.html,_usec。 3、实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合。在装载这些模块时,将它的代码链接到内核中。Linux模块可以在内核启动时装载,也可以在内核运行的过程中装载。如果在模块装载之前就调用了动态模块的一个函数,那么这次调用将会失败。如果这个模块已被加载,那么内核就可以使用系统调用,并将其传递到模块中的相应函数。 4、实验步骤 编写内核模块 文件中主要包含init_module(),cleanup_module(),proc_read_clock()三个函数。其中init_module(),cleanup_module()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_func()负责产生/proc/clock被读时的动作。 内核编译部分过程:

过程持续较长时间. ●编译内核模块Makefile文件 Makefile CC=gcc MODCFLAGS := -Wall -D__KERNEL__ -DMODULE –DLINUX clock.o :clock.c /usr/include/linux//version.h $(CC) $(MODCFLAGS) –c clock.c echo insmod clock.o to turn it on echo rmmod clock to turn ig off echo 编译完成之后生成clock.o模块文件。 注:此参考makefile文件包含错误, 于是从网上寻找相关教程自行修改得到合适的Makefile文件 ●内核模块源代码clock.c #define MODULE #define MODULE_VERSION “1.0” #define MODULE_NAME “clock” #include #include #include int proc_read_clock(char* page, char** start, off_t off,int count,int* eof,void* data) { int len; struct timeval xtime;

操作系统实验-文件系统设计

文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 实验要求: ①在系统中用一个文件来模拟一个磁盘; ②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 ③实现这个文件系统。 ④能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。 2.实验内容 1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。 3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4)因系统小,文件目录的检索使用了简单的线性搜索。 5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。 6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录。 3.实验环境 VC 6.0 4.实验提示 1) format 格式化

只写打开模拟文件,初始化超级快,初始化dinode 位图 block 位图,初始化主目录,初始化etc 目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd 文件,写入模拟硬盘文件。 2 )install 安装 读写打开模拟文件,读取dinode 位图 block 位图,读取主目录,读取etc 目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd 文件。 3 )login 登陆 用户输入用户名和密码,在passwd 文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。 Login 登录 结束是,登录成功 输入用户名 查找是否有改 用户名 输入密码是 否 密码是否正确 否 4 )ialloc 申请inode 空间 先检测inode 位图是否加锁,是则退出。加锁,检测inode 空间是否还有已满,是则退出。在inode 位图中顺序查找空闲的inode ,找到则返回inode 地址,block 解锁。函数结束。

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 |

相关主题