2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计

一、实验内容

任务1

  • 学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章
  • 提交康奈尔笔记的照片(可以多张)

任务2

  • 在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
  • 提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)
  1. 将所需代码test_drv.c、test.c、Makefile、test_drv_load、test_drv_unload准备好放在test文件夹下

  2. 编译并加载驱动模块

    • 编译:make clean;make
    • 给脚本文件增加可执行权限:chmod +x ./test_drv_load
    • 以管理员身份运行加载脚本:sudo ./test_drv_load
  1. 编译并运行测试程序
    • 编译:gcc -o test test.c
    • 给文件增加可执行权限:chmod +x ./test
    • 以管理员身份运行:sudo ./test
  1. 卸载驱动程序
    • 给脚本文件增加可执行权限: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 版本不符合导致的。

三、心得体会

  • 有了上一次的教训,这次的实验我们提前进行的充分的预习,所以完成的较为迅速。中途也出现过一些问题,我们也都一同解决了。
  • 三人组队,真的是"组队",没有那种一人单干的感觉。"臭皮匠们"已经逐渐踏上诸葛亮的道路了。

四、参考资料

posted @ 2019-11-25 14:26  20175313张黎仙  阅读(125)  评论(0编辑  收藏  举报