《2022年linux实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年linux实验报告 .pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验十三: LED点阵驱动一、实验目的:编写一个针对总线操作的硬件驱动程序。二、实验内容:编写一个针对硬件LED点阵的驱动程序。三、实验原理及步骤实验原理:Linux 将所有外部设备看成是一类特殊文件,称之为“设备文件”, 如果说系统调用是 Linux 内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux 内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。本实验中采用的 8X8点阵数码管发光原理:, 8X8点阵共由 64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1 电平,
2、某一行置 0 电平,则相应的二极管就亮。在本开发板上,整个LED 显示模块是作为一个 I/O 进行控制的。 DATA0.7, DATA8.15 分别对应系统数据线的低 16 位, LED_LOCK 信号是由系统总线的写信号和地址信号经简单的逻辑组合而得。在本实验中, ssize_t SIMPLE_LED_write ()这个函数很关键,在这个函数中定义了两个数组来控制LED阵列的行和列。 通过前几个实验的操作, 我对驱动程序的编写又有了更进一步的认识。在本实验中,我将没有完成的程序补充完全,实验步骤如下。实验步骤:1 硬件连接:连接宿主PC机和一台 PXA270-EP 目标板。2 在宿主机上编
3、写编译驱动程序:需要在宿主PC机端编辑三个文件,分别是驱动程序、编译驱动程序时用的Makefile 、测试程序。3 在终端输入 vi pxa270_led_ary_drv.c后开始编辑驱动程序,添加的代码部分截图及说明如下:(1)补充 showversion ()函数用于显示版本号;补充read() 函数,对字符型设备进行读操作。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - (2)补充 ioctl( ) 函数,可实现读写之外
4、的控制;补充open( ) 函数,打开设备时调用。补充 showversion 函数用于显示版本号补充read() 函数,对字符型设备进行读操作补充 ioctl( ) 函数,可实现读写之外的控制补充 open( ) 函数,打开设备时调用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - (3)补充file_operations()函数 , 指出设备驱动程序所提供的入口点位置,包括open, read,write,ioctl,rel
5、ease.(4)补充编写模块程序时必须提供的两个函数, 一个是 int init-module(void),供 insmod 在加载此模块的时候自动调用, 负责进行设备驱动程序初始化工作.init_module 返回 0 以表示初始化成功 , 返回负数表示失败 . 另一个函数是void cleanup_module(void),在模块被卸载时调用 , 负责进行设备驱动程序的清除工作 . 补充 file_operations ()函数 ,指出设备驱动程序所提供的入口点位置补 充intinit-module(void),供insmod在加载此模块的时候自动调用补 充cleanup_module(v
6、oid),在模块被卸载时调用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - (5)实验需要写编译驱动时使用的Makefile 文件, 其实不必重新编写,可以继续使用之前实验的 Makefile 文件,但是必须作如下修改TARGET = pxa270_led_ary_drv.o modules:$TARGET all:$TARGET pxa270_led_ary_drv.o: pxa270_led_ary_drv.c 用来声明目
7、标文件。(6)输入make modules命令编译驱动程序,看到如下信息:(7)编写并编译测试程序:在上面打开的同一个终端窗口中,输入下列2 条命令:vi simple_test_driver.c /*输入测试程序清单16.2 */ arm-linux-gcc -o test simple_test_driver.c /*编译测试程序 */ (8)在PXA270-EP 目标板运行测试程序:配置超级终端,输入mount -o soft,timeo=100 ,rsize=1024 192.168.0.100:/ /mnt /* 将宿主 PC 机的根目录挂载到PXA270-EP 目标板的 mnt目录
8、下 */ cd /mnt/home/LED_Array insmod pxa270_led_ary_drv.o /*加载驱动程序 */ 运行测试程序,看到如下信息:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 可以看到 LED 点阵有规律的闪烁了。四、实验总结通过本次实验,我成功通过控制LED 点阵的亮灭,修改测试程序中控制行列的两个数组buf0,buf1 参数可以改变 LED 点阵的点亮顺序, 实现作业要求的按横的方向隔行
9、顺序扫描LED 点阵数码管及按竖的方向顺序扫描LED 点阵数码管。驱动程序使某个特定的硬件可以响应一个定义良好的内部编程接口,同时完成隐藏设备的工作。 本次试验使我对驱动程序的编写流程有了更深刻的认识,在系统内部, I/O 设备的存取通过一组固定的入口点来进行,这组入口点是由每个设备的设备驱动程序来提供的,一般包括 open 入口点, Close入口点, Read入口点, Write 入口点, ioctl 入口点, select 入口点。在 file_operations 结构中需指出程序所提供的入口点位置。编辑好驱动程序后,还需编写Makefile 文件,用交叉编译工具gcc 进行编译,通过
10、测试文件测试驱动程序能否正确运行,通过此次试验, 我对驱动程序的重要性的理解更加深刻,使用驱动程序可以实现对设备的统一的控制与管理。实验十七: AD 驱动实验一、实验目的:1、了解模数转换的基本原理;2、掌握模数转换的编程方法。二、实验内容:1、编程对模拟量输入进行采集和转换,并将结果显示在超级终端上; 2、通过改变模拟量输入,观察显示结果。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 三、实验原理及步骤:实验原理:AD又称
11、为模数转换器,其作用是将模拟量转变成数字量,它在信号处理中是十分有用的一个模块,真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、 处理和发射的数字形式。 模数转换器的工作过程是一个滤波、采样保持和编码的过程。模拟信号经带限滤波,采样保持电路,变为阶梯形状信号,然后通过编码器,使得阶梯状信号中的各个电平变为二进制码。,在 Linux 2.4 的内核代码中,已经提供了一些对AD 转换器进行控制的函数,我们可以直接调用这些函数来对AD 转换器进行操作。void ucb1x00_adc_enable(struct ucb1x00 *ucb)函数的作用是使能AD 转换。void
12、 ucb1x00_adc_disable(struct ucb1x00 *ucb)函数的作用是停止AD转换。unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync) 这个函数的作用是读取AD 后的数据。其中 adc_channel 这个参数是选择哪个通道。在 XA270-EP 目标板上,电位器对应通道0,温度传感器对应通道1,DA 的输出对应通道 2。在本实验中,只提供了程序框架,实验步骤及补充完全的驱动程序截图如下。实验步骤:1 硬件连接:连接宿主PC机和一台 PXA270-EP 目标板。2 在
13、宿主机上编写编译驱动程序:需要在宿主PC机端编辑三个文件,分别是驱动程序、编译驱动程序时用的Makefile 、测试程序。3 在终端输入 vi pxa_ad_drv.c后开始编辑驱动程序,添加的代码部分截图及说明如下:(1)补充 showversion ()函数用于显示版本号;补充read() 函数,对字符型设备进行读操作。补充showversion ()函数用于显示版本号补充read() 函数,对字符型设备进行读操作。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15
14、 页 - - - - - - - - - (2)补充write()函数,对字符型设备进行写操作;补充ioctl( ) 函数,可实现读写之外的控制。(3)补充 open( ) 函数,在打开设备时调用;补充release( ) 函数,在调用设备结束时关闭此设备。补充write() 函数,对字符型设备进行写操作。补充 ioctl( ) 函数,可实现读写之外的控制。补充 open( ) 函数,在打开设备时调用。补充 release( ) 函数,在调用设备结束时关闭此设备。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -
15、- - - - - - 第 7 页,共 15 页 - - - - - - - - - (4)补充file_operations()函数 , 指出设备驱动程序所提供的入口点位置,包括open, read,write,ioctl,release.(5)补充 int init-module(void)函数, 供 insmod 在加载此模块的时候自动调用, 负责进行设备驱动程序初始化工作。init_module 返回 0 以表示初始化成功 ,返回负数表示失败。(6)补充 void cleanup_module(void),在模块被卸载时调用 , 负责进行设备驱动程序的清除工作。补充 file_oper
16、ations ()函数 ,指出设备驱动程序所提供的入口点位置,包括read ,write,ioctl,open,release. 补充 init 函数 ,供 insmod 在加载此模块的时候自动调用,负责进行设备驱动程序初始化工作名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - (7)实验需要写编译驱动时使用的Makefile 文件, 其实不必重新编写,可以继续使用之前实验的 Makefile 文件,但是必须作如下修改TARGE
17、T = pxa_ad_drv.o modules:$TARGET all:$TARGET pxa_ad_drv.o: pxa_ad_drv.c 用来声明目标文件。(8)输入make modules命令编译驱动程序,看到如下信息:补充cleanup_module(void),在模块被卸载时调用,负责进行设备驱动程序的清除工作。屏幕显示的编译信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 15 页 - - - - - - - - - (9)编写并编译测试程序:在上面打开的
18、同一个终端窗口中,输入下列2 条命令:vi ad_test_driver.c arm-linux-gcc -o test ad_test_driver.c /*编译测试程序*/(10)在PXA270-EP 目标板运行测试程序:配置超级终端,输入mount -o soft,timeo=100 ,rsize=1024 192.168.0.100:/ /mnt /* 将宿主 PC 机的根目录挂载到PXA270-EP 目标板的 mnt目录下 */ cd /mnt/home/AD insmod pxa_ad_drv.o/*加载驱动程序*/ 运行测试程序,看到如下信息:转动电位器的旋钮,可以看到数值的变化
19、。四、实验总结通过本次实验,我理解了 AD 的工作流程,可以直接调用内核提供的AD 转换器控制函数对其进行操作。分别是:voiducb1x00_adc_enable(structucb1x00*ucb)(作用:使能 AD ); voiducb1x00_adc_read(struct ucb1x00 *ucb , int adc_channel, int sync)(作用:读 AD 数据) ; unsigned int ucb1x00_adc_disable(struct ucb1x00 *ucb)(作用:停止 AD ) 。利用这些函数,对AD的操作变得简单。对于驱动程序的编写,与之前的实验十分
20、相似,主要有补充open 入口点:打开设备准备 I/O 操作;补充 Close 入口点:关闭一个设备; 补充 Read入口点:从设备上读数据;补充Write 入口点:往设备上写数据;补充ioctl入口点:执行读, 写之外的操作 , 实现对设备的控制, 以及必要地初始化操作。 通过实验, 我巩固了自己对驱动程序的理解以及补充驱动程序各部分的熟练程度,对驱动程序的结构有较好的掌握。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - -
21、实验十五:数码管显示驱动实验一、实验目的:学习串并转换的相关知识,并编写驱动程序。二、实验内容:编写针对 74LV164的驱动程序和应用程序。三、实验原理及步骤实验原理:7 段数码管是由 7 个独立的二极管采用共阴或共阳的方法连接而成。当处理器的频率足够高时, 可实现数码管数据的动态显示而不出现闪烁现象。随着频率的进一步提高,可通过串并变换 来实现数码管数据的输出。所谓 串并变换 指的是将串行输入的信号, 通过一系列的移位寄存器转换成并行输出信号。简言之,只要串行输入信号正确, 就可以让数码管正确显示。 而串行信号的输入工作是由嵌入式处理器的I/O 端口完成的。 因此,对数码显示管驱动程序的设
22、计,其实就是对处理器I/O端口控制程序的设计,所以要包括驱动程序的初始化I/O端口的初始化设置。实验步骤:在终端输入 vi pxa270_serial_led_drv.c后开始编辑驱动程序,添加的代码部分如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - - - - - - - 补充 showversion 函数用于显示版本号补充read() 函数当对设备特殊文件进行 read() 系统调用时,将调用驱动程序read() 函数名师资料总结 - -
23、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 补充此函数,指明驱动程序的入口点打开设备时,调用open 函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - 之后,如前两个实验,修改Makefile 文件,编写测试文件,编译后,打开超级终端,由 insmod pxa270_s
24、erial_led_drv.o 命令加载驱动程序,运行测试文件,显示如下信息:设备初始化函数调用初始化和退出程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - 此时看到目标板上数码管循环显示0,1,2,3,4,5,6,7,8,9 四、实验总结通过本次实验,我对自己编写驱动程序,控制目标板上各种硬件资源的应用有了进一步的理解, 每个设备都需要驱动程序,在测试文件中调用它可验证它能否正确工作。本实验的测试文件中修改buf 数组的顺序, 通过译码器即可让数码管显示不同的数值。通过这个方法,我完成了课后的两个作业,即让数码管显示9,8,7,6,5,4,3,2,1,0 及 2,4,6,8,0。通过此次实验,我对数码管的驱动方式也有了深刻理解,在今后会在各种实验中加以利用、学习。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -