Linx设备驱动开发.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linx设备驱动开发

Linux设备驱动开发 * 每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备。 每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。 * 一 Linux设备驱动程序分类 字符设备 块设备 网络设备 * 字符设备 字符设备是顺序读取和写入的。 块设备 面向大量数据传输或慢速设备,可节省CPU的等待时间。对块设备进行读写操作时,需要先开辟一段内存缓冲区。 两者的主要区别是在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。 * 二 Linux驱动程序的加载方式 驱动程序直接编译进内核 采用这种方式编译的驱动程序在内核启动时就已经在内存中,运行时不需要再自己加载驱动。 这需要修改config.in和makefile脚本。 驱动程序的模块加载 驱动程序以模块的形式存储在文件系统中,需要时动态载入内核。不用时节省内存,且独立于内核,升级方便。 在嵌入式系统中,主要在开发阶段采用这种方式。 * 三 Linux 2.4和2.6内核设备驱动的区别 在linux2.4内核以前,系统一直利用设备类型和设备的主次设备号管理设备; linux2.4后,引入了设备文件系统(devfs) Linux2.6内核中,引入udev设备文件系统; * 3.1 devfs设备文件系统 可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载时删除。 设备驱动程序可以指定设备名,所有者和权限位 可以不需要为设备驱动程序分配主设备号以及处理次设备号,可以直接给register_chrdv()传递0主设备号以动态获取主设备号,并在devfs_register()中指定次设备号. * 3.1 devfs设备文件系统 驱动程序调用如下函数进行设备文件的创建和删除工作。 1 创建设备目录 devfs_handle_t devfs_mk_dir(devfs_handle_t dir , const char *name , void *info); 2创建设备文件 devfs_handle_t devfs_register(devfs_handle_t dir , const char *name , unsigned int flags , unsigned int major , unsigned int minor , umode_t mode , void *ops , void *info); 3注销设备文件 void devfs_unregister(devfs_handle_t dir); * 3.1 devfs设备文件系统 static int _init example(void) { int ret = -enodev ; int delay ; //注册字符型设备 ret = devfs_register_chrdev(MAJOR, “chardevice”,chadevice_ops); if(ret0){} else{} //注册devfs设备 dev_handle = devfs_register(null , “chardevice”,DEVFS_FL_DEFAULT, ,0,,chardevice_ops , null ); return ret; } //chardevice设备向系统注册的OPS结构: struct file_operations chardevice_ops={ open:open, read:read, write:write, loctl:ioctl, colse:release, } * 3.2嵌入式linux驱动程序常用的头文件 #include linux/config.h //内核编译的配置文件 #include linux/module.h //模块驱动程序的头文件 #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/devfs_fs_kernel.h #include linux/miscdevice.h #include linux/delay.h #include linux/version.h * 3.3 file_oper

文档评论(0)

seunk + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档