(三)驱动开发字符设备过程

本文详细介绍了Linux驱动开发中字符设备的框架,包括设备号、设备节点、驱动注册、设备创建、文件操作接口的实现、数据传输以及控制外设的方法。通过实例展示了如何编写字符设备驱动,强调了驱动和应用程序在控制外设中的角色和职责划分。
摘要由CSDN通过智能技术生成
1,字符设备驱动框架
 作为字符设备驱动要素:
  1,必须有一个设备号,用在众多到设备驱动中进行区分
  2,用户必须知道设备驱动对应到设备节点(设备文件)
   linux把所有到设备都看成文件
   crw-r----- 1 root root 13, 64 Mar 28 20:14 event0
   crw-r----- 1 root root 13, 65 Mar 28 20:14 event1
   crw-r----- 1 root root 13, 66 Mar 28 20:14 event2
  3,对设备操作其实就是对文件操作,应用空间操作open,read,write的时候
   实际在驱动代码有对应到open, read,write
 
2,作为驱动必须有一个主设备号--向系统申请
 
 int register_chrdev(unsigned int major, const char * name, const struct file_operations * fops)
 参数1:主设备号
   设备号(32bit--dev_t)==主设备号(12bit) + 次设备号(20bit)
    主设备号:表示一类设备--camera
    次设备号: 表示一类设备中某一个:前置,后置
   给定到方式有两种:
    1,动态--参数1直接填0
    2,静态--指定一个整数,250

 参数2: 描述一个设备信息,可以自定义
   /proc/devices列举出所有到已经注册的设备
 参数3: 文件操作对象--提供open, read,write
 返回值: 正确返回0,错误返回负数

 void unregister_chrdev(unsigned int major, const char * name)
 参数1:主设备号
 参数2: 描述一个设备信息,可以自定义

3,创建设备节点:
 1,手动创建--缺点/dev/目录中文件都是在内存中,断电后/dev/文件就会消失
  
  mknod /dev/设备名  类型  主设备号 次设备号
  比如:
   mknod  /dev/chr0  c  250 0

  [root@farsight drv_module]# ls /dev/chr0 -l
  crw-r--r--    1 0        0         250,   0 Jan  1 00:33 /dev/chr0
 2,自动创建(通过udev/mdev机制)
  struct class *class_create(owner, name)//创建一个类
   参数1: THIS_MODULE
   参数2: 字符串名字,自定义
   返回一个class指针
  //创建一个设备文件
  struct device *device_create(struct class * class, struct device * parent, dev_t devt,
       void * drvdata, const char * fmt,...) <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值