2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计
一、实验内容
任务1
- 学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章
- 提交康奈尔笔记的照片(可以多张)
任务2
- 在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
- 提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)
-
将所需代码
test_drv.c、test.c、Makefile、test_drv_load、test_drv_unload
准备好放在test文件夹下 -
编译并加载驱动模块
-
- 编译:
make clean;make
- 编译:
-
- 给脚本文件增加可执行权限:
chmod +x ./test_drv_load
- 给脚本文件增加可执行权限:
-
- 以管理员身份运行加载脚本:
sudo ./test_drv_load
- 以管理员身份运行加载脚本:
- 编译并运行测试程序
-
- 编译:
gcc -o test test.c
- 编译:
-
- 给文件增加可执行权限:
chmod +x ./test
- 给文件增加可执行权限:
-
- 以管理员身份运行:
sudo ./test
- 以管理员身份运行:
- 卸载驱动程序
-
- 给脚本文件增加可执行权限:
chmod +x ./test_drv_unload
- 给脚本文件增加可执行权限:
-
- 以管理员身份运行加载脚本:
sudo ./test_drv_unload
- 以管理员身份运行加载脚本:
-
- 通过dmesg命令查看内核打印的信息
二、实验过程中遇到的问题及其解决方法
- 问题1:运行load脚本提示无效的组
- 解决方法1:在load脚本中的
group="david"david
不是当前虚拟机的组用户,可通过cat /etc/passwd查看所有的用户信息,cat /etc/group查看所有组信息`,然后将脚本中的组名改成系统中有的组名即可
- 问题2:运行load脚本出现错误
insmod: error inserting ./test_drv.ko': -1 File exists
- 解决方法2:将虚拟机重新启动
- 问题3:进行卸载驱动程序时出现
Device or resource busy
- 解决方法3:造成此问题的原因是,系统目前的gcc版本与内核的gcc 版本不符合导致的。
三、心得体会
- 有了上一次的教训,这次的实验我们提前进行的充分的预习,所以完成的较为迅速。中途也出现过一些问题,我们也都一同解决了。
- 三人组队,真的是"组队",没有那种一人单干的感觉。"臭皮匠们"已经逐渐踏上诸葛亮的道路了。