博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018-2019-1 20165309 20165312 20165330 实验四 外设驱动程序设计
阅读量:6091 次
发布时间:2019-06-20

本文共 1457 字,大约阅读时间需要 4 分钟。

实验目的

  • 编写最简单的字符驱动程序
  • 实现简单的读写功能,并列出常用格式的Makefile以及驱动的加载和卸载脚本
  • 熟悉字符设备驱动的整个编写流程

实验内容及步骤

任务一

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

任务二

  • 任务详情
    • 在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
    • 提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)
  • 实验步骤
    • 在VMware虚拟机中创建文件夹
    • 将第十一章中关于字符设备的test实验中代码:test_drv.ctest.cMakefiletest_drv_loadtest_drv_unload敲入并保存在文件夹内
    • 代码链接如下
      • 要注意在Makefile中命令换行要用Tab键进行缩进

  • 实验结果及截图
    • 编译并加载驱动模块
      • 编译:make clean;make
      • 给脚本文件增加可执行权限:chmod +x ./test_drv_load
      • 以管理员身份运行加载脚本:sudo ./test_drv_load
    • 编译并运行测试程序
      • 编译:gcc -o test test.c
      • 给文件增加可执行权限:chmod +x ./test
      • 以管理员身份运行:sudo ./test
      • 根据提示输入信息
    • image
    • 卸载驱动程序
      • 给脚本文件增加可执行权限:chmod +x ./test_drv_unload
      • 以管理员身份运行加载脚本:sudo ./test_drv_unload
      • image
    • 通过dmesg命令查看内核打印的信息

      $ dmesg|tail –n 10   ……  The major of the test device is 250   This is open operation   This is release operation   Test device uninstalled

实验过程中遇到的问题及解决办法

  • 在进行对驱动模块的编译时出现

    image

    解决办法:经过查阅才知道忽略了Makefile的语法规定:Makefile中的任何命令之前都必须要有一个tab缩进,否则make就会报错。

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

    解决办法:该错误翻译为InSimd:插入“./TestEdRv.Ko”的错误:存在1个文件,将虚拟机重新启动

  • 在运行结束后再一次编译运行load输入sudo ./test_drv_unload后出错

    image

    解决办法:重启虚拟机再次运行脚本

  • 运行test时出现open:No such device or address

    解决办法:这是虚拟机未连接网络的情况,先将打开VM虚拟机-设置-网络适配器连接方式改为NAT模式,在按照设置即可联网运行test

  • 运行load脚本提示无效的组

    image

    解决办法:这说明在load脚本中的group="david"david不是当前虚拟机的组用户,可通过cat /etc/passwd查看所有的用户信息,cat /etc/group查看所有组信息`,然后将脚本中的组名改成系统中有的组名即可

  • 进行卸载驱动程序时提示错误

    1291750-20181202222218962-49612608.png

    暂时未找到解决办法。。

参考资料

转载于:https://www.cnblogs.com/besty-zyx/p/10033361.html

你可能感兴趣的文章
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>