本文对前面两篇文章实现的 Led驱动程序进行测试。
通过应用程序调用驱动程序,从而进行 Led灯的打开与关闭。
将 前面实验中 3_newchrled工程中应用程序拷贝到 5_dtsled工程目录下。
进入 5_dtsled工程目录下进行拷贝:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/5_dtsled.c$ cp ../3_newchrled/led_app.c ./ -f
编译测试程序,即应用程序。操作如下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/5_dtsled.c$ arm-linux-gnueabihf-gcc led_app.c -o led_app
可以看出,应用程序也已经编译好。
将驱动程序与应用程序都拷贝到开发板的系统上。
注意:开发板的系统是通过 nfs服务挂载方式访问 ubuntu系统的。即 系统存放在 ubuntu系统所设置的 nfs目录下!
将驱动文件 dtsled.ko,拷贝到 开发板系统 /lib/modules/4.1.15/目录下,这里系统存放在 /home/wangtian/linux/nfs_File/ 目录下,命名是 rootfs:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/5_dtsled.c$ sudo cp dtsled.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
[sudo] wangtian 的密码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/5_dtsled.c$
拷贝应用程序到开发板的系统上:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/5_dtsled.c$ sudo cp led_app /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
开发板上电后,进入系统 /lib/modules/4.1.15/目录下,确认驱动程序与应用程序是否已经存在:
/ #
/ # cd /lib/modules/4.1.15/
/lib/modules/4.1.15 # ls -l
total 24
-rw-r--r-- 1 0 0 7872 Jan 18 2024 dtsled.ko
-rwxr-xr-x 1 0 0 10588 Jan 18 2024 led_app
-rw-r--r-- 1 0 0 0 Jan 17 2024 modules.alias
-rw-r--r-- 1 0 0 21 Jan 17 2024 modules.dep
-rw-r--r-- 1 0 0 0 Jan 17 2024 modules.symbols
/lib/modules/4.1.15 #
上面可以看出,驱动与测试程序都已经拷贝到开发板上。
注意:这里因为该驱动程序测试过一次,所以,使用 modprobe 命令加载驱动模块时不需要运行 depmod命令。
输入 "modprobe dtsled.ko" 命令加载驱动程序:
有两种方法:运行 "lsmod" 命令或运行 "cat /proc/devices" 命令进行查看。
执行 "lsmod" 命令确认驱动模块是否已加载:
可以看出,在 /dev 目录下已经自动创建了设备节点 alpha_led。
进入开发板系统 /lib/modules/4.1.15/目录下,运行应用程序进行测试。
在 驱动模块入口函数中,继 Led灯的IO 初始化工作之后,是关闭了 Led灯,所以,默认情况下 Led灯是灭的。
运行应用程序,打开 Led灯,操作如下:
这时可以看开发板上 Led灯是否打开:
可以看出, 红色Led灯已经点亮。
现在运行应用程序,关闭Led灯:
这时可以查看开发板上的 Led灯是否关闭:
可以看出,红色的 Led灯已经灭。
测试完成,卸载驱动模块:
/lib/modules/4.1.15 # rmmod dtsled.ko
注意:测试驱动模块时,可以进行多次的加载与卸载驱动模块的操作,这样可以防止程序可能存在问题。