前面一篇文章对字符设备驱动代码进行了完善,文章地址如下:
本文对继上一篇文章,对上一篇文章编写的驱动代码的测试。
这里对上一篇文章中已经实现的驱动程序,测试程序进行编译。进入 ubuntu系统,进入 1_chrdevbase工程的根目录下,编译字符驱动代码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$ make
编译完成后,会生成 驱动模块文件 chrdevbase.ko。
继续编译测试应用程序,这里测试程序文件为 chrdevbase_app.c文件:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$ arm-linux-gnueabihf-gcc chrdevbase_app.c -o chrdevbase_app
编译完成后,会生成 测试程序文件 chrdevbase_app。
查看是否生成驱动文件,测试程序:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$ ls
chrdevbase_app chrdevbase.code-workspace chrdevbase.mod.o Makefile
chrdevbase_app.c chrdevbase.ko chrdevbase.o modules.order
chrdevbase.c chrdevbase.mod.c core Module.symvers
可以看出,编译后生成了字符驱动模块文件 chrdevbase.ko与测试程序文件 chrdevbase_app。
(1)? 首先,将驱动模块与测试程序拷贝开发板。
将编译生成的 字符驱动模块文件 chrdevbase.ko与测试程序文件 chrdevbase_app 拷贝到开发板根文件系统下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$ sudo cp chrdevbase.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$ sudo cp chrdevbase_app /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
开发板上电后,进入根文件系统下。进入 /lib/modules/4.1.15目录下,查看是否已存在 字符驱动模块文件 chrdevbase.ko与测试程序文件 chrdevbase_app:
/ # cd /lib/modules/4.1.15/
/lib/modules/4.1.15 # ls -l
total 24
-rw-r--r-- 1 0 0 5309 Dec 22 2023 chrdevbase.ko
-rwxr-xr-x 1 0 0 11143 Dec 22 2023 chrdevbase_app
-rw-r--r-- 1 0 0 0 Dec 19 2023 modules.alias
-rw-r--r-- 1 0 0 15 Dec 19 2023 modules.dep
-rw-r--r-- 1 0 0 0 Dec 19 2023 modules.symbols
/lib/modules/4.1.15 #
可以看出, 字符驱动模块程序与 测试程序已经存在。
(2)? 其次,加载字符驱动模块 chrdevbase.ko。
/lib/modules/4.1.15 # modprobe chrdevbase.ko
确定驱动模块是否加载成功,可以运行 "lsmod" 命令查看所挂载的模块。
也可以通过 "cat /proc/devices" 命令查看是否存在字符驱动模块。
(3)? 其次,手动创建字符设备驱动节点。
/lib/modules/4.1.15 # mknod /dev/chrdevbase c 200 0
确定是否成功创建好设备驱动节点,输入 "ls -l /dev" 命令:
可以看出,在 "/dev/" 目录下存在了 chrdevbase设备文件。说明设备驱动节点已经创建成功。
(4) 最后,运行测试字符设备驱动。
运行测试程序以及驱动程序,测试驱动程序是否运行正常:
测试从设备驱动中读数据:
/lib/modules/4.1.15 # ./chrdevbase_app /dev/chrdevbase 1
read kernel_data: kernel data!
/lib/modules/4.1.15 #
测试向驱动设备中写入数据:
/lib/modules/4.1.15 # ./chrdevbase_app /dev/chrdevbase 2
chrdevbase_write: user data!
/lib/modules/4.1.15 #
可以看出,应用程序从驱动设备读数据正常,应用程序向驱动设备中写入数据也正常。
至此,模拟的字符设备驱动代码已实现。