旭新科技网
您的当前位置:首页实验七-设备驱动程序

实验七-设备驱动程序

来源:旭新科技网




上海应用技术学院
程序设计语言实验报告

实验名称

设备驱动程序

实验序号

实验七

实验日期


姓 名


学 号


指导教师


专 业

计算机科学与技术

班 级


成 绩


一、实验目的及要求

调试EOS 串口驱动程序向串口发送数据的功能,了解设备驱动程序工作原理。

EOS 串口驱动程序添加从串口接收数据的功能,进一步加深对设备驱动程序工作原理的理解。

二、实验环境
Windows XPTevation OS Lab

三、实验内容
1 准备实验
按照下面的步骤准备实验:
1. 启动OS Lab

2. 新建一个EOS Kernel 项目如图1

1
3. 在“项目管理器”窗口中双击Floppy.img 文件,使用FloppyImageEditor 工具打开此




软盘镜像。

4. 将本实验文件夹中的serial.exe 文件添加到软盘镜像的根目录中,如图25. 点击FloppyImageEditor 工具栏上的保存按钮,关闭该工具。

2 2 练习使用EOS 应用程序向串口发送数据
1. F7 生成EOS 内核项目如图3

3
2. F5 启动调试如图4




4
3. EOS 启动成功后,在控制台中输入命令“serial”按回车,启动串口测试程序 serial.exe。程序启动后会显示提示信息和准备向COM2 发送数据的提示符“>>”,如 5

5
由于虚拟机上的COM2 和主机上的COM7 已经建立了连接,所以在向虚拟机的COM2 发送数据之前,要先启动主机上的“Terminal”工具,准备从COM7 接收数据:
1. OS Lab 的“工具”菜单中选择“Terminal”,启动“Terminal”工具。

2. 在“连接到”对话框中选择COM7,点击“确定”按钮,如图7

7




3. 在“属性”对话框中点击“确定”按钮,使用默认设置。接下来就会显示Terminal 输入输出窗口,用于显示从COM7 接收到的数据和向COM7 发送的数据。

4. 此时激活虚拟机窗口,在EOS 控制台中输入任意字符串并按回车后,Terminal 会接收到由serial.exe 发送到串口COM2 的内容。例如在serial 中输入“hello”后按回车,Terminal 会接收到并显示“hello” 如图8-9

8

9
5.Serial.exe 将输入内容发送到COM2 后,会立刻调用API 函数ReadFile COM2 读取数据。由于当前EOS 的串口驱动程序尚未实现从串口读取数据的功能,所以ReadFile 返回了错误,serial.exe 就退出了。

6.结束此次调试。关闭Terminal 工具。

3 调试EOS 串口驱动程序向串口发送数据的功能
按照下面的步骤进行调试:
1. OS Lab“项目管理器”窗口中打开串口驱动程序源文件io/driver/serial.c。在函 SrlWrite 的第一行(310 行)和最后一行(341 行)分别添加一个断点;在函数 SrlIsr 的第一行(352 行)添加一个断点;在函数SrlRead 唯一的一条返回语句所在 行(295 行)添加一个断点,如图10-11




10

11

2. F5 启动调试,如图12

12

3. 在内核初始化过程中,初始化8250 控制器时会触发一个8250 中断,并命中SrlIsr

设置的断点,按F5 EOS 继续执行忽略此次中断。

4. 激活虚拟机窗口,在EOS 控制台中输入命令“serial”按回车如图13




13
5. OS Lab 的“工具”菜单中选择“Terminal”工具,并按3.2 节中的方法打开串口 COM7 并进入工具的输入输出窗口,如图14

14
6. EOS 控制台中输入“12345”5 个字符后按回车,如图15

15
7. 在向串口发送数据时,serial 应用程序调用了EOS API 函数WriteFile,而 WriteFile 最终调用了串口驱动程序的SrlWrite 函数,所以会命中设置在SrlWrite 函数第一行的断点。打开“调用堆栈”窗口验证函数调用的层次。

8. 将鼠标指针移动到SrlWrite 函数参数Request 上,可以查看其值为6

9. 说明要发送包括“12345”和字符串结束符“\0”在内的6 个字符。如图16

16




10.对照SrlWrite 的流程图,按F10 单步跟踪该函数的执行过程。当变量Data 被赋值后,查看变量的值为0x31(字符“1”ASCII 代码)。当执行语句(第332 行):WRITE_PORT_UCHAR(REG_PORT(DeviceObject, THR), Data);
后,将会命中设置在SrlIsr 中的断点,开始调试中断处理程序。激活Terminal 工具窗口,可以看到已经接收到字符“1”。如图17-18

17

18 4 EOS 串口驱动程序添加从串口接收数据的功能
1. EOS 内核项目代码修改完毕后,按F7 生成项目。

2. F5 启动调试。

3. 按照之前练习的方法启动serial.exe Terminal 工具。

4. EOS 控制台输入字符串并发送到Terminal 工具后,从Terminal 工具输入字符串应 该可以再发送到EOS 控制台,并可以交替的进行输入输出。如图19-20

19

20





四、实验结果与分析
1.实验中遇到的问题:
在练习使用EOS 应用程序向串口发送数据时错误的以为是在Terminal 窗口中键入“hello”,导致与实验内容不否的结果
2.解决方案:
重启Terminal 工具,再次实验。最终在serial 中输入“hello”后按回车,Terminal 会接收到并显示“hello” 如图21-22

21

22


显示全文