一. 简介
上一篇文章编写了新字符设备驱动框架的代码,并编写了 LED灯IO初始化工作,也编写了Led的开与关函数。文章地址如下:
向新字符设备驱动代码框架中添加Led功能函数-CSDN博客
本文对所完成的新字符设备驱动代码进行测试。通过测试程序(即应用程序)调用 驱动代码,从而驱动 LED灯的开与灭。
二. 测试新字符设备驱动代码
1. 准备测试程序
这里所使用的测试程序,即应用程序,是与 前面 2_led实验所使用是一样的。
所以,可以将 2_led工程中的测试程序拷贝过来,即拷贝 2_led工程下 led_app.c文件到 3_newchrled工程下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ cp ../2_led/led_app.c ./
编译测试程序:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ arm-linux-gnueabihf-gcc led_app.c -o led_app
2. 编译驱动代码
编译 3_newchrled工程,即编译编写的新字符设备驱动框架代码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ make
make -C /home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga M=/home/wangtian/zhengdian_Linux/Linux_Drivers/3_newchrled modules
make[1]: 进入目录“/home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga”
CC [M] /home/wangtian/zhengdian_Linux/Linux_Drivers/3_newchrled/newchrled.o
Building modules, stage 2.
MODPOST 1 modules
LD [M] /home/wangtian/zhengdian_Linux/Linux_Drivers/3_newchrled/newchrled.ko
make[1]: 离开目录“/home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga”
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$
确认是否生成 驱动文件 newchrled.ko:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ ls -l
总用量 44280
-rw------- 1 wangtian wangtian 216416256 12月 29 18:29 core
-rwxrwxr-x 1 wangtian wangtian 10588 1月 1 18:08 led_app
-rw-rw-r-- 1 wangtian wangtian 868 1月 1 18:07 led_app.c
-rw-rw-r-- 1 wangtian wangtian 288 12月 28 16:54 Makefile
-rw-rw-r-- 1 wangtian wangtian 77 1月 1 18:10 modules.order
-rw-rw-r-- 1 wangtian wangtian 0 1月 1 01:21 Module.symvers
-rw-rw-r-- 1 wangtian wangtian 4463 1月 1 01:33 newchrled.c
-rw-rw-r-- 1 wangtian wangtian 66 12月 29 13:16 newchrled.code-workspace
-rw-rw-r-- 1 wangtian wangtian 6505 1月 1 18:10 newchrled.ko
-rw-rw-r-- 1 wangtian wangtian 1324 1月 1 01:33 newchrled.mod.c
-rw-rw-r-- 1 wangtian wangtian 2604 1月 1 01:33 newchrled.mod.o
-rw-rw-r-- 1 wangtian wangtian 4616 1月 1 18:10 newchrled.o
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$
可以看出生成了 设备驱动文件。下面可以对驱动代码进行测试了。
3. 加载驱动模块并测试
(1) 拷贝驱动与测试程序
将 驱动程序与测试程序拷贝到开发板根文件系统 /lib/modules/4.1.15/目录下。在 3_newchrled工程下。
注意:
(1) 这里开发板的根文件系统,是放在 ubuntu系统下的。开发板通过 NFS服务挂载的方式将 根文件系统挂载在开发板运行的。即根文件系统rootfs 没有放在 开发板的 nand-Flash上。
(2) 这里拷贝命令,需要加 管理员权限,即 sudo 权限。
拷贝 驱动程序到开发板:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ sudo cp newchrled.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
[sudo] wangtian 的密码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$
拷贝 测试程序到开发板:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ 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/
(2) 加载驱动模块
执行 modprobe 命令加载驱动模块:
/lib/modules/4.1.15 # modprobe newchrled.ko
modprobe: module newchrled.ko not found in modules.dep
/lib/modules/4.1.15 #
提示说明,需要 modules.dep文件,前面文章提到过,这个问题的解决是:
在第一次 modprobe命令加载驱动模块时,必须运行 depmod命令。执行 depmod命令:
/lib/modules/4.1.15 # depmod
重新运行 modprobe命令继续 加载驱动模块:
/lib/modules/4.1.15 # modprobe newchrled.ko
确定驱动模块是否加载成功:运行 lsmod命令或 "cat /proc/devices" 命令
这里运行 cat /proc/devices 命令查看设备,顺便看下分配的主设备号:
(3) 手动创建设备节点。
这里手动创建设备节点,上面可以看到,所分配的主设备号为 249。所以创建设备节点命令如下:
/lib/modules/4.1.15 # mknod /dev/newchrled c 249 0
查看创建的设备节点:
/lib/modules/4.1.15 # ls -l /dev/newchrled
crw-r--r-- 1 0 0 249, 0 Jan 1 00:21 /dev/newchrled
(4) 进行测试
打开 led 灯:
/lib/modules/4.1.15 # ./led_app /dev/newchrled 1
led_release
/lib/modules/4.1.15 #
可以看到,这时开发板上的红灯:
可以看到,这时开发板上的红灯亮了。
关闭 led灯:
/lib/modules/4.1.15 # ./led_app /dev/newchrled 0
led_release
/lib/modules/4.1.15 #
这时可以看开发板上的红色灯是否灭了:
可以看到,红色灯灭了。说明驱动程序没有问题。