北邮计算机网络实践第三次实验报告

时间:2019-05-14 16:39:26下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《北邮计算机网络实践第三次实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《北邮计算机网络实践第三次实验报告》。

第一篇:北邮计算机网络实践第三次实验报告

计算机网络技术实践

实验报告

实验名称 RIP和OSPF路由协议的配置及协议流程

姓 名___(-…-)_____________实 验 日 期:2014年4月11日 学 号_ 242_______实验报告日期:2014年4月16日 报 告 退 发:(订正、重做)

一.环境(详细说明运行的操作系统,网络平台,网络拓扑图)1.运行操作系统

由于本人电脑上的操作系统是WIN7旗舰版,尝试直接安装Dynamips模拟器,但一直没有成功。于是在电脑上安装了VMware Workstation,并安装WINXP虚拟操作系统。在WINXP虚拟操作系统上安装Dynamips模拟器,才顺利完成了实验环境的搭建。2.网络平台 Dynamips模拟器 3.网络拓扑图

F0/0PC11.1.242.1 255.0.0.0网络 1.0.0.0F0/0F0/0PC33.1.242.1 255.0.0.01.1.242.2 255.0.0.0DTE PPP6.1.242.2 255.0.0.0RT1S1/0网络 6.0.0.0网络 3.0.0.0DCE PPPClockrate:1152007.1.242.1 255.0.0.0S1/1DCE PPPClockrate:1152006.1.242.1 255.0.0.0S1/0F0/03.1.242.2 255.0.0.0F0/0网络 4.0.0.0F0/0网络 7.0.0.0S1/2S1/0网络 8.0.0.0DCE PPPDTE PPPRT3Clockrate:115200RT4DTE PPP8.1.242.2 255.0.0.05.1.242.2 255.0.0.08.1.242.1 255.0.0.0S1/1网络 5.0.0.0S1/14.1.242.2 255.0.0.0PC44.1.242.1 255.0.0.0DTE PPPS1/07.1.242.2 255.0.0.0F0/0网络 2.0.0.0RT22.1.242.2 255.0.0.0DCE PPPClockrate:1152005.1.242.1 255.0.0.0F0/0PC2

二.实验目的

 复习和进一步掌握实验一二的内容。

学会设计较复杂的网络物理拓扑和逻辑网段。

掌握路由器上RIP协议的配置方法,能够在模拟环境中进行路由器上RIP协议的配置,并能通过debug信息来分析RIP协议的工作过程,并观察配置水平分割和没有配置水平分割两种情况下RIP协议工作过程的变化。

掌握路由器上OSPF协议的配置方法,能够在模拟环境中上进行路由器上OSPF协议的配置,并能够通过debug信息分析OSPF协议的工作工程。

三.实验内容及步骤(包括主要配置流程,重要部分需要截图)

1.实验前的基础设置(实验一、二)

2.物理拓扑设计

修改.net 文件,设计物理拓扑,修改后的.net文件见附录。3.逻辑网段设计

3.1.用list命令列出所有网络成员,如下图所示。

3.2.输入命令start/all启动所有网络成员

配置路由器以及PC的idle-pc value并保存。

3.3.同过telnet登陆到主机或路由器

打开八个控制台窗口,每个窗口都使用telnet登陆到路由器或主机上。例如登陆到PC1 的命令为telnet 127.0.0.1 3001,登陆到RT1的命令为telnet 127.0.0.1 3002 3.4.配置路由器之间的串口并启动串口

配置从底层向高层配置,先配置物理层的时钟信息,再配置数据链路层协议,最后配置网络层的IP协议,并开启串口。

在配置串口时,已选需要配置成为DCE端,另一端要配置成为DTE端。DCE端提供时钟,DTE端跟随时钟。所以只要在DCE 端配置时钟即可,配置了时钟的那端就是DCE端,没有配置时钟的那端就是DTE端。

在此实验中我将所有的串口的数据链路层都配置成PPP协议。如果不配置,默认的数据链路层采用的是HDLC协议。IP协议方面,注意串口两端的IP地址要在同一网段。no shutdown 启动窗口。

具体步骤以RT1和RT2之间的串口连接的配置为例

用这种方法将其他路由器对之间的串口连接,具体参数参见网络拓扑图。

3.5.配置主机和路由器之间的以太网连接接口并启动

主机和路由器之间通过以太网相连,以太网不用配置物理层和数据链路层,只要配置网络层IP协议即可。

以PC1和RT1为例。

同理配置好其他三个主机和路由器之间的以太网连接接口并启动。至此,同一网段中的设备已经可以进行数据传输了。测试同意网段中的设配的传输数据情况。以PC1和RT1以及RT1和RT2之间为例:

RT1 ping PC1:

PC1 ping RT1:

RT1 ping RT2:

RT2 ping RT1:

4.配置RIP协议。

4.1.为拓扑图中的主机配置默认路由

由于拓扑图中的网络比较复杂,主机采用配置默认路由的方式可以减少工作量,默认路由配置如下例。

4.2.配置RIP协议

以RT1为例,配置RIP协议,network为与RT1直连的网络,neighbor为

RT1的邻居路由器。

让窗口打印RIP协议调试信息,我们发现RT1在更新路由表。

4.3.检测不同网段中网络的联通情况

各路由器均已开启RIP协议,即各个路由器之间已经交换过信息。PC1 ping PC4

PC4 ping RT2

RT4 ping RT1

RT4 ping PC1

各网段路由器经过动态学习,已经获得了整个网络的拓扑,所以拓扑中的模块均能够ping通。

4.4.分析RIP协议工作过程。RT1:

RT2:

RIP协议基于距离矢量路由算法,它的基本工作原理是:每一个路由器维护一张路由表,该路由表以每一个目标网络为索引,记录到达该目标网络的时间开销或距离开销,以及对应的输出接口。所有使用RIP协议的路由器周期性地向外发送路由刷新报文,再接收到来自各个邻居路由器的路由表后,根据这些路由表来重新计算自己到达各个网络的最佳路由。

从上面的调试信息,我们可以看到RT2接收来自各个邻居路由的路由表,RT1向外发送路由刷新报文,更新路由表的三个最重要的动作。

4.5.比较禁止水平分割和打开水平分割两种情况下RIP协议交互过程的变化。

进入RT1的s1/0接口的配置模式,禁止水平分割(默认打开水平分割)。命令行为:RT1(config-if)#no ip split-horizon 有水平分割RT1的调试信息

禁止水平分割后RT1的调试信息

水平分割方法让路由器记住每一条路由信息的来源,也就是标记收到该路由信息的端口号,当本路由器向外广播路由信息时,不会将该路由信息向收到这条信息的端口上发送,从而可以避免一些路由循环产生。

有上面两个截图的比较,我们发现关闭水平分割后,从s1/0传来的网段1,2,3,4,5,6,7,8的信息又发给s1/0。此外,对于有水平分割的s1/0接口,传送的是已经筛选过的距离表。这就是关闭水平分割的区别。

虽然在上图中没有明显的区别,但是当链路出现故障时,水平分割就是一种防止出现无穷计算问题的高效同步的方法。

4.6.采用show ip route 观察路由器在RIP协议中学到的路由表项

我们以R1为例进行分析。RIP协议配置前的R1的路由表

我们发现路由表中只有与它直接相连的路由信息且都标注为C。启动RIP协议后RT1的路由信息。

比较学习前和学习后的路由表,我们发现多了标记为R的表项,并且现在路由知道了与其不相连的网段、主机和路由。

我们以第二行:R 2.0.0.0/8[120/1]via 7.1.242.2,00:00:08,Serial1/0为例说明: R表示此路由表项是通过RIP协议学习到的,而时间00:00:08表示学习到这个路由表项距离现在的时间,时间越小表示路由表项越新,它的可信度也就越高。而时间较大时表示这个路由表项是很久之前学习到的,现在网络状况可能已经发生了变化。

4.7.跟踪路由,观察RIP协议实验结果

我们观察PC1 ping PC4 的包所经过的路径,由下图可知路径为:1.1.242.1->1.1.242.2->6.1.242.1->8.1.242.2->4.1.242.1 *表示失败。

5.OSPF 协议配置和实验

5.1.删除各路由器上的RIP协议

在配置模式下输入no router rip

在特权模式下输入show ip route 查看删除RIP协议后的路由信息,由下图可知删除RIP协议后,路由器只认识和它直连的网络信息。

5.2.在路由器上配置OSPF协议

以RT1为例配置OSPF协议。

具体步骤为:进入OSPF配置模式->配置与RT1直连的网络并指明该网络所在的区域->进入路由串口(s)分别配置从接口发送hello包的时间间隔和认为通过该接口相连的邻居已经不存在的时间间隔。

当网络中所有路由器都已经配好OSPF协议后,在RT1中输入show ip route,如下图可知RT1已经知道了所有没有直接相连的网络。

