- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux字符设备驱动作业——说明及测试文档.doc
Linux字符设备驱动作业——说明及测试文档
内容
编写字符设备驱动并测试通过
作业提交的内容:
make_upperdrv ;upperdrv.c的makefile文件
upperdrv.c ;softdev设备的驱动程序,设备名:upper,主设备号:117
dread.c ;测试程序,对设备的读操作
dwrite.c ;测试程序,对设备的写操作
dioctl.c ;测试程序,对设备的控制操作
设备
虚拟设备softdev.c
softdev_send(),softdev_recv()
softdev_ioctl()
功能:小写转大写
Makefile
编译加载设备
make softdev.o
insmod softdev.o 开发环境
Linux 2.4.x 内核源程序
Gcc 编译器
make
使用C 语言开发 设备驱动
文件名:upperdrv.c
设备名:upper
设备类型:字符设备
主设备号:117
从设备号:n 测试程序
写设备程序:dwrite,一次写一个字符串,写完退出
dwrite device name string
读设备程序:dread,循环读取设备接收到数据,并显示
dread device name
设置设备程序:dioctl,设置设备工作方式,0:不做大写转换,1:做大写转换。缺省工作方式为1
dioctl device name digit mode
Linux字符设备驱动
检查标准
测试标准
在/proc/devices中能看到该设备名
可以对该设备进行读写。作业的内容包括对设备的读写程序。可以用该程序对设备进行测试
设置设备做大写转换或者不做大写转换。缺省状态下做小写(大写转换,可以设置为不做转换
该设备驱动用softdev设备的softdev_send和softdev_recv做发送和接受
使用模块(module)方式加载
测试步骤及结果:[假定内核已经过编译,有.config文件,支持模块加载]
1,在Linux下,加载入softdev设备:
命令:make ;产生softdev.o
insmod softdev.o ;加载softdev
2, 编译upperdrv.c并加载:
先在/dev/下注册一个设备节点:mknod /dev/upper c 117 0 ;主设备号117 次设备号0
make –f make_upperdrv ;产生 upperdrv.o
insmod upperdrv.o ;加载upperdrv
这是能够 lsmod 命令看到 upperdrv Used by
softdev Used by [upperdrv]
在/proc/devices中能看到该设备名: cat /proc/devices , 显示 Character Devices: ……117 upper 说明设备upper已加载成功。
3, 编译dwrite.c, dread.c, dioctl.c:
gcc –o dwrite dwrite.c
gcc –o dread dread.c
gcc –o dioctl dioctl.c
4, 测试相应功能:.
各命令格式为:dwrite +device name +[string] ;在当前目录下就是 ./dwrite upper string
dread + upper ;在当前目录下就是 ./dread upper
dioctl +device name+[cmd] ;在当前目录下就是 ./dioctl upper 1;1表示小写转大写模式,0表示不转换
实例操作:
命令 ./dwrite upper abcdefghijk1234 屏幕显示 buf=” abcdefghijk1234” strlen(buf)=15
After write, return len=15
15 bytes written to device!
在另一窗口打命令 ./dread upper 屏幕显示 readmsg_len=15
ABCDEFGHIJK1234
以上是在设备默认的小写字母转大写字母的模式下,通过dioctl可以改变这一模式:
命令 ./dioctl upper 0 在打入上面的dwrite命令后,dread显示的就是abcdefghijk1234了
文档评论(0)