山那边是海 发表于 2015-1-16 16:40:21

带来一篇Linux体系下驱动程序框架概述

对于开发环境的选择尽量要轻量级和高度可定制,航空母舰级别的工具往往会让你迷惑不解;
1、linux的设备驱动程序与外界的接口能够分为三个部分:
1.驱动程序与操纵体系内核的接口。经由过程file_operations(include/linux/fs.h)数据布局来完成的。
2.驱动程序与体系引诱的接口。这部分使用驱动程序对设备举行初始化。
3.驱动程序与设备的接口。这部分形貌了驱动程序怎样与设备举行交互,与详细的设备亲切相干。
2、依据功效分别,设备驱动程序的代码有以下几部分:
1.驱动程序的注册和刊出。
2.设备的翻开和开释。
3.设备的读写操纵。
4.设备的把持操纵。
5.设备的中止和轮询处置。
3、驱动程序的注册和刊出:
设备驱动程序能够在体系启动的时分初始化,也能够在必要的时分静态加载。字符设备的初始化由chr_dev_init()完成,包含对内存(devfs_register_chrdev(MEM_MAJOR,"mem",&memory_fops)),终端(tty_init()),打印机(lp_init()),鼠标(misc_init())等字符设备的初始化。
块设备初始化由blk_dev_init()完成,这包含对IDE硬盘(ide_init()),软盘(floppy_init()),光驱等块设备的初始化。
每一个字符设备或是块设备的初始化都是经由过程devfs_register_chrdev()或是devfs_register_blkdev()向内核注册。在封闭字符设备或是块设备时,还必要经由过程devfs_unregister_chrdev()或是devfs_unregister_blkdev()从内核中刊出设备。
4、设备的翻开和开释:
翻开设备是由open()来完成的。比方,打印机是用lp_open()翻开的,而硬盘是用hd_open()翻开的。在年夜部分设备驱动程序中,open完成以下事情:
1.增添设备的是用计数。
2.反省设备的相干毛病,如设备还没有筹办好或是相似硬件的成绩。
3.反省是初次翻开,则初始化设备。
4.辨认次设备号,若有需要则更新f_op指针。
5.假如必要,分派且设置要放在filp->private_data里的数据布局。
开释设备由release()来完成,比方开释打印机是用lp_release(),而开释终端设备是用tty_release()。开释设备的一样平常步骤包含:
1.开释在filp->private_data中的open分派的内存。
2.假如是最初一次开释,则封闭设备。
3.递加设其余利用计数。
5、设备的读写操纵:
字符设备利用各自的read()和write()来举行数据读写。比方,对假造终真个读写是经由过程vcs_read()和vcs_write()来举行数据读写的。
块设备利用通用的generic_file_read()和generic_file_write()来举行数据读写。这两个通用函数向哀求表增加读写哀求,内核能够经由过程ll_rw_block()优化哀求按次。因为是对内存缓冲区而不是设备举行操纵的,因此能够加速读写哀求。假如内存缓冲区内没有要读进的数据或是要将写哀求写进设备,那末就要真实的实行数据传输。这是经由过程数据布局request_queue和request_fn()来完成(include/linux/blkdev.h)。
6、设备的把持操纵:
除读写操纵,偶然还要把持设备。这能够经由过程设备驱动程序中的ioctl()来完成。比方IDE硬盘的把持能够经由过程hd_ioctl(),对光驱的把持能够经由过程cdrom_ioctl()。
与读写操纵分歧,ioctl()的用法与详细设备亲切相干。以软驱的floppy_ioctl()为例(drivers/block/floppy.c):
staticintfd_ioctl(structinode*inode,
structfile*filp,
unsignedintcmd,
unsignedlongparam);
个中,cmd的取值及寄义都是与软驱有关的,好比,FDEJECT暗示弹出软盘。
除ioctl(),设备驱动程序还大概有其他把持函数,好比llseek()等。
7、设备的轮询和中止处置:
关于不撑持中止的设备,读写时必要轮询设备形态,和是不是必要持续举行数据传输。比方,打印机。假如设备撑持中止,则可依照中止体例举行

</p>
要多动手,不要怕什么搞坏了怎么办,你不搞坏,不去动手,就永远不会有收获,既然你在linux中是自由的,那就发挥自己的权利;

若天明 发表于 2015-1-18 16:51:00

发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。

莫相离 发表于 2015-1-23 05:18:46

随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。

若相依 发表于 2015-1-31 14:22:34

众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。

再现理想 发表于 2015-2-6 19:57:46

一定要学好命令,shell是命令语言,命令解释程序及程序设计语言的统称,shell也负责用户和操作系统之间的沟通。

再见西城 发表于 2015-2-18 12:39:15

上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.

山那边是海 发表于 2015-3-6 07:10:42

在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。

精灵巫婆 发表于 2015-3-12 22:23:22

选择交流平台,如QQ群,网站论坛等。

金色的骷髅 发表于 2015-3-20 04:20:34

写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。
页: [1]
查看完整版本: 带来一篇Linux体系下驱动程序框架概述