5.3.检测OSPF路由结果

以PC1 ping PC4为例

开始时丢了两包,收到了三包,说明网络连接没有问题。

5.4.利用debug ip ospf event 打开调试信息,分析OSPF协议工作过程

以RT1为例

OSPF是基于链路状态算法的分层路由协议。在开启OSPF协议之后路由器之间交互的是链路状态信息,不过上图只有相邻链路Hello包的交互,这是因为OSPF的主要协议交互过程是在刚配置完OSPF协议时就进行了,而在网络运行过程中,如果没有链路状态的变化就没有交互链路状态信息。也就是说,一旦网络稳定,信息不再更新,则只会有Hello包。只有链路发生变化时,相应路由器才会广播改变的信息给其余路由器。

Hello协议是OSPF协议中比较重要的部分,用于检测邻居并维护邻接关系。

5.5.修改链路状态,观察广播信息的交互

5.5.1.通过debug ip osdf flood 打开RT1的洪泛状态

打开后,维持下面状态不变,知道链路状态出现变化。

可靠洪泛机制是OSPF的重要部分,在其某条链路状态发生变化时,会将变化的信息发送给同一域中的所有OSPF路由器,从而确保整个域内的路由器始终具有一致的链路状态数据库。

5.5.2.观察路由器端口失效时信息的交互

关闭与RT1直连的RT3的s1/0接口

RT1反应部分截图

我们发现,RT3的接口一关闭后,就收到了来自RT3的11.1.1.2的洪泛信息。OSPF路由器收到链路状态更新报文时,更新自己的链路状态数据库,然后采用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新路由表的计算。

最终RT1端又会恢复链路改变前的平静状态,不会再有信息输出。但是即使链路状态没有发生变化,OSPF路由信息也会自动更新,默认时间为30分钟。

5.5.3.观察IP地址失效时信息的交互

删除与RT1直连的RT3的s1/0的IP地址

观察RT1的变化

我们发现RT1收到来自RT3 s1/2的洪泛信息。

5.6.利用各个路由器的OSPF的邻居路由器

命令行为:sh ip ospf neighbor。其中,Neighbor ID 表示邻居路由器的路由ID,路由ID是路由器在OSPF网络中的唯一标识。(是该路由器各IP地址中的一个)。Pri标识路由器的优先级,默认为1。State标识路由器的状态,FULL即开着。DOWN即该端口被shutdown了。Dead Time表示最后学习到路由信息的时间。Address标识邻居路由器与本路由器相连的接口的IP地址。Interface标识连接邻居路由器的本地接口。

四.实验结果(包括最终实验结果,需要截图)

详细实验结果见三中的实验步骤、分析与截图。

a)RIP协议

通过实验,我深入理解了RIP协议的工作原理。

RIP协议是基于距离矢量算法的内部动态路由协议。其基本工作原理是:每一个路由表维护一张路由表,记录到达该目标网络的时间开销或距离开销,以及对应的输出接口。所有路由器通过周期性地向外发送路由刷新报文,在接收到来自各个邻居路由器的路由表后,根据这些路由表来重新计算自己到达各个网络的最佳路由。

通过对比水平分割关闭前后的交互变化,真切理解到RIP协议通过水平分割来优化,避免路由循环的产生,提高效率。

b)OSPF协议

OSPF协议基于链路状态路由算法。在分层次的网络结构中,每个区域内部维持一张唯一的本域拓扑结构图,各域内部的路由器根据所在域的拓扑图各自计算路由,域边界路由器把本域的内部路由总结后向其他域进行扩散。

实验中还着重研究了OSPF的Hello协议和可靠泛洪机制。Hello协议用于检测邻居并维护邻接关系,可靠泛洪机制在链路状态发生变化时更新状态。

我们从邻居路由表中可以发现,路由器标识为端口IP中最大的IP地址。

debug时,可以看到OSPF协议中路由器先和邻居交互链路状态信息,交互描述信息DBD而非具体的路由信息,然后当路由器知道自己没有哪些信息而对方有时,会启动Database Require请求交互,然后再Exchange真正的路由信息,知道达到同步为止。

在点到点链路中,常选择IP地址较大的作为主路由,或者通过elect选举出多个成员中的主路由,其他路由需与主路由进行数据库同步。

五.实验中的问题及心得(需要认真写,不要写空话、套话)a)试验中遇到的问题

在创建物理链路状态时,由于没有经验,每个PC机的端口也写了slot0 = PA-C7200-IO-FE,导致系统根本启动不起来。经历数次失败的后,终于发现了问题。程序顺利启动。

在配置RIP协议后,发现各个路由器之间能够ping通而但PC与PC或者PC与非直连路由器之间无法传送数据。仔细回想实验步骤,发现PC没有配置路由,刚开始采用配置静态路由的方法,比较繁琐;后来学到配置默认路由来减少工作量。

b)实验总结

本次实验建立在实验一二的基础上,通过仿真环境下做具体的配置实践和观察,很好地复习了上学期计算机网络课程中所学的距离矢量路由(RIP)和链路状态路(OSPF)由算法。

通过实验,对运行在网络中各层的协议也有了更进一步的认识,知道了网络协议的分工与合作。对网络的分层结构有了具体的认识,过去书本上学到的知识很抽象,动手实践后认识更加深刻,有些理解错误的地方也更正了过来。

六.实验思考(需要认真写,不要写空话、套话)

本次实验做的时间较长,由于我的电脑装软件总是装不上,无奈之下装了虚拟机+XP操作系统。其间由于不熟悉虚拟机使用规范,虚拟机还死掉一次,无奈又重装。在做实验时,一步步跟着实验步骤来,一点点熟悉指令。也犯过致命的错误,仔细检查实验流程重要发现了问题并顺利解决了问题。到网上查找资料,实验过程也优化了很多。实验大概做了三遍,收获颇丰。对网络的分层结构有了更深的认识,明白了网络各层协议的分工合作。从物理层到数据链路层再到网络层,对数据的传输脑海中形成了清晰的流程。

在书写实验报告的过程中,学会了用Visio绘制精美的网络拓扑图,报告层次也更加规范,严谨。

七.附录

物理拓扑结构 autostart = false

[localhost] port = 7200

udp = 10000 workingdir =..tmp

[[router R1]]

image =..iosunzip-c7200-is-mz.122-37.bin

model = 7200

console = 3002

npe = npe-400

ram = 64

confreg = 0x2102

exec_area = 64

mmap = false

slot0 = PA-C7200-IO-FE

slot1 = PA-4T

f0/0 = PC1 f0/0

s1/0 = R2 s1/0

s1/1 = R3 s1/0

[[router R2]]

image =..iosunzip-c7200-is-mz.122-37.bin

model = 7200

console = 3004

npe = npe-400

ram = 64

confreg = 0x2102

exec_area = 64

mmap = false

slot0 = PA-C7200-IO-FE

slot1 = PA-4T

f0/0 = PC2 f0/0

s1/1 = R3 s1/1

[[router R3]]

image =..iosunzip-c7200-is-mz.122-37.bin

model = 7200

console = 3006

npe = npe-400

ram = 64

confreg = 0x2102

exec_area = 64

mmap = false

slot0 = PA-C7200-IO-FE

slot1 = PA-4T

f0/0 = PC3 f0/0

s1/2 = R4 s1/0

[[router R4]]

image =..iosunzip-c7200-is-mz.122-37.bin

model = 7200

console = 3007

npe = npe-400

ram = 64

confreg = 0x2102

exec_area = 64

mmap = false

slot0 = PA-C7200-IO-FE

slot1 = PA-4T

f0/0 = PC4 f0/0

[[router PC1]] model = 2621 ram = 20 image =..iosunzip-c2600-i-mz.121-3.T.bin mmap = False confreg = 0x2102 console = 3001

[[router PC2]] model = 2621 ram = 20 image =..iosunzip-c2600-i-mz.121-3.T.bin mmap = False confreg = 0x2102 console = 3003

[[router PC3]] model = 2621 ram = 20 image =..iosunzip-c2600-i-mz.121-3.T.bin mmap = False confreg = 0x2102 console = 3005

[[router PC4]] model = 2621 ram = 20 image =..iosunzip-c2600-i-mz.121-3.T.bin mmap = False confreg = 0x2102 console = 3008

第二篇:北邮嵌入式实验报告

北京邮电大学

嵌入式系统开发实验报告

学院:

班级: 姓名: 学号:

序号:

目录

一、实验目的..............................................................................................1

二、实验设备..............................................................................................1

三、基础实验(实验一~实验七)............................................................1

1.实验五..................................................................................................1 2.实验六..................................................................................................1 3.实验七..................................................................................................1

四、驱动程序..............................................................................................5

1.设备驱动程序的概念..........................................................................5 2.驱动程序结构......................................................................................6 3.设备注册和初始化..............................................................................7 4.设备驱动程序的开发过程..................................................................8

