表一个打开的文件,它由内核在ope
时创建,并传递给在该文件上进行操作的所有函数,直到碰到最后的close函数。在文件的所有实例都被关闭之后,内核会释放这个数据结构;③i
ode结构,提供了关于特殊设备文件devmydev的信息。
各个结构的定义如下:
(1)file_operatio
s结构:staticco
ststructfile_operatio
smy_fops
ow
erTHIS_MODULEllseekmy_llseekreadmy_readwritemy_writeope
my_ope
releasemy_releaseu
locked_ioctlioctl(2)file结构:1)读staticssize_tmy_readstructfilefilpchar__userbufsize_tsizeloff_tppos2)写staticssize_tmy_writestructfilefilpco
stchar__userbufsize_tsizeloff_tppos3)seek文件定位staticloff_tmy_llseekstructfilefilploff_toffseti
twhe
ce4)IO控制statici
tioctlstructfilefileu
sig
edi
tcmdu
sig
edlo
garg(3)i
ode结构:1)打开
fi
tmy_ope
structi
odei
odestructfilefilp2)释放i
tmy_releasestructi
odei
odestructfilefilp23、算法流程图:
开始
设备驱动模块加载函数ly_i
it
文件打开函数ly_ope
读函数ly_read
写函数ly_write
Seek文件定位函数ly_llseek
IO控制函数Ioctl
文件释放函数ly_release
设备驱动模块卸载函数mydev_exit
结束
f四、系统测试与调试分析
41系统测试
411启动超级管理员模式并输入密码命令:sudosu
412对源程序进行编译命令:make
415创建节点并查看命令:mk
oddevlydev550和cddev
413加载驱动程序并查看命令:i
smodlydevko和lsmod
416编译测试程序命令:gccottestc
414显示主设备号命令:catprocdevices
417运行测试函数命令:t
f418进行打开设备操作命令:1
4112进行释放设备操作命令:5
419进行写操作并输入hello命令:2
4113进行退出操作命令:6
4110进行读操作命令:3
4114卸载驱动程序命令:rmmodlydev
4111进行IO控制命令:4
4115查看日志命令:dmesg
f4116删除节点并查看命令:rmlydev和ls
42调试分析最开始的时候没有启用sudo模式,导致很多命令不能执行,启用模式的时候需要输入密
码,但是输入密码的时候是不显示东西的以为出错,查阅资料之后才知道是应有的现象。程序测试一遍之后再次测试很多命令不能执行,原因是第一次测试之后产生的各种文件
没有删除,再次测试会显示已存在。有一次测试程序,不能卸载驱动,用lsmod查看有两个进程使用,后来强制关机才能正
常使用,原因不明,以后要加强学习。
五、程序清单
1主程序i
cludeli
uxmodulehi
cludeli
uxtypeshi
cludeli
uxfshi
cludeli
uxerr
ohi
cludeli
uxmmhi
cludeli
uxschedhi
cludelir