linux字符设备驱动学习笔实用.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux 字符设备驱动学习笔记 1 一、 设备文件 1、什么是设备文件?设备文件有什么用? linux 设备文件就是一个实实在在看得见的文件 (什么是文件?一个 txt 文本就是一个文 件、一个 word 文档就是一个文件、 一张图片就是一个文件) ,只不过这个文件是 “设备类型 ”, 它是用来代表一个设备的, 一般在设备驱动加载之后创建, 在设备驱动卸载后移除。 有了设 备文件, 如果想对设备进行等操作。 只需对设备文件进行等操作即可。 这是如何实现的呢? 就是通过驱动程序实现的: 设备文件操作 系统内核 设备驱动 硬件设备, 设备 文件也是一个文件, c 库中对文件的操作包括打开、写、读、定位等,分别是通过 fopen 、 fwrite 、fread 、fseek 等 c 库函数实现的。 设备驱动的作用就是将这些对设备文件的打开、 读、写、定位等操作转化为对硬件设备的打开、读、写、定位等操作 。那么仅仅是实现对设 备进行打开、 读、写、定位等操作就能完全控制好它么?对于能与微控制器接口的设备都可 以? 2 、如何创建设备文件? 有两种方法: 1. 手工创建 mknod 方法: mknok filename type major minor 【major- 主 设备号; minor- 次设备号; type- 设备类型可取: c (字符设备),b (块设备)】执行此命令 之后就可以看到在当前目录下生成了一个名为 filename 的文件。 2. 自动创建 : 暂时不知 创建设备文件需要用到主次设备号,那么什么是主次设备号呢? 二、 主次设备号: 1、什么是主次设备号?主次设备号的作用是什么? 设备号, 就是系统为设备分配的一个编号。 在/dev 目录下 -ll ,可以看到有每个设备文件 都有两个号 ,他们就是主次设备号。 主设备号是用来标识与设备文件 (什么是设备文件?上面讲过) 相连的驱动程序, 主设 备号用来反映设备类型 ;次设备号被驱动程序用来辨别操作的是哪个设备, 次设备号用来区 分同类型的设备 。设备文件需要设备号才能创建;设备驱动也需要设备号才能装载。 设备文件正是通过主设备号找到它的驱动; 设备驱动正是利用次设备号才知道他要操作的具 体是哪个设备。 2 、内核中如何描述设备号? 内核中用 dev_t 类型来描述,其实质是是 unsigned int 32位整数,其中高 12位为主 设备号, 低20 位为次设备号用宏 MAJOR(dev_t dev )解出主设备号, MINOR(dev_t dev ) 分解出次设备号。 3 、linux 内核如何分配主次设备号? 静态申请: 1.根据 /documentation/devices.txt, 确定一个没有使用的主设备号 2. 使用 register_chrdev_region 函数注册设备号: int register_chrdev_region(dev_t from, unsigned count ,const char *name )【from- 希望使用的设备号; count- 望申请 使用的设备号数目; nanme-shebeiming (体现在/proc/devices) 】 静态注册的缺点是移植时容易发生冲突,但是简单。 动态分配 :使用 allo_chrdev_region 分配设备号: int allo_chrdev_region (dev_t *dev , unsigned baseminor, unsigned count ,co

您可能关注的文档

文档评论(0)

cy65918457 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档