五、基本接口实验......................................................................................8

1.实验十二简单设备驱动程序..............................................................9 2.实验十三 CPU GPIO驱动程序设计...................................................9 3.实验十四中断实验...........................................................................10 4.实验十五数码管显示实验................................................................12 5.实验十六 LED点阵驱动程序设计...................................................19 6.实验十七 AD驱动实验....................................................................23 7.实验十八 DA驱动实验....................................................................26

六、实验中遇到的问题及解决方法........................................................30

七、实验总结及心得................................................................................31

一、实验目的

通过实验熟悉Linux环境,并掌握一些基本接口驱动的写法和用C语言编写简单的实验程序。学习LINUX开发环境的搭建,通讯配置等。并熟练掌握LINUX驱动程序的编写及开发流程。对嵌入式系统有进一步的了解。

二、实验设备

1.一套PXA270EP嵌入式实验箱

2.安装Redhat9的宿主PC机,并且配置好ARM Linux的开发环境

三、基础实验(实验一~实验七)

实验一~七为基础实验,目的是为后续实验搭建好软、硬件环境,配置好相关的协议、服务,并通过编写最简单的HelloWorld程序进行测试。由于后面的实验都要依靠前面实验的配置,故本段只着重叙述实验七的具体实现。

1.实验五

实验五为宿主PC机配置了TFTP服务。TFTP(Trivial File Transfer Protocol)是简单文件传输协议,由于特定开发环境的制约,这一服务是必须的。在配置完成后,每次重启宿主PC机时,都须先输入命令:service xinetd restart,以启动TFTP服务。

2.实验六

实验六为宿主PC机配置了NFS服务。NFS(Network File System)指网络文件系统,它实现了文件在不同的系统间使用。当我们想用远端档案时,只需调用“mount”就可以远端系统挂接在自己的档案系统之下。每次重启宿主PC机时,都须先输入命令:service nfs restart,以启动nfs服务。

3.实验七

实验七通过用c语言编写的简单程序HelloWorld,测试前面几个实验是否成功配置好环境,从超级终端可以看到HelloWorld程序的运行结果。

实验步骤如下: 1)硬件连接:

连接宿主 PC 机和一台 PXA270-RP目标板。2)打开宿主PC 机电源,进入 Linux操作系统。

3)启动RedHat 9.0 的图形界面,如下图,若您是以 root 身份登陆在文本模式下,则输入命令startx启动图形界面。进入RedHat 9.0 图形界面后,打开一个终端窗(Terminal)。

4)输入minicom然后回车,minicim设置为115200 8NI无流控。

5)打开PXA270_RP目标板电源,按目标板上的BOOT键,在minicom中应该会看到如下图:

6)在minicom终端窗口中,如图,输入下列四条命令 root ifconfig eth 192.168.0.50 up mount-o nolock 192.168.0.100:/ /mnt cd /mnt 此时,先将该窗口最小化,在后面的第 10 操作步骤中还将会回到该窗口中进行操作。

7)宿主机上打开一个终端窗口(Terminal),点击【红帽/System Tools/Terminal】启动终端窗口,输入下列 4 条命令: ① cd /home

②mkdir HW

③ cd HW

④ vi

HelloWorld.c

/*请您输入程序 7.1 程序清单*/

此时会显示一个空白的屏幕,这条命令的含义是,使用 Vi 编辑器,对一个名叫HelloWorld.c的文件进行编辑,我们看到的空白窗口是对文件进行编辑的窗口,如下图。就像在 Windows系统下面使用写字板等一样道理。

在 vi 里面先单击键盘 A 键,然后左下角会变成—INSER。输入程序的时候和其他编辑器是一样的,如下图。

当输入程序完毕后,单击键盘 Esc 键,然后按“:”(冒号)此时左下角会出现冒号然后输入“wq”最后按“Enter”确认存盘退出 vi 编辑器,如下图。

8)在上面同一个终端窗口中,输入下列 2 条命令交叉编译HelloWorld.c源程序,并查看生成的.o 目标文件,如图 7-10,图7-11: ①

arm-linux-gcc–oHelloWorldHelloWorld.c ②ls 等到再次出现提示符,代表程序已经正确编译。如果此步出现错误信息,请查看错误信息,并且重新编辑原来的 C文件,修改错误。直到正确编译。

9)重新打开第 7 步最小化的开有minicom的终端窗口,即到 PXA270-RP 目标板的mnt目录下,请您输入下列 3 条命令,运行HelloWorld编译成功的HelloWorld目标程序:

① cd home/HW

/*回到minicom中目标板的/mnt/home/HW目录下*/ ②ls ③./ HelloWorld

/*此时会看到如下图*/

四、驱动程序

1.设备驱动程序的概念

设备驱动程序实际是处理和操作硬件控制器的软件,从本质上讲,是内核中具有最高特权级的、驻留内存的、可共享的底层硬件处理例程。驱动程序是内核的一部分,是操作系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,完成以下功能:

对设备初始化和释放;

对设备进行管理,包括实时参数设置,以及提供对设备的操作接口; 读取应用程序传送给设备文件的数据或者回送应用程序请求的数据; 检测和处理设备出现的错误。

Linux操作系统将所有的设备全部看成文件,并通过文件的操作界面进行操作。对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,一般来说,是把设备映射为一个特殊的设备文件,用户程序可以像对其他文件一样对此设备文件进行操作。这意味着:

由于每一个设备至少由文件系统的一个文件代表,因而都有一个“文件名”。应用程序通常可以通过系统调用open()打开设备文件,建立起与目标设备的连接。

打开了代表着目标设备的文件,即建立起与设备的连接后,可以通过read()、write()、ioctl()等常规的文件操作对目标设备进行操作。

设备文件的属性由三部分信息组成:第一部分是文件的类型,第二部分是一个主设备号,第三部分是一个次设备号。其中类型和主设备号结合在一起惟一地确定了设备文件驱动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。

由于Linux 中将设备当做文件处理,所以对设备进行操作的调用格式与对文件的操作类似,主要包括open()、read()、write()、ioctl()、close()等。应用程序发出系统调用命令后,会从用户态转到核心态,通过内核将open()这样的系统调用转换成对物理设备的操作。

2.驱动程序结构

一个设备驱动程序模块的基本框架

在系统内部,I/O设备的存取通过一组固定的入口点来进行,入口点也可以理解为设备的句柄,就是对设备进行操作的基本函数。字符型设备驱动程序提供如下几个入口点:

open入口点。打开设备准备I/O操作。对字符设备文件进行打开操作,都会调用设备的open入口点。open子程序必须对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的,即同一时刻只能有一个程序访问此设备,则open子程序必须设置一些标志以表示设备处于忙状态。

close入口点。关闭一个设备。当最后一次使用设备完成后,调用close子程序。独占设备必须标记设备方可再次使用。

read入口点。从设备上读数据。对于有缓冲区的I/O操作,一般是从缓冲区里读数据。对字符设备文件进行读操作将调用read子程序。

write入口点。往设备上写数据。对于有缓冲区的I/O操作,一般是把数据写入缓冲区里。对字符设备文件进行写操作将调用write子程序。

ioctl入口点。执行读、写之外的操作。

select入口点。检查设备,看数据是否可读或设备是否可用于写数据。select系统调用在检查与设备文件相关的文件描述符时使用select入口点。

3.设备注册和初始化

设备的驱动程序在加载的时候首先需要调用入口函数init_module(),该函数最重要的一个工作就是向内核注册该设备,对于字符设备调用register_chrdev()完成注册。register_chrdev的定义为:intregister_chrdev(unsigned int major, const char *name, struct file_ operations *fops);其中,major是为设备驱动程序向系统申请的主设备号,如果为0,则系统为此驱动程序动态分配一个主设备号。name是设备名,fops是对各个调用的入口点说明。此函数返回0时表示成功;返回-EINVAL,表示申请的主设备号非法,主要原因是主设备号大于系统所允许的最大设备号;返回-EBUSY,表示所申请的主设备号正在被其他设备程序使用。如果动态分配主设备号成功,此函数将返回所分配的主设备号。如果register_chrdev()操作成功,设备名就会出现在/proc/dvices文件中。

Linux在/dev目录中为每个设备建立一个文件,用ls–l命令列出函数返回值,若小于0,则表示注册失败;返回0或者大于0的值表示注册成功。注册以后,Linux将设备名与主、次设备号联系起来。当有对此设备名的访问时,Linux通过请求访问的设备名得到主、次设备号,然后把此访问分发到对应的设备驱动,设备驱动再根据次设备号调用不同的函数。

当设备驱动模块从Linux内核中卸载,对应的主设备号必须被释放。字符设备在cleanup_ module()函数中调用unregister_chrdev()来完成设备的注销。unregister_chrdev()的定义为:intunregister_chrdev(unsigned int major, const char *name);包括设备注册在内,设备驱动的初始化函数主要完成的功能是有以下5项。(1)对驱动程序管理的硬件进行必要的初始化。

