<p class="MsoNormal" align="justify" style="margin-left:84.0000pt;text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> <b>Linux串口通信与中断实验</b><b> </b><b></b> </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:0.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> <b><span>一、实验目的</span></b> </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 1. 了解Linux下串行端口程序设计的基本原理,了解Linux下中断编程的基本方法; </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 2. 掌握终端的主要属性及设置方法,熟悉终端 IO函数的使用;外部中断的编程方法; </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:0.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> <b><span>二、实验内容</span></b> </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 1-1编写serial应用程序; </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 1-2. 编写Makefile文件; </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 1-3. 下载并调试serial应用程序。 </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 2-1. 编写外部中断驱动程序eintdrv; </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 2-2. 编写Makefile文件; </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 2-3. 编写中断测试程序interrupt </p> <p class="MsoNormal" align="justify" style="margin-left:0.0000pt;text-indent:21.7500pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 2-4. 下载并调试eintdrv和interrupt。 </p> <p class="MsoNormal" align="justify" style="padding:0pt 0pt 0pt 0pt;text-align:justify;"> 三、<b><span>实验步骤:</span></b><b></b> </p> <p class="MsoNormal" align="justify" style="padding:0pt 0pt 0pt 0pt;text-align:justify;"> <b> <一>串口实验</b><b></b> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> a.<span>连接好目标机,打开超级终端和</span>Linux虚拟机; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> b.<span>在超级终端下按快捷键</span>7,进入Linux系统; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> c.<span>回车,输入</span>ls /dev/s3c*,查看Linux的外设文件,为s3c2440-serial0; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> d.<span>在</span>Linux虚拟机下输入cd /home/cvtech/jx2440/examples/serial <span>的文件。在该文件中有</span>serial.c,makefile和.o的文件,输入vi serial.c, <span>对</span>serial.c文件进行编辑,将串口s3c24x0-serial0改为s3c2440-serial0 </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> e.<span>对</span>serial.c文件进行编写,分别输入make clean和make两条命令,编 <span>译且将文件复制到</span>/tftpboot下; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> f.<span>挂载:在超级终端下输入</span>mount 192.168.1.180:/tftpboot /mnt/nfs/ -o nolock; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> g.<span>进入</span>/mnt/nfs下,输入./serial直接运行。 </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> h.<span>运行成功后,从超级终端输入,按回车后串口将输出相应的回应。</span> </p> <p class="MsoNormal" align="justify" style="padding:0pt 0pt 0pt 0pt;text-align:justify;"> <b> <二>串口实验</b><b></b> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> a.重启目标机和超级终端; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> b.<span>在</span>Linux虚拟机下输入cd /home/cvtech/jx2440/linux-2.6.30.4/ </p> <p class="MsoNormal" align="justify" style="margin-left:21.0000pt;text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> drivers/char,进入该文件夹,有一个eintdrv.ko的文件,这是模块 <span>加载所需要的驱动程序源代码。</span>Char是指字符驱动文件夹,drivers是 <span>外设驱动文件夹;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> c.在linux-2.6.30.4内核文件夹下,输入make menuconfig命令,启动 <span>配置菜单,进到</span>Device Drivers→Character Devices,<span>选择中断驱动为</span> M<span>模式,即用空格键将</span><span>*</span><span>改为</span><span>M,</span><span>退出保存;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> d.make zImage<span>,对内核进行编译;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> e.make modules,<span>编译驱动模块;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> f.cp drivers/char/eintdrv.ko /tftpboot;<span>将其复制到</span><span>tftpboot</span><span>下;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> g.<span>再次进入</span><span>examples</span><span>文件中,找到</span><span>interrupt</span><span>文件夹,进入,编译运行</span> interrupt.c<span>文件(</span><span>make clean</span><span>和</span><span>make</span><span>两条命令)</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> h.<span>重新再超级终端下输入挂载命令;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> i.<span>进入</span><span>/mnt/nfs</span><span>下,查看是否有文件;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> j.<span>如果存在,输入</span><span>insmod eintdrv.ko</span><span>安装驱动模块,再输入</span><span>mknod </span> /dev/eint c 98 0<span>,注册设备文件,(设备名为</span><span>eint</span><span>,字符设备,主设备号</span> <span>为</span>98<span>,从设备号可任意取);</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> k.<span>输入</span><span>./interrupt,</span><span>运行,看到“</span><span>ok</span><span>”后按中断</span><span>2</span><span>键,就可以看到结果。</span> </p> <p class="MsoNormal" align="justify" style="padding:0pt 0pt 0pt 0pt;text-align:justify;"> 四、<b><span>实验总结:围绕实验目的书写,记录实验过程遇到的相关问题。</span></b><b></b> </p> <p class="MsoNormal" align="justify" style="padding:0pt 0pt 0pt 0pt;text-align:justify;"> <b> </b> 1.*是静态加载,M是模块加载; </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 2.<span>按要求是要删除</span>eintdrv.ko文件,但是没有删除也成功了。 </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> 3.<span>驱动程序实验一直没有有成功,每次显示不能打开;</span> </p> <p class="MsoNormal" align="justify" style="text-indent:21.0000pt;padding:0pt 0pt 0pt 0pt;text-align:justify;"> </p> <p class="MsoNormal"> </p>
eqzGbjVtl