一. 简介
上一篇文章实现了(Linux驱动代码中) 对 led灯的互斥处理,即使用Linux内核提供的处理并发与竞争的处理方法:原子操作。文章地址如下:
Linux内核中并发与竞争的处理方法:原子操作举例-CSDN博客
实验效果:在本实验中,我们使用原子操作来实现对 LED 这个设备的互斥访问,也就是一次只允许一个应用程序可以使用 LED 灯。
本文对添加原子操作后的驱动进行测试,确定是否实现对 Led灯的互斥访问。
二. 实现原子操作后的驱动测试
1. 将驱动与测试程序拷贝到开发板
注意:开发板的系统是通过 nfs服务挂载方式访问 ubuntu系统的。即 系统文件存放在 ubuntu系统所设置的 nfs目录下!而开发板通过 nfs服务加载系统文件!
将上一篇文章所编译生成的驱动模块与测试程序拷贝到开发板系统 /lib/modules/4.1.15/目录下,这里系统存放在 /home/wangtian/linux/nfs_File/ 目录下,命名是 rootfs:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/8_atomic$ sudo cp atomic.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
将测试程序拷贝到开发板系统 /lib/modules/4.1.15/目录下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/8_atomic$ sudo cp led_app /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
2. 开发板上电启动
开发板上电后启动,进入文件系统 /lib/modules/4.1.15/ 目录下,查看驱动模块与测试程序是否已成功拷贝过来:
可以看出,驱动模块 atomic.ko与测试程序 led_app都已存在。
3. 驱动模块测试
(1) 首先,加载驱动模块
使用 modprobe命令加载驱动模块。驱动模块第一次使用 modprobe命令加载时,加载之前必须首先运行 depmod 命令:
运行 modprobe 命令加载驱动模块:
确定驱动模块是否成功加载:运行 "lsmod"命令或 "cat /proc/devices" 命令
这里运行 lsmod命令:
可以看到,驱动模块 atomic.ko已加载。
(2) 其次,驱动模块测试
先运行一次执行命令:
可以看出,在 应用程序 25s占用未结束之前会打印如下信息:
App running time is ...
在第一次程序25s占用结束之前再输入一次程序执行命令:
可以看出,在第一次程序占用时,第二次再运行 执行命令是无法打开设备的。
说明在 led驱动代码所实现的原子操作,已实现了互斥访问 Led设备,也就是一次只允许一个应用程序可以使用 LED 灯。