2017-2018-1 20155213 实验四 外设驱动程序设计
实验目的
1、学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章
2、在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
3、提交编译,加载模块,卸载模块,测试运行的截图
实验任务
任务一
- 学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章
- 提交康奈尔笔记的照片(可以多张)
笔记照片
任务二
- 在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
- 提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)
要点
- 本部分就是敲代码,理解最基础的kernel编程。
- 代码不必要自己敲,因为pdf首页写着,有赠送光盘贴有代码,所以买了本书,也就解决了敲代码问题。
截图如下
任务三
- 在实验箱中通过交叉编译完成test实验
提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)
未完成(老师叫停)
出现的问题及解决
PS:需要注意,一定在实验一的虚拟机上做,因为那里面的环境已经搭好了,不然很难成功。
问题一,
insmod:error inserting './test_drv.ko':-1 Operation not permitted
- 问题一解决:上面的意思是操作没有被允许,即是权限问题,加上一个sudo就好了。
- 问题二,
chgrp:无效的组:"david"
- 问题二解决:上面的意思很明显,就是david是无效组,将test_drv_load里面的组改为自己linux所在组就好了。
问题三:
ERROR:Removing 'test_drv':Device or resource busy
问题三解决:百度了很久没能找到好的解决方法,就只能从原理上解决了,但可以使用unload里面的指令直接强制删除test_dev文件,然后重启虚拟机就可以了,因为其中rmmod的test_drv是存在proc里面的,而proc是只存在与内存中的,使所以重启后,自然没了,从而解决问题。