对硬件寄存器进行设置。比如,设置中断掩码,设置串口的工作方式、并口的数据方向等。

(2)初始化设备驱动相关的参数。

一般说来,每个设备都要定义一个设备变量,用以保存设备相关的参数。在这一步骤里对设备变量中的项进行初始化。

(3)在内核注册设备。

调用register_chrdev()函数来注册设备。(4)注册中断。

如果设备需要IRQ支持,则要使用request_irq()函数注册中断。(5)其他初始化工作。

初始化部分一般还负责给设备驱动程序申请包括内存、时钟、I/O端口等在内的系统资源,这些资源也可以在open子程序或者其他地方申请。这些资源不用时,应该释放,以利于资源的共享。

若驱动程序是内核的一部分,初始化函数则要按如下方式声明: int __initchr_driver_init(void);其中__init是必不可少的,在系统启动时会由内核调用chr_driver_init,完成驱动程序的初始化。

当驱动程序是以模块的形式编写时,则要按照如下方式声明: intinit_module(void)当运行后面介绍的insmod命令插入模块时,会调用init_module函数完成初始化工作。

4.设备驱动程序的开发过程

由于嵌入式设备由于硬件种类非常丰富,在默认的内核发布版中不一定包括所有驱动程序。所以进行嵌入式Linux系统的开发,很大的工作量是为各种设备编写驱动程序。除非系统不使用操作系统,程序直接操纵硬件。嵌入式Linux系统驱动程序开发与普通Linux开发没有区别。可以在硬件生产厂家或者Internet上寻找驱动程序,也可以根据相近的硬件驱动程序来改写,这样可以加快开发速度。实现一个嵌入式Linux设备驱动的大致流程如下。

(1)查看原理图,理解设备的工作原理。一般嵌入式处理器的生产商提供参考电路,也可以根据需要自行设计。

(2)定义设备号。设备由一个主设备号和一个次设备号来标识。主设备号惟一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,区分被一个设备驱动控制下的某个独立的设备。

(3)实现初始化函数。在驱动程序中实现驱动的注册和卸载。(4)设计所要实现的文件操作,定义file_operations结构。(5)实现所需的文件操作调用,如read、write等。

(6)实现中断服务,并用request_irq向内核注册,中断并不是每个设备驱动所必需的。

(7)编译该驱动程序到内核中,或者用insmod命令加载模块。(8)测试该设备,编写应用程序,对驱动程序进行测试。

五、基本接口实验

在完成了基本实验后,我们开始着手基本接口实验。在这些实验中,我们学习如何编写设备驱动程序,及如何用测试程序检验驱动程序是否正确,并通过改写测试程序正常地对驱动程序进行相关操作。

1.实验十二 简单设备驱动程序

本次实验的任务是编写一个字符型设备驱动程序,并学习在应用程序中调用驱动。考虑到我们初次接触驱动程序的编写,对此还十分陌生,因此指导书中提供了本次实验所要用到的程序源代码。虽然这样一个字符型设备驱动程序并没有任何实际作用,但是它让我们轻松掌握了嵌入式驱动的编写过程,因为复杂繁琐的驱动,其骨架都是相同的。因此,看懂本实验的源代码,学习并模仿其编写方法,对于后续实验有着非常重要的意义。

2.实验十三 CPU GPIO驱动程序设计

在本实验中,我们要编写第一个针对实际硬件的驱动程序。我们知道,凡是操作系统控制外部设备,即使是最简单的硬件电路,也是需要驱动的。本实验涉及的外部硬件只有电阻和发光二极管。我们使用自己编写的驱动程序与应用程序控制 GPIO96的电平,通过 LED 的亮灭来判断,是否 CPU 做出了正确的响应。

补充代码(1)

//-------------------WRITE-----------------------ssize_tSIMPLE_GPIO_LED_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [--kernel--]n”);

#endif

return count;}

补充代码(2)

//-------------------OPEN------------------------ssize_tSIMPLE_GPIO_LED_open(structinode * inode ,struct file * file){ #ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_open [--kernel--]n”);

#endif

MOD_INC_USE_COUNT;

return 0;}

补充代码(3)

//------------------structfile_operationsGPIO_LED_ctl_ops ={ open:SIMPLE_GPIO_LED_open, read:SIMPLE_GPIO_LED_read, write:SIMPLE_GPIO_LED_write, ioctl:SIMPLE_GPIO_LED_ioctl, release:SIMPLE_GPIO_LED_release, };实验作业

要求在目标板上LED闪烁产生亮7秒,灭2秒的效果 在测试程序中有这样一段代码: while(1){ ioctl(fd,LED_OFF);sleep(1);

sleep(1);while(1){ ioctl(fd,LED_OFF);sleep(2);

sleep(7);} 3.实验十四

中断实验

// 灭2秒 // 亮7秒 ioctl(fd,LED_ON);}

// 休眠1秒

ioctl(fd,LED_ON);只需将上面的代码改为如下代码即可:

在理论课中,我们学习了许多中断方面的知识,包括中断向量、中断优先级、中断过程等。在PXA270系统里,中断控制器分外部设备和 PXA270X 处理器设备产生的两个层次的中断,前者是初级的中断源,后者是次级中断源,大量的次级中断源通常被映射为一个初级中断源。

补充代码1 voidshowversion(void){ printk(“*********************************************n”);

printk(“t %s tn”, VERSION);

printk(“*********************************************nn”);

} static intSimpleINT_temp_count = 0;补充代码2 //-------------------READ------------------------ssize_tSIMPLE_INT_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){

#ifdef OURS_INT_DEBUG

#endif return count;printk(“SIMPLE_INT_read [--kernel--]n”);} 补充代码3 //-------------------WRITE-----------------------ssize_tSIMPLE_INT_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){

#ifdef OURS_INT_DEBUG

} 补充代码4 //------------------structfile_operationsINT_ctl_ops ={ open: SIMPLE_INT_open, read: SIMPLE_INT_read, #endif return count;printk(“SIMPL_INT_write [--kernel--]n”);write:SIMPLE_INT_write, ioctl:SIMPLE_INT_ioctl, release:SIMPLE_INT_release, };

通过此实验,我了解了硬件中断管脚与中断号的对应关系,以及中断号与中断处理程序的对应关系,对于今后编写更为复杂的中断程序打下基础。

4.实验十五

数码管显示实验

在此实验中,我们要编写针对 74LV164 的驱动程序,并用其串并转换功能来控制八段LED数码管的显示。

补充代码1 voidshowversion(void){ printk(“*********************************************n”);

printk(“t %s tn”, VERSION);

printk(“*********************************************nn”);

} 补充代码2 //-------------------READ------------------------ssize_tSERIAL_LED_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_HELLO_DEBUG

} 补充代码3 //-------------------WRITE-----------------------ssize_tSERIAL_LED_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops)return count;printk(“SERIAL_LED_read [--kernel--]n”);#endif { #ifdef OURS_HELLO_DEBUG

} 补充代码4 //-------------------IOCTL-----------------------ssize_tSERIAL_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){ #ifdef OURS_HELLO_DEBUG

#endif

} 补充代码5 //-------------------OPEN------------------------ssize_tSERIAL_LED_open(structinode * inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG

#endif

return 0;} MOD_INC_USE_COUNT;printk(“SERIAL_LED_open [--kernel--]n”);return 0;printk(“SERIAL_LED_ioctl [--kernel--]n”);return count;#endif write_byte(* buf);printk(“SERIAL_LED_write [--kernel--]n”);补充代码6 //-------------------RELEASE/CLOSE---------------ssize_tSERIAL_LED_release(structinode *inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG

printk(“SERIAL_LED_release [--kernel--]n”);

#endif MOD_DEC_USE_COUNT;return 0;} 补充代码7 //------------------structfile_operationsSERIAL_LED_ops ={ open: SERIAL_LED_open,read: SERIAL_LED_read,write:SERIAL_LED_write,ioctl:SERIAL_LED_ioctl,release:SERIAL_LED_release, };补充代码8 staticint __initHW_SERIAL_LED_init(void){ int ret =-ENODEV;

ret =

devfs_register_chrdev(SERIAL_LED_MAJOR, &SERIAL_LED_ops);

