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

目录

  • 一、实验内容
  • 二、实验过程中遇到的问题及其解决方法
  • 三、心得体会
  • 四、参考资料

一、实验内容

任务1

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

    2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第1张图片
    2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第2张图片

任务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

      2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第3张图片
      2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第4张图片

  1. 编译并运行测试程序
    • 编译:gcc -o test test.c
    • 给文件增加可执行权限:chmod +x ./test
    • 以管理员身份运行:sudo ./test

      2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第5张图片

  1. 卸载驱动程序
    • 给脚本文件增加可执行权限:chmod +x ./test_drv_unload
    • 以管理员身份运行加载脚本:sudo ./test_drv_unload

    • 通过dmesg命令查看内核打印的信息

      2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第6张图片

二、实验过程中遇到的问题及其解决方法

  • 问题1:运行load脚本提示无效的组
  • 解决方法1:在load脚本中的group="david"david不是当前虚拟机的组用户,可通过cat /etc/passwd查看所有的用户信息,cat /etc/group查看所有组信息`,然后将脚本中的组名改成系统中有的组名即可

2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第7张图片
2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第8张图片

  • 问题2:运行load脚本出现错误insmod: error inserting ./test_drv.ko': -1 File exists

    2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第9张图片

  • 解决方法2:将虚拟机重新启动

    2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计_第10张图片

  • 问题3:进行卸载驱动程序时出现Device or resource busy

  • 解决方法3:造成此问题的原因是,系统目前的gcc版本与内核的gcc 版本不符合导致的。

三、心得体会

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

四、参考资料

  • linux下查看所有用户及所有用户组的信息
  • ERROR: Removing '***': Device or resource busy
  • Makefile简易教程
  • 加载驱动模块时Device or resource busy的解决方法

你可能感兴趣的:(2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计)