测试新字符设备驱动代码

2024-01-01 19:55:36

一.? 简介

上一篇文章编写了新字符设备驱动框架的代码,并编写了 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 # 

这时可以看开发板上的红色灯是否灭了:

可以看到,红色灯灭了。说明驱动程序没有问题。

文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135326949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。