showversion();if(ret < 0)“serial_led_ctl”,} {

} else { } return ret;printk(“ pxa270 serial_led_driver register success!![--kernel--]n”);printk(“ pxa270 init_module failed with %dn [--kernel--]”, ret);return ret;补充代码9 staticint __init pxa270_SERIAL_LED_init(void){ int ret =-ENODEV;

printk(“pxa270_SERIAL_LED_init [--kernel--]n”);

#endif

ret = HW_SERIAL_LED_init();if(ret)return ret;return 0;} 补充代码10 static void __exit cleanup_SERIAL_LED(void){ #ifdef OURS_HELLO_DEBUG #ifdef OURS_HELLO_DEBUG

#endif }

补充代码11 MODULE_DESCRIPTION(“serial_led driver module”);

MODULE_AUTHOR(“liduo”);

MODULE_LICENSE(“GPL”);

module_init(pxa270_SERIAL_LED_init);module_exit(cleanup_SERIAL_LED);使用测试程序看到的测试结果是数码管按0-9显示输出。实验作业要求在上述基础上,分别实现一下两个功能:

①要求您再编写一个测试程序,实现 PXA270-EP 目标板上的 LED 数码管循环显示的数字9-0。

②要求您再编写一个测试程序,实现 PXA270-EP 目标板上的 LED 数码管循环显示的数字02468。

由于在测试程序中定义了数组buf[10]分别存储了0-9是个数,因此上述功能的实现方法是,分别对测试程序做如下修改:

原测试程序: while(1){ for(count=0;count<10;count++){ data[0] = buf[count];ret=write(fd,data,1);sleep(1);} } 实现功能①: while(1){ for(count=9;count>=0;count--)} } 结果显示

// 倒序显示数字

{ data[0] = buf[count];ret=write(fd,data,1);sleep(1);devfs_unregister_chrdev(SERIAL_LED_MAJOR, “serial_led”);printk(“cleanup_SERIAL_LED [--kernel--]n”);实现功能②: while(1){ for(count=0;count<9;count=count+2)} } 结果显示

// 更改显数顺序

{ data[0] = buf[count];ret=write(fd,data,1);sleep(1);

通过更改显数的顺序,很容易实现实验作业里要求的功能。

5.实验十六 LED点阵驱动程序设计

通过本实验的操作,我们将 8X8 的点阵 LED 驱动起来并通过编写测试程序,使其能够按照您的意图进行显示。要求您还编写更多的测试程序

补充代码1 voidshowversion(void){ printk(“*********************************************n”);printk(“t %s tn”, VERSION);printk(“*********************************************nn”);

} 补充代码2 //-------------------READ------------------------ssize_tSIMPLE_LED_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_LED_DEBUG

#endif return count;printk(“SIMPLE_LED_read [--kernel--]n”);} 补充代码3 //-------------------IOCTL-----------------------ssize_tSIMPLE_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){

#endif

} 补充代码4 //------------------structfile_operationsLED_ctl_ops ={ open: SIMPLE_LED_open, read:

SIMPLE_LED_read, write: SIMPLE_LED_write, ioctl: SIMPLE_LED_ioctl, release:SIMPLE_LED_release, };补充代码5 staticint __init pxa270_LED_CTL_init(void){ int ret =-ENODEV;

printk(“pxa270_LED_CTL_init [--kernel--]n”);

#endif

ret = HW_LED_CTL_init();if(ret)

return ret;#ifdef OURS_LED_DEBUG return 0;printk(“SIMPLE_LED_ioctl [--kernel--]n”);#ifdef OURS_LED_DEBUG return 0;} 补充代码6 static void __exit cleanup_LED_ctl(void){

#ifdef OURS_LED_DEBUG

#endif

} ①要求您再编写一个测试程序,实现按横的方向隔行顺序扫描 LED 点阵数码管。

②要求您再编写一个测试程序,实现按竖的方向顺序扫描 LED 点阵数码管。作业一,隔行扫描:

printk(“cleanup_LED_ctl [--kernel--]n”);outw(0x0000,ioremap_addr);

devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “led_ary_ctl”);for(i=1;i<=8;i2++){

buf[0]=c;buf[1]=~r;// row for(j=1;j<=8;j++){

} r = 1;c = c<<1;

write(fd,buf,2);

printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);usleep(200000);// sleep 0.2 second r=r<<1;

buf[1]=~r;// column

结果显示

作业二,竖向扫描:

for(i=1;i<=8;i++){

buf[0]=c;buf[1]=~r;// row for(j=1;j<=8;j++){

} r = 1;c = c<<1;

write(fd,buf,2);

printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);usleep(200000);// sleep 0.2 second r=r<<1;

buf[1]=~r;// column

结果显示

6.实验十七 AD驱动实验

通过本实验的操作,我们将 AD 转换器驱动起来并通过编写测试程序,使其能够将模拟信号量按照我们的要求转换成数字信号量。为了更加清楚地理解 AD 转换器的工作过程,请您再编写一个测试程序,将 UCB_ADC_INP_AD0 换成其他通道,来观察其他 AD 通道情况。

补充代码1 voidshowversion(void){ printk(“%sn”,VERSION);} struct ucb1x00 *ad_ucb;

补充代码2 //-------------------READ------------------------staticssize_tadctl_read(struct file * file ,char *buf, size_t count, loff_t *offset){

} 补充代码3 //-------------------WRITE-----------------------ssize_tadctl_write(struct file * file ,const char *buf, size_t count, loff_t *offset){

#ifdef OURS_HELLO_DEBUG printk(“writen”);

#endif

} 补充代码4 //-------------------OPEN------------------------ssize_tadctl_open(structinode * inode ,struct file * file){

#ifdef OURS_HELLO_DEBUG printk(“openn”);

#endif

}

补充代码5 //-------------------RELEASE/CLOSE---------------ssize_tadctl_release(structinode *inode ,struct file * file){

#ifdef OURS_HELLO_DEBUG printk(“releasen”);

#endif return 0;return 0;return count;#ifdef OURS_HELLO_DEBUG printk(“readn”);#endif return count;} 补充代码6 staticstructfile_operationsadctl_ops = {

};补充代码7 //-------------------INIT------------------------staticint __initHW_AD_CTL_init(void){

return ret;}

补充代码8 staticint __init pxa270_AD_CTL_init(void){ int ret =-ENODEV;#ifdef OURS_HELLO_DEBUG int ret =-ENODEV;ret = devfs_register_chrdev(ADCTL_MAJOR, “adctl”, &adctl_ops);showversion();ad_ucb=ucb1x00_get();if(ret < 0){

} else { } adctl_dev_handle = devfs_register(NULL, “ad_ctl”, DEVFS_FL_DEFAULT, printk(“adctl driver register success!n”);printk(“fail %dn”,ret);return 0;read: ioctl: adctl_read, adctl_ioctl, write: adctl_write, open: adctl_open, release:adctl_release,ADCTL_MAJOR, 0, S_IFCHR, &adctl_ops, NULL);printk(“initn”);#endif ret=HW_AD_CTL_init();if(ret)}

补充代码9 static void __exit cleanup_AD_ctl(void){

}

7.实验十八 DA驱动实验

通过本实验的操作,我们使用示波器看到了通过DA转换而输出的波形。在此基础上,要求试写一个实现输出三角波的测试程序。

补充代码1 #include #include #include #include #include #include #include #include 补充代码2 voidshowversion(void){ printk(“*****************************n”);#ifdef OURS_HELLO_DEBUG printk(“cleanupn”);#endif devfs_unregister_chrdev(ADCTL_MAJOR,“ad_ctl”);devfs_unregister(adctl_dev_handle);return ret;return 0;

} printk(“t %st n”,VERSION);printk(“*****************************n”);static long ioremap_addr;补充代码3 //-------------------READ------------------------ssize_tSIMPLE_DA_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_DA_DEBUG

} 补充代码4 //-------------------WRITE-----------------------ssize_tSIMPLE_DA_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){

printk(“SIMPLE_DA_write[--kernel--]n”);

#endif

return count;} 补充代码5 //-------------------IOCTL-----------------------ssize_tSIMPLE_DA_ioctl(structinode * inode ,struct file * file, unsigned intcmd, outb(buf[0],ioremap_addr);#ifdef OURS_DA_DEBUG return count;#endif printk(“SIMPLE_DA_read[--kernel--]n”);long data){ #ifdef OURS_DA_DEBUG

printk(“SIMPLE_DA_ioctl[--kernel--]n”);

#endif return 0;} 补充代码6 //-------------------OPEN------------------------ssize_tSIMPLE_DA_open(structinode * inode ,struct file * file){

#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_open [--kernel--]n”);

MOD_INC_USE_COUNT;return 0;

#endif } 补充代码7 /------------------structfile_operationsDA_ctl_ops ={

read: SIMPLE_DA_read,};

补充代码8 release:

SIMPLE_DA_release, ioctl:

SIMPLE_DA_ioctl, write:

SIMPLE_DA_write, //-------------------INIT------------------------staticint __initHW_DA_CTL_init(void){ int ret =-ENODEV;

}

补充代码9 staticint __init pxa270_DA_CTL_init(void){ int ret =-ENODEV;

printk(“pxa270_DA_CTL_init [--kernel--]n”);

#endif #ifdef OURS_DA_DEBUG } printk(“ pxa270 led_driver register success!![--kernel--]n”);{ else } return ret;printk(“ pxa270: init_module failed with %dn [--kernel--]”, ret);{ if(ret < 0)showversion();ret = devfs_register_chrdev(SIMPLE_DA_MAJOR, “da_ctl”, &DA_ctl_ops);

ret = HW_DA_CTL_init();if(ret)

return ret;return 0;} 补充代码10 static void __exit cleanup_DA_ctl(void){

#endif } 补充代码11 MODULE_DESCRIPTION(“DA_ctl driver module”);MODULE_AUTHOR(“liduo”);MODULE_LICENSE(“GPL”);module_init(pxa270_DA_CTL_init);module_exit(cleanup_DA_ctl);printk(“cleanup_DA_ctl [--kernel--]n”);#ifdef OURS_DA_DEBUG

六、实验中遇到的问题及解决方法

每一次上课重新启动后,当需要将宿主PC机的根目录挂在到PXA270-EP目标板的mnt目录下(即在超级终端中输入命令“mount –o soft,timeo=100,rsize=1024 192.168.0.100:/ /mnt”)时,常显示无法挂载。

解决方法:在超级终端下的挂载命令应该用”mount –o nolock 192.168.0.100:/ /mnt”,如果依然不能挂载需要重启NFS服务,即在PC机终端中输入命令”service nfs restart”两遍后就可以挂载,当然有时候也可能是因为网线没插好。

在每次重启机器之后都需要将PC机终端的IP地址和开发板中的系统的IP地址设定正确,不然也无法挂载。

七、实验总结及心得

本学期的所有实验均在宿主PC机与PXA270-EP目标板上进行。在实验中,我们先建立硬件实验平台,又建立主机软件开发环境,接着为实验进行各项配置,最后完成了各个实验中的多种功能。值得注意的是,前期的硬件、软件准备必须完整无误地实现,后续的实验才能顺利进行。所以,打基础的工作一定要仔细谨慎。后续实验中虽然给出了驱动程序的框架,仍需要我们自己补充完整,并开动脑筋举一反三,在原代码的基础上进行一定修改以实现新的功能。

通过这学期的实验,我逐步完成了建立实验软件开发平台,搭建实验编译软件环境,在PC上编辑、编译一个应用程序,并且在嵌入式系统上运行和调试它的过程。在实验中,不难发现,编译驱动程序大体框架都是一样的,比如里面的读函数、写函数、ioctl函数、打开、关闭以及函数模块的初始化并且在超级终端上显示出等。但所不同的是,要根据不同的实验要求修改名称,并且对其中必要的部分进行修改。

除此之外,我认为很多基础知识对实验的进行也起着非常大的作用,例如数码管的显示原理。在掌握了基础知识之后,上机的过程会显得相对简单,尤其是代码框架已经给出,我们所以需要做的就是根据需要稍作改动来得到我们想要的结果。

在实验过程中常常会遇到各种各样的问题,刚开始时我不知如何是好,只能求助于老师和同学,后来随着实验的进行,我对实验的内容和虚拟机都有了一定的了解,遇到问题时也可以静下心来思考其原因,自己尝试各种方法去解决问题。整个实验让我了解了一套完整的嵌入式系统驱动程序开发的全过程,学到的内容非常丰富,相信在学习了这些内容后,在今后的学习工作中接触到类似内容,我不会感到无从下手,而是能够有条不紊。

感谢老师的辛勤指导!

第三篇:北邮数据库实验报告

数据库实验报告

(三)姓名:学号:班级:

1.用Transact-SQL语句、数据导入、SQL Server Management Studio(企业管理器)输入的方法对所给定的8张表的数据输入到数据库中。自行决定每张表的数据导入办法,但每种方法各针对二或三张表。

 Transact-SQL语句: 导入department,student, student_course表。

insertinto department select*from openrowset

('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:课件数据库database2.xls',department$);

insertinto student select*from openrowset

('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:课件数据库database2.xls',student$);

insertinto student_course select*from openrowset

('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:课件数据库database2.xls',student_course$);

 数据导入:

操作:选中数据库studentsdb,右键-任务-导入数据。导入book, class, course表。

SQL Server Management Studio: 操作:右键需要编辑的表,选择编辑前200行。

Teacher:

Teacher_course_class:

导入结果: Book:

Class:

Course:

Department:

Student:

Student_course:

Teacher:

Teacher_course_class:

2.用Transact-SQL向Course表中插入一条记录,course_name为空,看运行的结果。

SQL语句:

INSERTINTO course VALUES('dep02_s002', null,'dep02_s002', '72', '5', '4');运行结果:

分析:course_name有not null的约束,因此这条语句不能执行。

3.用Transact-SQL修改Course表中credit为5的记录,将其credit改为7, credit小于4的改为2,看运行的结果。

SQL语句:

update course set credit=7 where credit=5;执行结果:

分析:约束C1指定了credit的范围为1至6.SQL语句:

update course set credit=2 where credit<4;执行结果:

4.删除一条学生记录,看运行结果,对运行结果进行分析。SQL语句:

deletefrom student where student_id='g9940201';执行结果:

分析:因为有参照完整性约束,不能删除。

5.用Transact-SQL完成将编号为dep04_b001的课程的选修信息插入到一个新的选课信息表中。

SQL语句:

Creattablestudent_course2(course_idchar(20), student_idchar(20)gradeint, creditint, semesterint,school_yearchar(20),primarykey(course_id,student_id));

insertintostudent_course2 select*fromstudent_course wherecourse_id='dep04_b001';执行结果:

6.用Transact-SQL完成删除单片机原理课程的选课信息,分析运行结果。

SQL语句:

deletefrom student_course where course_id in(select course_id from course

where course_name='单片机原理')执行结果: 分析:所有课程号为dep04_s003的课程被删除。

本实验中遇到的问题和解决方法:

本实验的顺利完成需要预先作很多准备工作。以下就是我在遇到缺少组件accessdatabaseengine时的解决过程的记录。

AccessDatabaseEngine的安装

accessdatabaseengine用于和office连接,导入导出数据,本实验中需要导入excel文件。安装配合office的版本,我安装的是accessdatabaseengine2017(English)版本。安装32位版本,因office2016是32位。之前误操作安装了不能使用的老旧版本accessdatabaseengine2007,通过控制面板-应用程序卸载将其卸载了。安装accessdatabaseengine依然报错,是因为microsoftofficeclicktorun阻碍sqlserver的一些功能,需要将其卸载。这是微软推出的用于减少office打开速度的应用程序,安装office2016时会自动安装上,原理是开机时将一部分内容放到内存中,因此打开文件时会更快一些。检测自己的office是通过clickto run 还是MSI安装的,可以在word中点击文件-账户,查看产品信息,如果有下图中“office更新”这个选项,则说明安装过click to run。这个程序在控制面板-应用程序中找不到,因此用删除注册表的方式卸载。快捷键“win+R”输入“regedit”打开注册表编辑器,左边HKEY_CLASSES_ROOT-Installer-Product-00006开头的选项,有四个。单击这几个选项,在右侧查看详细信息,可以看到ProductNam是Microsoft Access database engine 2007(我原来误安装的老版本)。删除之前先备份注册表。方法一:选中要删除的文件,右键-导出,保存。只保存了要删除的文件。方法二:注册表编辑器,文件-导出,保存。保存了注册表所有信息。这是因为如果误删了重要文件会导致严重后果,可能需要重装系统,留此备份是为了可以恢复系统。

备份完之后,选中要删除的文件(00006开头的四个),右键-删除即可。回到Access database engine 32位的程序安装包,安装。我无法安装64位,可能是因为office是32位。安装成功之后就可以在sqlserver中导入excel文件了。

第四篇:重邮计算机网络实验报告

计 算 机 网 络 实 验 报 告

实验一 网络命令与使用实验日志

实验题目:网络命令与使用

实验目的:

掌握常用网络命令的使用方法;

熟悉和掌握网络管理、网络维护的基本内容和方法

实验要求:

试用网络命令实现如下功能:

1、在窗口中显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关

2、向一台电脑无限制的发送数据包,此数据包大小为60000byte

3、查看本地计算机或另一台计算机的ARP高速缓存中的当前内容

4、从一台ftp服务器上下载一份文件

记录实验中所使用的命令格式和执行结果;

实验主要步骤: 进入命令行界面

1.显示网络适配器的物理地址、主机的ip地址、子网掩码以及默认网关 ipconfig/all 2.向电脑无限制发送数据包,大小为60000byte:ping 172.16.38.31-l 60000 –t 3.查看本地计算机或另一台计算机的arp高速缓存中的当前内容 查看本地计算机 arp –a 另一台计算机

arp 172.16.38.31-a 4.从一台ftp服务器上下载一份文件

ftp open @s172.16.38.100 ls lcd d:test get wrar501sc.exe 实验结果: 1.ipconfig/all

2.3.4.心得体会:

经过本次的实验学习,初步掌握了简单的网络命令的使用,了解到了如何进行网络管理和网络维护,用命令行进行操作容易出错误,打错一行便需要重来,十分的不方便,不过操作界面十分的简单。

实验二 网络服务器建立与使用实验日志

实验题目:网络服务器建立与使用 实验目的:

掌握HTTP服务器和FTP服务器的配置方法。

实验要求:

(1)IIS Web服务器的配置

进入Web站点创建向导

设定Web站点说明 设置Web站点IP地址

设置网页所在目录 设置Web站点起始页

创建测试网页 启动Web服务器,测试。(2)Serv-U FTP服务器的配置

安装Serv-U FTP服务器; 创建用户,绑定发布目录; 设定目录权限; 测试。

实验主要步骤:

IIS下WEB服务器的配置过程

(一)、进入:我的电脑-> 控制面板->管理工具->Internet 服务管理器

(二)、配置:选中“XX站点”,点右键,选择属性:在此页中分别(主要)选择主目录、文档等进行设置

第三方软件的ftp服务器的安装与配置

(一)、安装Serv-U FTP Server

(二)建立第一个可用的FTP服务器:

(三)使用此FTP服务器

实验结果:

IIS下WEB服务器的配置

访问成功

第三方软件的FTP服务器的安装与配置

用不同方式访问ftp服务器

心得体会:

经过本次学习成功掌握了http服务器和ftp服务器的配制方法。在iis web服务器的配置中,最重要的就是设置网页所在的目录,不然就会导致网页无法访问。在serv-u ftp服务器的配置中,根据指导书的指导步骤进行配置,十分的简单易用,上手很快。通过serv-u创建的ftp服务器很容易管理,让我们可以节省不少的时间。

实验三 网络协议分析实验日志

实验题目:网络协议分析 实验目的:

掌握协议分析软件的使用方法和基本特点; 了解Ping命令的工作过程; 了解FTP协议的工作过程。

实验要求:

写出实验过程及结果;

记录捕获的关键数据,并分析协议工作过程。实验中遇到的问题及解决; 心得体会。

实验主要步骤:

安装ethereal 1.使用Ethereal分析软件捕获一段Ping命令的数据流,并分析其工作过程。Icm抓包

打开cmd界面 ping 172.16.38.100 2.登录ftp://172.16.37.223,并下载一个小文件,使用Ethereal分析软件分析其工作过程。Tcp抓包。打开cmd界面

ftp open 172.16.38.100 lcd d: get 实验日志模板.doc 3.http抓包

浏览网页mail.cqupt.edu.cn

实验结果: 安装

1.icmp抓包

2.tcp抓包

3.http抓包

心得体会:

过本次试验,我了解到了如何使用抓包软件进行网络协议分析,掌握了协议分析软件的使用方法和基本特点。通过抓包的过程,我了解到了ping命令的工作过程,也了解到了ftp协议的工作过程。如果网络不进行信息加密,则会容易被人截取账户信息,例如账户、密码、个人交易情况等等,所以也证明了信息安全的重要性。

实验四 网络设备与VLAN配置实验日志

实验题目:网络设备使用与VLAN配置

实验目的:

掌握交换机的管理特性,能够将交换机配置文件备份到TFTP服务器

理解Port Vlan的配置

理解VLAN如何跨交换机实现

通过路由器实现各个VLAN间的互联互通 实验要求:

交换机基本操作

VLAN基本配置:交换机端口隔离(Port Vlan)

跨交换机实现VLAN(Tag Vlan)

通过路由器实现VLAN间通信(交换机Switch2950)实验主要步骤以及测试结果: 实验1 交换机基本操作

拓扑图

1.基本配置:交换机配置:

PC机设置:

验证测试:

在各PC机上测试与交换机管理IP地址的连通性:

2.继续配置

将交换机的当前配置信息保存到PC1的TFTP服务器,并命名为config.txt:

在PC1上查看已保存的交换机配置文件:

实验2 VLAN基本配置:交换机端口隔离(Port Vlan)

拓扑图

1.交换机配置:

测试命令:S1#show vlan

2.PC机设置:

验证测试:

实验3 跨交换机实现VLAN(Tag Vlan)

拓扑图

1.交换机s1配置:

2.交换机s2配置:

3.PC机设置:

Pc1:IP address:192.168.1.1 netmask:255.255.255.0 gateway:192.168.1.254 Pc2:IP address:192.168.1.2 netmask:255.255.255.0 gateway:192.168.1.254

Pc3:IP address:192.168.1.3 netmask:255.255.255.0 gateway:192.168.1.254 Pc4:IP address:192.168.1.4 netmask:255.255.255.0 gateway:192.168.1.254 4.测试:

实验4 通过路由器实现VLAN间通信(交换机Switch2950)

拓扑图

1.交换机s1配置: 2.交换机s2配置:

3.PC机设置: Pc1:IP address:192.168.1.1 netmask:255.255.255.0 gateway:192.168.1.254 Pc2:IP address:192.168.2.1 netmask:255.255.255.0 gateway:192.168.2.254 Pc3:IP address:192.168.1.2 netmask:255.255.255.0 gateway:192.168.1.254 Pc4:IP address:192.168.2.2 netmask:255.255.255.0 gateway:192.168.2.254 4.路由器配置:

5.测试

心得体会:

经过本次大型实验的学习,基本掌握了交换机的管理特性,能够将交换机配置文件备份到tftp服务器。也深刻的理解了port vlan的配置和vlan的跨交换机的实现。也掌握了通过路由器实现各个vlan的互联互通。初次接触network boson这个软件,这个软件确实十分的好用,不用花费人的时间和金钱去配置实体的装置,只需要在软件上面模拟就可以真实地掌握网络设备实用和vlan配置,真是十分的方便。

实验五 静态路由与缺省路由使用实验日志

实验题目:

静态路由与缺省路由使用 实验目的:

通过静态路由使不同网段用户互联互通 实验要求:

通过静态路由使不同网段用户互联互通 实验主要步骤以及测试结果:

拓扑图

A 路由器的配置:

B 路由器的配置:

PC机1和2配置:

验证命令及测试:

心得体会:

经过本次实验的学习,成功地通过静态路由使不同网段的用户实现了互联互通。利用boson软件实现确实非常的方便快捷。

实验六 动态路由配置使用实验日志

实验题目:

动态路由配置使用 实验目的:

本实验主要用来练习动态路由OSPF协议,验证该协议的工作原理。实验主要步骤以及测试结果:

1.绘制实验拓扑图

2.配置路由器基本参数

配置路由器1 配置路由器2 3.配置 PC 机基本参数

测试主机12连接到默认网关的连通性

4.配置R1、R2并测试动态路由OSPF协议

验证测试:

PC1、PC2测试动态路由配置:

心得体会:

通过本次实验,我掌握了如何进行动态路由的配置。进行了动态路由OSPF协议的反复练习,最终成功的完成了实验,也验证了该协议的工作原理,收获十分巨大。

实验七 ACL配置与使用实验日志

实验题目:

ACL配置与使用 实验目的:

掌握标准IP访问列表规则及配置。实现网段间相互访问的安全控制。掌握扩展IP访问列表规则及配置。实现对网络服务访问的安全控制。实验主要步骤以及测试结果:

实验1 标准IP访问列表

拓扑图

1.基本配置

各PC机IP可设置为:

PC1:IP 192.168.3.2 net-mask 255.255.255.0 default-gateway 192.168.3.1 PC2:IP 192.168.2.2 net-mask 255.255.255.0 default-gateway 192.168.2.1 PC3:IP 192.168.1.2 net-mask 255.255.255.0 default-gateway 192.168.1.1 观察接口状态

2.配置标准IP访问控制列表并测试

3.把访问控制列表在接口下应用并测试

实验2 扩展IP访问列表

拓扑图

1.基本配置

各PC机IP可设置为:

PC1:IP 172.16.10.2 net-mask 255.255.0.0 default-gateway 172.16.10.1 PC2:IP 172.17.10.2 net-mask 255.255.0.0 default-gateway 172.17.10.1 PC3:IP 172.18.10.2 net-mask 255.255.0.0 default-gateway 172.18.10.1 测试观察接口状态:

2.配置扩展IP访问控制列表并测试

3.把访问控制列表在接口下应用并测试

心得体会:

经过本次实验学习,我成功的掌握标准IP访问列表规则及配置,还有扩展IP访问列表规则及配置。这次实验是根据实际问题来进行的,通过本次实验,虽然不能进行真正的实际问题的解决,但是还是给予我们一些解决实际问题的思路。

实验八 NAT配置与使用实验日志

实验题目:

NAT配置与使用 实验目的:

掌握内网中一台服务器连接到Internet网时的静态内部源地址转换。实验要求:

你是某公司的网络管理员,内部网络有FTP服务器可以为外部网络提供服务,服务器的IP地址必须采用静态地址转换,以便外部用户可以使用这些服务。实验主要步骤以及测试结果:

拓扑图

1.基本配置(R1、R2)配置:

PC1配置:IP address 192.168.0.1 netmask 255.255.255.0 default-gateway 192.168.0.254PC2配置:IP address 202.0.0.1 netmask 255.0.0.0

default-gateway 202.0.0.254 验证测试:

2.配置静态NAT映射

测试

心得体会:

通过本次的实验学习,掌握内网中一台服务器连接到Internet网时的静态内部源地址转换。决解了一个公司管理的实体模型,这个方法可以决解这一类问题,但是想要做一个公司的网络管理员,还有其他很多很多的事情需要学习,需要有决解更多问题的能力才行。

实验九 HDLC与PPP方式的网络互联与静

态路由实验日志

实验题目:

HDLC与PPP方式的网络互联与静态路由 实验目的:

掌握高级数据链路控制(简称HDLC)的原理和配置方法。

PPP的原理和配置方法。

实验主要步骤以及测试结果:

一、HDLC 方式

拓扑图

Router1配置:

Router2配置:

Pc1:/ip 172.10.10.2 Pc2:/ip 172.10.10.3 Pc3:/ip 172.10.20.2 Pc4:/ip 172.10.20.3 3.测试

255.255.255.0 255.255.255.0 255.255.255.0 255.255.255.0

/dg 172.10.10.1 /dg 172.10.10.1 /dg 172.10.20.1 /dg 172.10.20.1

二、PPP 方式

拓扑图与HDLC相同。Router1、Router2配置:

网络拓扑图和设备端口的IP地址与HDLC方式一样

测试连通性

心得体会:

通过本次实验的学习掌握了HDLC的原理和配置方法以及PPP方式的原理和方法,也通过自身的学习解决了一些问题。起初用PPP的源代码进行连接的时候,发现并不能连通,于是上网进行了资料的查找,自己组合了一些代码,便成功的。通过自己的学习达到了实验的目的收获了成就感。

实验十

ISDN方式的网络互联与RIP动态

路由实验日志

实验题目:

ISDN方式的网络互联与RIP动态路由 实验目的:

RIP(Routing information Protocol)的原理和配置方法。综合数字业务网(ISDN)的原理和配置方法

实验要求: 完成ISDN方式下的实验,打通两个LAN和WAN之间的联系。

实验主要步骤以及测试结果:

拓扑图

(1)Router1、Router2的配置

PC机的配置 PC1:/ip 192.10.10.2 255.255.255.0 /dg 192.10.10.1 PC2:/ip 192.10.10.3 255.255.255.0 /dg 192.10.10.1 PC3:/ip 192.10.20.2 255.255.255.0 /dg 192.10.20.1 PC4:/ip 192.10.20.3 255.255.255.0 /dg 192.10.20.1 测试

心得体会:

通过本次实验大致掌握了RIP的原理和配置方法以及ISDN方式的网络互联。但是这个实验是有问题的,代码的错误率很高,并不能实现网络的互联,还是需要自己独自在网络上进行学习和探索才能弄懂。

实验十一 Frame-Relay——基本帧中继配

置实验日志

实验题目:

Frame-Relay——基本帧中继配置 实验目的:

掌握基本帧中继的原理和配置方法。实验主要步骤以及测试结果:

拓扑图

配置路由器R1、R2配置

进行帧中继的测试:

心得体会:

通过本次实验的学习,基本掌握了帧中继的原理和配置方法。实验比较简单,代码也没有什么错误,十分好理解。

实验十二 帧中继点到点子接口配置日志

实验题目:

帧中继点到点子接口配置 实验目的:

本实验用来练习Frame-Relay—帧中继点到点子接口配置

实验主要步骤以及测试结果:

拓扑图

配置路由器router1、router2、router3

测试帧中继

心得体会:

这次是最后一次实验,通过本次实验的学习,我基本掌握了Frame-relay-帧中继点到点子接口配置以及原理。计算机网络确实复杂深奥,需要我们多多学习才能运用自己的知识去解决实际的问题。

第五篇:计算机网络实践实验报告

《计算机网络实践实验报告》

实验一 :传输介质的实验

实验思考题:

1.左右两侧线序完全一致,但不是标准线序。问:能否当正线使用?

2.8根线中有4根是实际用于数据传输。问:是哪4根?

3.直通线和交叉线实际的应用环境是什么?

4.列出3中功能不同的测线仪,并简述其功能。

实验二 :常用网络命令介绍

实验思考题:

1.如何通过常用网络命令判断目标主机的操作系统?

2.作为一名网管,应对于网络拓扑有详尽的了解。如何通过网络命令判断故障点。

3.分析网关的作用。

实验三 :在WindowsServer 2003 环境下配置WWW服务

实验思考题:

1.WWW服务的支撑组件事ISS,最新的IIS版本是什么?支撑WWW所必须的IIS组件事什么?(internet信息服务管理器公用文件 万维网服务)

2.同一IP能否搭配两个或多个WWW服务器?能

3.如何设计非80端口访问服务器? 默认网站 右键 属性 tcp端口浏览器输入

http://10.0.56.77:8080

4.Windows 默认的站点主目录是什么? C:Inetpubwwwroot

5.描述hTTP协议工作的过称及原理。

实验四 :在Windows Server 2003 下搭建DNS 服务器

实验思考题:

1.把本机搭成DNS服务器,能否为主机某一网站分配两个或多个域名?能

2.在同一DNS服务器内,能否为不同的网站(不同的IP)分配相同的域名?不能

3.在实验实内为本机安装了DNS组件,但没有添加任何记录。在TCP/IP 属性里,将本机的IP设成唯一的DNS 服务器。在外网连通的情况下,你能否通过域名

访问百度网站?不能

4.在TCP/IP属性里面,将本机IP设成唯一DNS服务器,在外网连通的情况下,能否通过域名访问百度网站。不能

5.某主机IP掩码网关配置正常,未设DNS服务器,该主机能否访问某一网站,如

可以,通过什么来访问? 能通过代理访问

6.反向搜索区域的作用

实验五:搭建DHCP

实验思考题:

1.能否通过交换机充当DHCP服务器?如可以,用二层交换机还是三层交换机?

2.DHCP服务器的IP是否必须要和IP值在同一子网,说明原因,如果在同一子网,该IP是否需要做排除?如果不做排除,地址租约中会出现什么样的效果?

3.设计一个实验,使租约生效。

4.DHCP服务器是否需要为客户端分配网关及DNS,描述原因。

实验六:用serv—u搭建服务器

实验思考题:

1.serv—u中组的使用

2.课堂所列问题

实验七:代理服务器

实验思考题:

1.设置代理服务器的作用

2.分析代理服务器与网络安全之间的关系

3.列出三个实际应用的代理服务器软件

下载北邮计算机网络实践第三次实验报告word格式文档
下载北邮计算机网络实践第三次实验报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    北邮嵌入式实验报告[五篇]

    嵌入式系统开发实验报告 班级: 姓名: 班内序号: 学号: 日期: 目录 一、 实验目的 .........................................................................................

    北邮数据库第一次实验报告

    《数据库原理》实验报告 实验名称班级组号组员姓名 数据库实验平台的安装、数据库创建与维护实验 计算机科学与技术8班2011211308 梁展伟、李安一、实验目的 1.通过对Micr......

    北邮数据结构实验报告-排序范文大全

    北京邮电大学 数据结构试验报告 实验名称: 实验四排序 学生姓名:班级:班内序号:学号: 日期: 2014年1月4日 1 实验目的 学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以......

    北邮日历java实验报告

    Java日历实验报告 信息工程27班项明钧 一、实验要求 写一个建议日历图形用户界面二、设计思路 此次作业主要用到了窗口布局设计及各个组件的功能显示,事件处理机制。首先需......

    北邮数据库实验报告[最终版]

    数据库实验报告(四) 姓名:学号:班级: 1. 简单查询:SQL语句: select credit from course where course_name='SQL Server数据库开发技术'; 查询“数据库开发技术”课程的学分;......

    北邮现场总线实验报告

    现场总线实验报告 实验名称: CAN总线技术与iCAN模块实验学院: 自动化学院专业: 自动化专业班级: 2010211411 姓名: 韩思宇学号: 10212006 指导老师: 杨军一、实验名称: 实验一:CAN总......

    北邮电子院专业实验报告

    电子工程学院 ASIC专业实验报告 班级: 姓名:学号: 班内序号: 第一部分 语言级仿真 LAB 1:简单的组合逻辑设计 一、 二、 实验目的 实验原理 掌握基本组合逻辑电路的实现方法。 本......

    北邮计算机网络课程设计DNS服务器

    北邮计算机网络课程设计DNS服务器 1 环境 操作系统随意,语言python2.7 2.文件 Socket.py 说明完成缓存检测,确定是回应,还是转发,如果是回应,确定是本地回应还是外部应答转发 imp......